CLF.Typ
External contextual LF types.
type t =
| Constant of {
location : Syncom.Location.t;
identifier : Syncom.Qualified_identifier.t;
}
Constant { identifier = "c"; _ }
is the type-level constant with qualified identifier "c"
.
| Application of {
location : Syncom.Location.t;
applicand : t;
arguments : Term.t Support.List1.t;
}
Application { applicand; arguments; _ }
is the type-level application of applicand
with arguments
.
If applicand = Typ.Constant _
with resolved operator description operator
, then List1.length arguments = Operator.arity operator
.
| Arrow of {
location : Syncom.Location.t;
domain : t;
range : t;
orientation : [ `Forward | `Backward ];
}
Arrow { domain; range; orientation = `Forward; _ }
is the type domain -> range
.Arrow { range; domain; orientation = `Backward; _ }
is the type range <- domain
.| Pi of {
location : Syncom.Location.t;
parameter_identifier : Syncom.Identifier.t Support.Option.t;
parameter_type : t;
plicity : Syncom.Plicity.t;
body : t;
}
Pi { parameter_identifier = Option.Some "x"; parameter_type = t; body; _ }
is the dependent product type { x : t } body
. The variable "x"
ranges over LF terms.Pi { parameter_identifier = Option.None; parameter_type = t; body; _ }
is the dependent product type { _ : t } body
.| Block of {
location : Syncom.Location.t;
elements : [ `Unnamed of t
| `Record of (Syncom.Identifier.t * t) Support.List1.t ];
}
Block { elements = `Unnamed t; _ }
is the block type block t
.Block { elements = `Record [("x1", t1); ("x2", t2); ...; ("xn", tn)]; _ }
is the block type block (x1 : t1, x2 : t2, ..., xn : tn)
. This is a dependent sum type, or telescope, with tj
being able to refer to "xi"
when i < j
.