Comp.Expression_object
type t =
| Raw_identifier of {
location : Beluga_syntax.Syncom.Location.t;
identifier : Beluga_syntax.Syncom.Identifier.t;
prefixed : Stdlib.Bool.t;
}
| Raw_qualified_identifier of {
location : Beluga_syntax.Syncom.Location.t;
identifier : Beluga_syntax.Syncom.Qualified_identifier.t;
prefixed : Stdlib.Bool.t;
}
Raw_qualified_identifier { identifier = "M.x"; prefixed = false; _ }
is the constant "M.x"
.Raw_qualified_identifier { identifier = "M.x"; prefixed = true; _ }
is the prefixed constant "(M.x)"
.Since identifiers are ambiguous with qualified identifiers in the parser, the following may be assumed during disambiguation: List.length (Qualified_identifier.namespaces identifier) >= 1
.
Qualified identifiers are ambiguous with observations.
A prefixed constant may appear as an argument, or as applicand in prefix notation irrespective of its pre-defined fixity and associativity.
*)| Raw_fn of {
location : Beluga_syntax.Syncom.Location.t;
parameters : (Beluga_syntax.Syncom.Location.t
* Beluga_syntax.Syncom.Identifier.t Support.Option.t)
Support.List1.t;
body : t;
}
| Raw_mlam of {
location : Beluga_syntax.Syncom.Location.t;
parameters : (Beluga_syntax.Syncom.Location.t
* (Beluga_syntax.Syncom.Identifier.t Support.Option.t
* [ `Plain | `Hash | `Dollar ]))
Support.List1.t;
body : t;
}
| Raw_fun of {
location : Beluga_syntax.Syncom.Location.t;
branches : (Synprs__.Synprs_definition.Meta.Context_object.t
* Copattern_object.t Support.List1.t
* t)
Support.List1.t;
}
| Raw_box of {
location : Beluga_syntax.Syncom.Location.t;
meta_object : Synprs__.Synprs_definition.Meta.Thing.t;
}
| Raw_let of {
location : Beluga_syntax.Syncom.Location.t;
meta_context : Synprs__.Synprs_definition.Meta.Context_object.t;
pattern : Pattern_object.t;
scrutinee : t;
body : t;
}
| Raw_impossible of {
location : Beluga_syntax.Syncom.Location.t;
scrutinee : t;
}
| Raw_case of {
location : Beluga_syntax.Syncom.Location.t;
scrutinee : t;
check_coverage : Stdlib.Bool.t;
branches : (Synprs__.Synprs_definition.Meta.Context_object.t
* Pattern_object.t
* t)
Support.List1.t;
}
| Raw_tuple of {
location : Beluga_syntax.Syncom.Location.t;
elements : t Support.List2.t;
}
| Raw_hole of {
location : Beluga_syntax.Syncom.Location.t;
label : Beluga_syntax.Syncom.Identifier.t Support.Option.t;
}
| Raw_box_hole of {
location : Beluga_syntax.Syncom.Location.t;
}
| Raw_application of {
location : Beluga_syntax.Syncom.Location.t;
expressions : t Support.List2.t;
}
| Raw_annotated of {
location : Beluga_syntax.Syncom.Location.t;
expression : t;
typ : Sort_object.t;
}
| Raw_observation of {
location : Beluga_syntax.Syncom.Location.t;
scrutinee : t;
destructor : Beluga_syntax.Syncom.Qualified_identifier.t;
}
Raw_observation { scrutinee = e; destructor = ".tl"; _ }
is the observation e .tl
.
Because of the lexical convention, destructor
may be multiple consecutive destructors. For instance, (x) .tl .tl
has destructor = ".tl.tl"
.