CLF.TypExternal 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.