Previous: overview type ids, Up: overview [Contents][Index]
A typed lexical variable, shortly typed variable, is a bound
syntactic identifier whose syntactic binding’s descriptor contains both
informations about a lexical variable and its type annotation. Typed
variables are created by the built–in binding syntaxes lambda,
define, let, letrec, let-values, et cetera.
An example of typed binding creation follows:
#!vicare
(program (demo)
(options typed-language)
(import (vicare)
(define {O <fixnum>}
123))
the syntactic identifier O represents a typed variable with type
annotation <fixnum>.
At the time the typed variable’s syntactic binding is established: the
type annotation must hold only already bound type identifiers. So the
following program (where ‘---’ represents an unspecified form) is
correct because <duo> is bound before O:
#!vicare
(program (demo)
(options typed-language)
(import (vicare))
(define-record-type <duo>
(fields one two))
(define {O <duo>}
---))
the follow program is not correct:
#!vicare
(program (demo)
(options typed-language)
(import (vicare))
(define {O <duo>}
---)
(define-record-type <duo>
(fields one two)))
and will cause an expand–time syntax violation.