| Invalid_syntax of Pos.t
| Unknown_id of {id : Sym.t; pos : Pos.t}
| Unknown_type of {ty_id : Sym.t; pos : Pos.t}
+ | Id_is_a_function of {id : Sym.t; pos : Pos.t}
| Id_not_a_function of {id : Sym.t; pos : Pos.t}
+ | No_such_field_in_record of {field : Sym.t; record : Typ.t; pos : Pos.t}
+ | Exp_not_a_record of {ty : Typ.t; pos : Pos.t}
+ | Wrong_type of
+ { expected : Typ.t
+ ; given : Typ.t
+ ; pos : Pos.t
+ }
| Wrong_type_of_expression_in_var_dec of
{ var_id : Sym.t
; expected : Typ.t
s "Unknown identifier %S in %s" (Sym.to_string id) (Pos.to_string pos)
| Unknown_type {ty_id; pos} ->
s "Unknown type %S in %s" (Sym.to_string ty_id) (Pos.to_string pos)
+ | Id_is_a_function {id; pos} ->
+ s "Identifier %S is a function, it cannot be used as a variable in %s"
+ (Sym.to_string id) (Pos.to_string pos)
| Id_not_a_function {id; pos} ->
s "Identifier %S is not a function, it cannot be called in %s"
(Sym.to_string id) (Pos.to_string pos)
+ | No_such_field_in_record {field; record; pos} ->
+ s "No field %S in record %S in %s"
+ (Sym.to_string field) (Typ.to_string record) (Pos.to_string pos)
+ | Exp_not_a_record {ty; pos} ->
+ s ( "This expression has type %S, it is not a record, it cannot be"
+ ^^"accessed in %s")
+ (Typ.to_string ty) (Pos.to_string pos)
+ | Wrong_type {expected; given; pos} ->
+ s "Type error: expected: %S, but given: %S, in %s"
+ (Typ.to_string expected)
+ (Typ.to_string given)
+ (Pos.to_string pos)
| Wrong_type_of_expression_in_var_dec {var_id; expected; given; pos} ->
s ( "Wrong type of expression in declaration of %S. "
^^"Expected: %S, given: %S. In %s")
true
| Invalid_syntax _
| Unknown_type _
+ | Id_is_a_function _
| Id_not_a_function _
+ | No_such_field_in_record _
+ | Exp_not_a_record _
+ | Wrong_type _
| Wrong_type_of_expression_in_var_dec _
| Wrong_type_used_as_record _
| Wrong_type_of_field_value _