Module Shared_ast.Op

Classification of operators on how they should be typed

type monomorphic = < monomorphic : yes >

Operands and return types of the operator are fixed

type polymorphic = < polymorphic : yes >

The operator is truly polymorphic: it's the same runtime function that may work on multiple types. We require that resolving the argument types from right to left trivially resolves all type variables declared in the operator type.

type overloaded = < overloaded : yes >

The operator is ambiguous and requires the types of its arguments to be known before it can be typed, using a pre-defined table

type resolved = < resolved : yes >

Explicit monomorphic versions of the overloaded operators

type _ t =
| Not : < monomorphic.. > t
| GetDay : < monomorphic.. > t
| GetMonth : < monomorphic.. > t
| GetYear : < monomorphic.. > t
| FirstDayOfMonth : < monomorphic.. > t
| LastDayOfMonth : < monomorphic.. > t
| Length : < polymorphic.. > t
| Log : log_entry * Catala_utils.Uid.MarkedString.info list -> < polymorphic.. > t
| Minus : < overloaded.. > t
| Minus_int : < resolved.. > t
| Minus_rat : < resolved.. > t
| Minus_mon : < resolved.. > t
| Minus_dur : < resolved.. > t
| ToRat : < overloaded.. > t
| ToRat_int : < resolved.. > t
| ToRat_mon : < resolved.. > t
| ToMoney : < overloaded.. > t
| ToMoney_rat : < resolved.. > t
| Round : < overloaded.. > t
| Round_rat : < resolved.. > t
| Round_mon : < resolved.. > t
| And : < monomorphic.. > t
| Or : < monomorphic.. > t
| Xor : < monomorphic.. > t
| Eq : < polymorphic.. > t
| Map : < polymorphic.. > t
| Concat : < polymorphic.. > t
| Filter : < polymorphic.. > t
| Reduce : < polymorphic.. > t
| Add : < overloaded.. > t
| Add_int_int : < resolved.. > t
| Add_rat_rat : < resolved.. > t
| Add_mon_mon : < resolved.. > t
| Add_dat_dur : date_rounding -> < resolved.. > t
| Add_dur_dur : < resolved.. > t
| Sub : < overloaded.. > t
| Sub_int_int : < resolved.. > t
| Sub_rat_rat : < resolved.. > t
| Sub_mon_mon : < resolved.. > t
| Sub_dat_dat : < resolved.. > t
| Sub_dat_dur : < resolved.. > t
| Sub_dur_dur : < resolved.. > t
| Mult : < overloaded.. > t
| Mult_int_int : < resolved.. > t
| Mult_rat_rat : < resolved.. > t
| Mult_mon_rat : < resolved.. > t
| Mult_dur_int : < resolved.. > t
| Div : < overloaded.. > t
| Div_int_int : < resolved.. > t
| Div_rat_rat : < resolved.. > t
| Div_mon_rat : < resolved.. > t
| Div_mon_mon : < resolved.. > t
| Div_dur_dur : < resolved.. > t
| Lt : < overloaded.. > t
| Lt_int_int : < resolved.. > t
| Lt_rat_rat : < resolved.. > t
| Lt_mon_mon : < resolved.. > t
| Lt_dat_dat : < resolved.. > t
| Lt_dur_dur : < resolved.. > t
| Lte : < overloaded.. > t
| Lte_int_int : < resolved.. > t
| Lte_rat_rat : < resolved.. > t
| Lte_mon_mon : < resolved.. > t
| Lte_dat_dat : < resolved.. > t
| Lte_dur_dur : < resolved.. > t
| Gt : < overloaded.. > t
| Gt_int_int : < resolved.. > t
| Gt_rat_rat : < resolved.. > t
| Gt_mon_mon : < resolved.. > t
| Gt_dat_dat : < resolved.. > t
| Gt_dur_dur : < resolved.. > t
| Gte : < overloaded.. > t
| Gte_int_int : < resolved.. > t
| Gte_rat_rat : < resolved.. > t
| Gte_mon_mon : < resolved.. > t
| Gte_dat_dat : < resolved.. > t
| Gte_dur_dur : < resolved.. > t
| Eq_int_int : < resolved.. > t
| Eq_rat_rat : < resolved.. > t
| Eq_mon_mon : < resolved.. > t
| Eq_dur_dur : < resolved.. > t
| Eq_dat_dat : < resolved.. > t
| Fold : < polymorphic.. > t
| HandleDefault : < polymorphic.. > t
| HandleDefaultOpt : < polymorphic.. > t