Merge branch 'trunk' into new_num_layer

This commit is contained in:
rvcas 2020-12-23 08:24:19 -05:00
commit eda5b72060
9 changed files with 356 additions and 31 deletions

View file

@ -148,17 +148,19 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
unique_function(vec![num_type(u, num), num_type(v, num)], num_type(w, num))
});
// addChecked : Num a, Num a -> Result (Num a) [ IntOverflow ]*
let overflow = SolvedType::TagUnion(
vec![(TagName::Global("Overflow".into()), vec![])],
Box::new(SolvedType::Wildcard),
);
fn overflow() -> SolvedType {
SolvedType::TagUnion(
vec![(TagName::Global("Overflow".into()), vec![])],
Box::new(SolvedType::Wildcard),
)
}
// addChecked : Num a, Num a -> Result (Num a) [ Overflow ]*
add_type(Symbol::NUM_ADD_CHECKED, {
let_tvars! { u, v, w, num, result, star };
unique_function(
vec![num_type(u, num), num_type(v, num)],
result_type(result, num_type(w, num), lift(star, overflow)),
result_type(result, num_type(w, num), lift(star, overflow())),
)
});
@ -174,6 +176,21 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
unique_function(vec![num_type(u, num), num_type(v, num)], num_type(w, num))
});
// subWrap : Int, Int -> Int
add_type(Symbol::NUM_SUB_WRAP, {
let_tvars! { u, v, w, num };
unique_function(vec![num_type(u, num), num_type(v, num)], num_type(w, num))
});
// subChecked : Num a, Num a -> Result (Num a) [ Overflow ]*
add_type(Symbol::NUM_SUB_CHECKED, {
let_tvars! { u, v, w, num, result, star };
unique_function(
vec![num_type(u, num), num_type(v, num)],
result_type(result, num_type(w, num), lift(star, overflow())),
)
});
// mul or (*) : Num a, Num a -> Num a
add_type(Symbol::NUM_MUL, {
let_tvars! { u, v, w, num };