most of Num

This commit is contained in:
Folkert 2022-02-27 13:03:47 +01:00
parent 65b1b3fcce
commit 0107d78ea0
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
3 changed files with 218 additions and 175 deletions

View file

@ -135,10 +135,10 @@ impl Default for ModuleCache<'_> {
PQModuleName::Unqualified(ModuleName::from(ModuleName::BOOL)), PQModuleName::Unqualified(ModuleName::from(ModuleName::BOOL)),
); );
// module_names.insert( module_names.insert(
// ModuleId::NUM, ModuleId::NUM,
// PQModuleName::Unqualified(ModuleName::from(ModuleName::NUM)), PQModuleName::Unqualified(ModuleName::from(ModuleName::NUM)),
// ); );
Self { Self {
module_names, module_names,
@ -1734,7 +1734,6 @@ fn update<'a>(
); );
} }
/*
if ![ModuleId::NUM, ModuleId::BOOL, ModuleId::RESULT].contains(&header.module_id) { if ![ModuleId::NUM, ModuleId::BOOL, ModuleId::RESULT].contains(&header.module_id) {
header header
.package_qualified_imported_modules .package_qualified_imported_modules
@ -1744,11 +1743,32 @@ fn update<'a>(
.imported_modules .imported_modules
.insert(ModuleId::NUM, Region::zero()); .insert(ModuleId::NUM, Region::zero());
let prelude_types = [
Symbol::NUM_NUM,
Symbol::NUM_INT,
Symbol::NUM_FLOAT,
Symbol::NUM_NAT,
Symbol::NUM_I8,
Symbol::NUM_I16,
Symbol::NUM_I32,
Symbol::NUM_I64,
Symbol::NUM_I128,
Symbol::NUM_U8,
Symbol::NUM_U16,
Symbol::NUM_U32,
Symbol::NUM_U64,
Symbol::NUM_U128,
Symbol::NUM_F32,
Symbol::NUM_F64,
Symbol::NUM_DEC,
];
for symbol in prelude_types {
header header
.exposed_imports .exposed_imports
.insert(Ident::from("Num"), (Symbol::NUM_NUM, Region::zero())); .insert(Ident::from("Num"), (symbol, Region::zero()));
}
} }
*/
if header.module_id != ModuleId::BOOL { if header.module_id != ModuleId::BOOL {
header header
@ -1765,14 +1785,15 @@ fn update<'a>(
} }
if !header.module_id.is_builtin() { if !header.module_id.is_builtin() {
header // header
.package_qualified_imported_modules // .package_qualified_imported_modules
.insert(PackageQualified::Unqualified(ModuleId::STR)); // .insert(PackageQualified::Unqualified(ModuleId::STR));
//
header // header
.imported_modules // .imported_modules
.insert(ModuleId::STR, Region::zero()); // .insert(ModuleId::STR, Region::zero());
/*
header header
.package_qualified_imported_modules .package_qualified_imported_modules
.insert(PackageQualified::Unqualified(ModuleId::DICT)); .insert(PackageQualified::Unqualified(ModuleId::DICT));
@ -1796,6 +1817,7 @@ fn update<'a>(
header header
.imported_modules .imported_modules
.insert(ModuleId::LIST, Region::zero()); .insert(ModuleId::LIST, Region::zero());
*/
} }
state state
@ -2574,10 +2596,10 @@ fn load_module<'a>(
roc_parse::header::ModuleName::new("Bool"), roc_parse::header::ModuleName::new("Bool"),
Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Bool")))]), Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Bool")))]),
)), )),
// Loc::at_zero(ImportsEntry::Module( Loc::at_zero(ImportsEntry::Module(
// roc_parse::header::ModuleName::new("Num"), roc_parse::header::ModuleName::new("Num"),
// Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Nat")))]), Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Nat")))]),
// )), )),
]; ];
const GENERATES_WITH: &[Symbol] = &[]; const GENERATES_WITH: &[Symbol] = &[];
@ -2682,14 +2704,15 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("repeat")), Loc::at_zero(ExposedName::new("repeat")),
Loc::at_zero(ExposedName::new("countGraphemes")), Loc::at_zero(ExposedName::new("countGraphemes")),
Loc::at_zero(ExposedName::new("startsWithCodePt")), Loc::at_zero(ExposedName::new("startsWithCodePt")),
Loc::at_zero(ExposedName::new("toUtf8")), // Loc::at_zero(ExposedName::new("toUtf8")),
Loc::at_zero(ExposedName::new("fromUtf8")), // Loc::at_zero(ExposedName::new("fromUtf8")),
Loc::at_zero(ExposedName::new("fromUtf8Range")), // Loc::at_zero(ExposedName::new("fromUtf8Range")),
Loc::at_zero(ExposedName::new("startsWith")), Loc::at_zero(ExposedName::new("startsWith")),
Loc::at_zero(ExposedName::new("endsWith")), Loc::at_zero(ExposedName::new("endsWith")),
Loc::at_zero(ExposedName::new("trim")), Loc::at_zero(ExposedName::new("trim")),
Loc::at_zero(ExposedName::new("trimLeft")), Loc::at_zero(ExposedName::new("trimLeft")),
Loc::at_zero(ExposedName::new("trimRight")), Loc::at_zero(ExposedName::new("trimRight")),
/*
Loc::at_zero(ExposedName::new("toDec")), Loc::at_zero(ExposedName::new("toDec")),
Loc::at_zero(ExposedName::new("toF64")), Loc::at_zero(ExposedName::new("toF64")),
Loc::at_zero(ExposedName::new("toF32")), Loc::at_zero(ExposedName::new("toF32")),
@ -2704,6 +2727,7 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("toI16")), Loc::at_zero(ExposedName::new("toI16")),
Loc::at_zero(ExposedName::new("toU8")), Loc::at_zero(ExposedName::new("toU8")),
Loc::at_zero(ExposedName::new("toI8")), Loc::at_zero(ExposedName::new("toI8")),
*/
]; ];
const IMPORTS: &[Loc<ImportsEntry>] = &[ const IMPORTS: &[Loc<ImportsEntry>] = &[
@ -2717,31 +2741,33 @@ fn load_module<'a>(
roc_parse::header::ModuleName::new("Bool"), roc_parse::header::ModuleName::new("Bool"),
Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Bool")))]), Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Bool")))]),
)), )),
/*
Loc::at_zero(ImportsEntry::Module( Loc::at_zero(ImportsEntry::Module(
roc_parse::header::ModuleName::new("List"), roc_parse::header::ModuleName::new("List"),
Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("List")))]), Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("List")))]),
)), )),
// Loc::at_zero(ImportsEntry::Module( */
// roc_parse::header::ModuleName::new("Num"), Loc::at_zero(ImportsEntry::Module(
// Collection::with_items(&[ roc_parse::header::ModuleName::new("Num"),
// Loc::at_zero(Spaced::Item(ExposedName::new("Int"))), // needed because used by the aliases below Collection::with_items(&[
// Loc::at_zero(Spaced::Item(ExposedName::new("Float"))), // needed because used by the aliases below Loc::at_zero(Spaced::Item(ExposedName::new("Int"))), // needed because used by the aliases below
// Loc::at_zero(Spaced::Item(ExposedName::new("Dec"))), Loc::at_zero(Spaced::Item(ExposedName::new("Float"))), // needed because used by the aliases below
// Loc::at_zero(Spaced::Item(ExposedName::new("F64"))), Loc::at_zero(Spaced::Item(ExposedName::new("Dec"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("F32"))), Loc::at_zero(Spaced::Item(ExposedName::new("F64"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("Nat"))), Loc::at_zero(Spaced::Item(ExposedName::new("F32"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("U128"))), Loc::at_zero(Spaced::Item(ExposedName::new("Nat"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("I128"))), Loc::at_zero(Spaced::Item(ExposedName::new("U128"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("U64"))), Loc::at_zero(Spaced::Item(ExposedName::new("I128"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("I64"))), Loc::at_zero(Spaced::Item(ExposedName::new("U64"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("U32"))), Loc::at_zero(Spaced::Item(ExposedName::new("I64"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("I32"))), Loc::at_zero(Spaced::Item(ExposedName::new("U32"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("U16"))), Loc::at_zero(Spaced::Item(ExposedName::new("I32"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("I16"))), Loc::at_zero(Spaced::Item(ExposedName::new("U16"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("U8"))), Loc::at_zero(Spaced::Item(ExposedName::new("I16"))),
// Loc::at_zero(Spaced::Item(ExposedName::new("I8"))), Loc::at_zero(Spaced::Item(ExposedName::new("U8"))),
// ]), Loc::at_zero(Spaced::Item(ExposedName::new("I8"))),
// )), ]),
)),
]; ];
const GENERATES_WITH: &[Symbol] = &[]; const GENERATES_WITH: &[Symbol] = &[];
@ -2773,23 +2799,24 @@ fn load_module<'a>(
EncodesSurrogateHalf, EncodesSurrogateHalf,
] ]
Utf8Problem : { byteIndex : Nat, problem : Utf8ByteProblem } # Utf8Problem : { byteIndex : Nat, problem : Utf8ByteProblem }
isEmpty : Str -> Bool isEmpty : Str -> Bool
concat : Str, Str -> Str concat : Str, Str -> Str
joinWith : List Str, Str -> Str joinWith : List Str, Str -> Str
split : Str, Str -> List Str split : Str, Str -> List Str
repeat : Str, Nat -> Str repeat : Str, Nat -> Str
countGraphemes : Str -> Nat countGraphemes : Str -> Nat
startsWithCodePt : Str, U32 -> Bool startsWithCodePt : Str, U32 -> Bool
toUtf8 : Str -> List U8 # toUtf8 : Str -> List U8
# fromUtf8 : List U8 -> Result Str [ BadUtf8 Utf8Problem ]* # fromUtf8 : List U8 -> Result Str [ BadUtf8 Utf8Problem ]*
# fromUtf8Range : List U8 -> Result Str [ BadUtf8 Utf8Problem, OutOfBounds ]* # fromUtf8Range : List U8 -> Result Str [ BadUtf8 Utf8Problem, OutOfBounds ]*
fromUtf8 : List U8 -> Result Str [ BadUtf8 Utf8ByteProblem Nat ]* # fromUtf8 : List U8 -> Result Str [ BadUtf8 Utf8ByteProblem Nat ]*
fromUtf8Range : List U8 -> Result Str [ BadUtf8 Utf8ByteProblem Nat, OutOfBounds ]* # fromUtf8Range : List U8 -> Result Str [ BadUtf8 Utf8ByteProblem Nat, OutOfBounds ]*
startsWith : Str, Str -> Bool startsWith : Str, Str -> Bool
endsWith : Str, Str -> Bool endsWith : Str, Str -> Bool
@ -2797,21 +2824,6 @@ fn load_module<'a>(
trim : Str -> Str trim : Str -> Str
trimLeft : Str -> Str trimLeft : Str -> Str
trimRight : Str -> Str trimRight : Str -> Str
toDec : Str -> Result Dec [ InvalidNumStr ]*
toF64 : Str -> Result F64 [ InvalidNumStr ]*
toF32 : Str -> Result F32 [ InvalidNumStr ]*
toNat : Str -> Result Nat [ InvalidNumStr ]*
toU128 : Str -> Result U128 [ InvalidNumStr ]*
toI128 : Str -> Result I128 [ InvalidNumStr ]*
toU64 : Str -> Result U64 [ InvalidNumStr ]*
toI64 : Str -> Result I64 [ InvalidNumStr ]*
toU32 : Str -> Result U32 [ InvalidNumStr ]*
toI32 : Str -> Result I32 [ InvalidNumStr ]*
toU16 : Str -> Result U16 [ InvalidNumStr ]*
toI16 : Str -> Result I16 [ InvalidNumStr ]*
toU8 : Str -> Result U8 [ InvalidNumStr ]*
toI8 : Str -> Result I8 [ InvalidNumStr ]*
"#; "#;
let parse_state = roc_parse::state::State::new(src_bytes.as_bytes()); let parse_state = roc_parse::state::State::new(src_bytes.as_bytes());
@ -2939,10 +2951,10 @@ fn load_module<'a>(
roc_parse::header::ModuleName::new("List"), roc_parse::header::ModuleName::new("List"),
Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("List")))]), Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("List")))]),
)), )),
// Loc::at_zero(ImportsEntry::Module( Loc::at_zero(ImportsEntry::Module(
// roc_parse::header::ModuleName::new("Num"), roc_parse::header::ModuleName::new("Num"),
// Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Nat")))]), Collection::with_items(&[Loc::at_zero(Spaced::Item(ExposedName::new("Nat")))]),
// )), )),
]; ];
const GENERATES_WITH: &[Symbol] = &[]; const GENERATES_WITH: &[Symbol] = &[];
@ -3004,6 +3016,9 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("Int")), Loc::at_zero(ExposedName::new("Int")),
Loc::at_zero(ExposedName::new("Float")), Loc::at_zero(ExposedName::new("Float")),
// //
Loc::at_zero(ExposedName::new("Integer")),
Loc::at_zero(ExposedName::new("FloatingPoint")),
//
Loc::at_zero(ExposedName::new("I128")), Loc::at_zero(ExposedName::new("I128")),
Loc::at_zero(ExposedName::new("I64")), Loc::at_zero(ExposedName::new("I64")),
Loc::at_zero(ExposedName::new("I32")), Loc::at_zero(ExposedName::new("I32")),
@ -3016,9 +3031,30 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("U16")), Loc::at_zero(ExposedName::new("U16")),
Loc::at_zero(ExposedName::new("U8")), Loc::at_zero(ExposedName::new("U8")),
// //
Loc::at_zero(ExposedName::new("Signed128")),
Loc::at_zero(ExposedName::new("Signed64")),
Loc::at_zero(ExposedName::new("Signed32")),
Loc::at_zero(ExposedName::new("Signed16")),
Loc::at_zero(ExposedName::new("Signed8")),
//
Loc::at_zero(ExposedName::new("Unsigned128")),
Loc::at_zero(ExposedName::new("Unsigned64")),
Loc::at_zero(ExposedName::new("Unsigned32")),
Loc::at_zero(ExposedName::new("Unsigned16")),
Loc::at_zero(ExposedName::new("Unsigned8")),
//
Loc::at_zero(ExposedName::new("Nat")), Loc::at_zero(ExposedName::new("Nat")),
Loc::at_zero(ExposedName::new("Dec")), Loc::at_zero(ExposedName::new("Dec")),
// //
Loc::at_zero(ExposedName::new("F32")),
Loc::at_zero(ExposedName::new("F64")),
//
Loc::at_zero(ExposedName::new("Natural")),
Loc::at_zero(ExposedName::new("Decimal")),
//
Loc::at_zero(ExposedName::new("Binary32")),
Loc::at_zero(ExposedName::new("Binary64")),
//
// Loc::at_zero(ExposedName::new("maxFloat")), // Loc::at_zero(ExposedName::new("maxFloat")),
// Loc::at_zero(ExposedName::new("minFloat")), // Loc::at_zero(ExposedName::new("minFloat")),
Loc::at_zero(ExposedName::new("abs")), Loc::at_zero(ExposedName::new("abs")),
@ -3030,13 +3066,16 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("isLte")), Loc::at_zero(ExposedName::new("isLte")),
Loc::at_zero(ExposedName::new("isGt")), Loc::at_zero(ExposedName::new("isGt")),
Loc::at_zero(ExposedName::new("isGte")), Loc::at_zero(ExposedName::new("isGte")),
Loc::at_zero(ExposedName::new("toFloat")),
Loc::at_zero(ExposedName::new("sin")), Loc::at_zero(ExposedName::new("sin")),
Loc::at_zero(ExposedName::new("cos")), Loc::at_zero(ExposedName::new("cos")),
Loc::at_zero(ExposedName::new("tan")), Loc::at_zero(ExposedName::new("tan")),
Loc::at_zero(ExposedName::new("atan")),
Loc::at_zero(ExposedName::new("acos")),
Loc::at_zero(ExposedName::new("asin")),
Loc::at_zero(ExposedName::new("isZero")), Loc::at_zero(ExposedName::new("isZero")),
Loc::at_zero(ExposedName::new("isEven")), Loc::at_zero(ExposedName::new("isEven")),
Loc::at_zero(ExposedName::new("isOdd")), Loc::at_zero(ExposedName::new("isOdd")),
Loc::at_zero(ExposedName::new("toFloat")),
Loc::at_zero(ExposedName::new("isPositive")), Loc::at_zero(ExposedName::new("isPositive")),
Loc::at_zero(ExposedName::new("isNegative")), Loc::at_zero(ExposedName::new("isNegative")),
Loc::at_zero(ExposedName::new("rem")), Loc::at_zero(ExposedName::new("rem")),
@ -3047,17 +3086,14 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("sqrt")), Loc::at_zero(ExposedName::new("sqrt")),
Loc::at_zero(ExposedName::new("log")), Loc::at_zero(ExposedName::new("log")),
Loc::at_zero(ExposedName::new("round")), Loc::at_zero(ExposedName::new("round")),
Loc::at_zero(ExposedName::new("ceiling")),
Loc::at_zero(ExposedName::new("floor")),
Loc::at_zero(ExposedName::new("compare")), Loc::at_zero(ExposedName::new("compare")),
Loc::at_zero(ExposedName::new("pow")), Loc::at_zero(ExposedName::new("pow")),
Loc::at_zero(ExposedName::new("ceiling")),
Loc::at_zero(ExposedName::new("powInt")), Loc::at_zero(ExposedName::new("powInt")),
Loc::at_zero(ExposedName::new("floor")),
Loc::at_zero(ExposedName::new("addWrap")), Loc::at_zero(ExposedName::new("addWrap")),
Loc::at_zero(ExposedName::new("addChecked")), Loc::at_zero(ExposedName::new("addChecked")),
Loc::at_zero(ExposedName::new("addSaturated")), Loc::at_zero(ExposedName::new("addSaturated")),
Loc::at_zero(ExposedName::new("atan")),
Loc::at_zero(ExposedName::new("acos")),
Loc::at_zero(ExposedName::new("asin")),
Loc::at_zero(ExposedName::new("bitwiseAnd")), Loc::at_zero(ExposedName::new("bitwiseAnd")),
Loc::at_zero(ExposedName::new("bitwiseXor")), Loc::at_zero(ExposedName::new("bitwiseXor")),
Loc::at_zero(ExposedName::new("bitwiseOr")), Loc::at_zero(ExposedName::new("bitwiseOr")),
@ -3069,30 +3105,33 @@ fn load_module<'a>(
Loc::at_zero(ExposedName::new("subSaturated")), Loc::at_zero(ExposedName::new("subSaturated")),
Loc::at_zero(ExposedName::new("mulWrap")), Loc::at_zero(ExposedName::new("mulWrap")),
Loc::at_zero(ExposedName::new("mulChecked")), Loc::at_zero(ExposedName::new("mulChecked")),
/*
Loc::at_zero(ExposedName::new("intCast")), Loc::at_zero(ExposedName::new("intCast")),
Loc::at_zero(ExposedName::new("isMultipleOf")),
Loc::at_zero(ExposedName::new("bytesToU16")), Loc::at_zero(ExposedName::new("bytesToU16")),
Loc::at_zero(ExposedName::new("bytesToU32")), Loc::at_zero(ExposedName::new("bytesToU32")),
Loc::at_zero(ExposedName::new("divCeil")), Loc::at_zero(ExposedName::new("divCeil")),
Loc::at_zero(ExposedName::new("toStr")), Loc::at_zero(ExposedName::new("toStr")),
Loc::at_zero(ExposedName::new("minI8")), */
Loc::at_zero(ExposedName::new("maxI8")), Loc::at_zero(ExposedName::new("isMultipleOf")),
Loc::at_zero(ExposedName::new("minU8")), // Loc::at_zero(ExposedName::new("minI8")),
Loc::at_zero(ExposedName::new("maxU8")), // Loc::at_zero(ExposedName::new("maxI8")),
Loc::at_zero(ExposedName::new("minI16")), // Loc::at_zero(ExposedName::new("minU8")),
Loc::at_zero(ExposedName::new("maxI16")), // Loc::at_zero(ExposedName::new("maxU8")),
Loc::at_zero(ExposedName::new("minU16")), // Loc::at_zero(ExposedName::new("minI16")),
Loc::at_zero(ExposedName::new("maxU16")), // Loc::at_zero(ExposedName::new("maxI16")),
Loc::at_zero(ExposedName::new("minI32")), // Loc::at_zero(ExposedName::new("minU16")),
Loc::at_zero(ExposedName::new("maxI32")), // Loc::at_zero(ExposedName::new("maxU16")),
Loc::at_zero(ExposedName::new("minU32")), // Loc::at_zero(ExposedName::new("minI32")),
Loc::at_zero(ExposedName::new("maxU32")), // Loc::at_zero(ExposedName::new("maxI32")),
Loc::at_zero(ExposedName::new("minI64")), // Loc::at_zero(ExposedName::new("minU32")),
Loc::at_zero(ExposedName::new("maxI64")), // Loc::at_zero(ExposedName::new("maxU32")),
Loc::at_zero(ExposedName::new("minU64")), // Loc::at_zero(ExposedName::new("minI64")),
Loc::at_zero(ExposedName::new("maxU64")), // Loc::at_zero(ExposedName::new("maxI64")),
Loc::at_zero(ExposedName::new("minI128")), // Loc::at_zero(ExposedName::new("minU64")),
Loc::at_zero(ExposedName::new("maxI128")), // Loc::at_zero(ExposedName::new("maxU64")),
// Unimplemented
// Loc::at_zero(ExposedName::new("minI128")),
// Loc::at_zero(ExposedName::new("maxI128")),
Loc::at_zero(ExposedName::new("toI8")), Loc::at_zero(ExposedName::new("toI8")),
Loc::at_zero(ExposedName::new("toI8Checked")), Loc::at_zero(ExposedName::new("toI8Checked")),
Loc::at_zero(ExposedName::new("toI16")), Loc::at_zero(ExposedName::new("toI16")),
@ -3135,65 +3174,67 @@ fn load_module<'a>(
}; };
let src_bytes = r#" let src_bytes = r#"
Num range : [ @Num range ] Num range : [ @Num range ]
Integer range : [ @Integer range ] Int range : Num (Integer range)
Float range : [ @Float range ] Float range : Num (FloatingPoint range)
Natural : [ @Natural ]
Nat : Int Natural
Signed128 : [ @Signed128 ] Signed128 : [ @Signed128 ]
I128 : Int Signed128 Signed64 : [ @Signed64 ]
Signed32 : [ @Signed32 ]
Signed16 : [ @Signed16 ]
Signed8 : [ @Signed8 ]
Unsigned128 : [ @Unsigned128 ] Unsigned128 : [ @Unsigned128 ]
U128 : Int Unsigned128
Signed64 : [ @Signed64 ]
I64 : Int Signed64
Unsigned64 : [ @Unsigned64 ] Unsigned64 : [ @Unsigned64 ]
U64 : Int Unsigned64
Signed32 : [ @Signed32 ]
I32 : Int Signed32
Unsigned32 : [ @Unsigned32 ] Unsigned32 : [ @Unsigned32 ]
U32 : Int Unsigned32
Signed16 : [ @Signed16 ]
I16 : Int Signed16
Unsigned16 : [ @Unsigned16 ] Unsigned16 : [ @Unsigned16 ]
U16 : Int Unsigned16 Unsigned8 : [ @Unsigned8 ]
Signed8 : [ @Signed8 ] Natural : [ @Natural ]
Integer range : [ @Integer range ]
I128 : Num (Integer Signed128)
I64 : Num (Integer Signed64)
I32 : Num (Integer Signed32)
I16 : Num (Integer Signed16)
I8 : Int Signed8 I8 : Int Signed8
Unsigned8 : [ @Unsigned8 ] U128 : Num (Integer Unsigned128)
U8 : Int Unsigned8 U64 : Num (Integer Unsigned64)
U32 : Num (Integer Unsigned32)
U16 : Num (Integer Unsigned16)
U8 : Num (Integer Unsigned8)
Nat : Num (Integer Natural)
Decimal : [ @Decimal ] Decimal : [ @Decimal ]
Dec : Float Decimal
Binary64 : [ @Binary64 ] Binary64 : [ @Binary64 ]
F64 : Float Binary64
Binary32 : [ @Binary32 ] Binary32 : [ @Binary32 ]
F32 : Float Binary32
FloatingPoint range : [ @FloatingPoint range ]
F64 : Num (FloatingPoint Binary64)
F32 : Num (FloatingPoint Binary32)
Dec : Num (FloatingPoint Decimal)
# ------- Functions
compare : Num a, Num a -> [ LT, EQ, GT ] compare : Num a, Num a -> [ LT, EQ, GT ]
isLt : Num a, Num a -> Bool isLt : Num a, Num a -> Bool
isGt : Num a, Num a -> Bool isGt : Num a, Num a -> Bool
isLte : Num a, Num a -> Bool isLte : Num a, Num a -> Bool
isLte : Num a, Num a -> Bool isGte : Num a, Num a -> Bool
isZero : Num a -> Bool isZero : Num a -> Bool
isEven : Int a -> Bool isEven : Int a -> Bool
isOdd : Int a -> Bool isOdd : Int a -> Bool
isPositive : Num a -> Bool
isNegative : Num a -> Bool
toFloat : Num * -> Float * toFloat : Num * -> Float *
abs : Num a -> Num a abs : Num a -> Num a
@ -3203,9 +3244,6 @@ fn load_module<'a>(
sub : Num a, Num a -> Num a sub : Num a, Num a -> Num a
mul : Num a, Num a -> Num a mul : Num a, Num a -> Num a
# maxFloat : Float a
# minFloat : Float a
sin : Float a -> Float a sin : Float a -> Float a
cos : Float a -> Float a cos : Float a -> Float a
tan : Float a -> Float a tan : Float a -> Float a
@ -3214,14 +3252,22 @@ fn load_module<'a>(
acos : Float a -> Float a acos : Float a -> Float a
atan : Float a -> Float a atan : Float a -> Float a
sqrt : Float a -> Float a sqrt : Float a -> Result (Float a) [ SqrtOfNegative ]*
log : Float a, Float a -> Float a log : Float a, Float a -> Result (Float a) [ LogNeedsPositive ]*
mod : Float a, Float a -> Result (Float a) [ DivByZero ]* div : Float a -> Result (Float a) [ DivByZero ]*
# mod : Float a, Float a -> Result (Float a) [ DivByZero ]*
rem : Int a, Int a -> Result (Int a) [ DivByZero ]* rem : Int a, Int a -> Result (Int a) [ DivByZero ]*
mod : Int a, Int a -> Result (Int a) [ DivByZero ]* # mod : Int a, Int a -> Result (Int a) [ DivByZero ]*
isMultipleOf : Int a, Int a -> Bool isMultipleOf : Int a, Int a -> Bool
bitwiseAnd : Int a, Int a -> Int a
bitwiseXor : Int a, Int a -> Int a
bitwiseOr : Int a, Int a -> Int a
shiftLeftBy : Int a, Int a -> Int a
shiftRightBy : Int a, Int a -> Int a
shiftRightZfBy : Int a, Int a -> Int a
round : Float a -> Int b round : Float a -> Int b
floor : Float a -> Int b floor : Float a -> Int b
ceiling : Float a -> Int b ceiling : Float a -> Int b
@ -3241,31 +3287,27 @@ fn load_module<'a>(
# mulSaturated : Num a, Num a -> Num a # mulSaturated : Num a, Num a -> Num a
mulChecked : Num a, Num a -> Result (Num a) [ Overflow ]* mulChecked : Num a, Num a -> Result (Num a) [ Overflow ]*
bitwiseAnd : Int a, Int a -> Int a # minI8 : I8
bitwiseXor : Int a, Int a -> Int a # maxI8 : I8
bitwiseOr : Int a, Int a -> Int a # minU8 : U8
shiftLeftBy : Int a, Int a -> Int a # maxU8 : U8
shiftRightBy : Int a, Int a -> Int a # minI16 : I16
shiftRightZfBy : Int a, Int a -> Int a # maxI16 : I16
# minU16 : U16
# maxU16 : U16
# minI32 : I32
# maxI32 : I32
# minU32 : U32
# maxU32 : U32
# minI64 : I64
# maxI64 : I64
# minU64 : U64
# maxU64 : U64
intCast : Int a -> Int b # minI128 : I128
# maxI128 : I128
minI8 : I8 # minU128 : U128
maxI8 : I8 # maxU128 : U128
minU8 : U8
maxU8 : U8
minI16 : I16
maxI16 : I16
minU16 : U16
maxU16 : U16
minI32 : I32
maxI32 : I32
minU32 : U32
maxU32 : U32
minI64 : I64
maxI64 : I64
minU64 : U64
maxU64 : U64
toI8 : Int * -> I8 toI8 : Int * -> I8
toI16 : Int * -> I16 toI16 : Int * -> I16
@ -4243,6 +4285,7 @@ fn run_solve<'a>(
// Finish constraining the module by wrapping the existing Constraint // Finish constraining the module by wrapping the existing Constraint
// in the ones we just computed. We can do this off the main thread. // in the ones we just computed. We can do this off the main thread.
let constraint = constrain_imports(imported_symbols, constraint, &mut var_store); let constraint = constrain_imports(imported_symbols, constraint, &mut var_store);
dbg!(&constraint);
let constrain_end = SystemTime::now(); let constrain_end = SystemTime::now();

View file

@ -885,22 +885,22 @@ define_builtins! {
26 DEV_TMP: "#dev_tmp" 26 DEV_TMP: "#dev_tmp"
} }
1 NUM: "Num" => { 1 NUM: "Num" => {
0 NUM_NUM: "Num" imported // the Num.Num type alias 0 NUM_NUM: "Num" // the Num.Num type alias
1 NUM_AT_NUM: "@Num" // the Num.@Num private tag 1 NUM_AT_NUM: "@Num" // the Num.@Num private tag
2 NUM_I128: "I128" imported // the Num.I128 type alias 2 NUM_I128: "I128" // the Num.I128 type alias
3 NUM_U128: "U128" imported // the Num.U128 type alias 3 NUM_U128: "U128" // the Num.U128 type alias
4 NUM_I64: "I64" imported // the Num.I64 type alias 4 NUM_I64: "I64" // the Num.I64 type alias
5 NUM_U64: "U64" imported // the Num.U64 type alias 5 NUM_U64: "U64" // the Num.U64 type alias
6 NUM_I32: "I32" imported // the Num.I32 type alias 6 NUM_I32: "I32" // the Num.I32 type alias
7 NUM_U32: "U32" imported // the Num.U32 type alias 7 NUM_U32: "U32" // the Num.U32 type alias
8 NUM_I16: "I16" imported // the Num.I16 type alias 8 NUM_I16: "I16" // the Num.I16 type alias
9 NUM_U16: "U16" imported // the Num.U16 type alias 9 NUM_U16: "U16" // the Num.U16 type alias
10 NUM_I8: "I8" imported // the Num.I8 type alias 10 NUM_I8: "I8" // the Num.I8 type alias
11 NUM_U8: "U8" imported // the Num.U8 type alias 11 NUM_U8: "U8" // the Num.U8 type alias
12 NUM_INTEGER: "Integer" // Int : Num Integer 12 NUM_INTEGER: "Integer" // Int : Num Integer
13 NUM_AT_INTEGER: "@Integer" // the Int.@Integer private tag 13 NUM_AT_INTEGER: "@Integer" // the Int.@Integer private tag
14 NUM_F64: "F64" imported // the Num.F64 type alias 14 NUM_F64: "F64" // the Num.F64 type alias
15 NUM_F32: "F32" imported // the Num.F32 type alias 15 NUM_F32: "F32" // the Num.F32 type alias
16 NUM_FLOATINGPOINT: "FloatingPoint" // Float : Num FloatingPoint 16 NUM_FLOATINGPOINT: "FloatingPoint" // Float : Num FloatingPoint
17 NUM_AT_FLOATINGPOINT: "@FloatingPoint" // the Float.@FloatingPoint private tag 17 NUM_AT_FLOATINGPOINT: "@FloatingPoint" // the Float.@FloatingPoint private tag
18 NUM_MAX_FLOAT: "maxFloat" 18 NUM_MAX_FLOAT: "maxFloat"
@ -977,16 +977,16 @@ define_builtins! {
89 NUM_SUB_SATURATED: "subSaturated" 89 NUM_SUB_SATURATED: "subSaturated"
90 NUM_MUL_WRAP: "mulWrap" 90 NUM_MUL_WRAP: "mulWrap"
91 NUM_MUL_CHECKED: "mulChecked" 91 NUM_MUL_CHECKED: "mulChecked"
92 NUM_INT: "Int" imported 92 NUM_INT: "Int"
93 NUM_FLOAT: "Float" imported 93 NUM_FLOAT: "Float"
94 NUM_AT_NATURAL: "@Natural" 94 NUM_AT_NATURAL: "@Natural"
95 NUM_NATURAL: "Natural" 95 NUM_NATURAL: "Natural"
96 NUM_NAT: "Nat" imported 96 NUM_NAT: "Nat"
97 NUM_INT_CAST: "intCast" 97 NUM_INT_CAST: "intCast"
98 NUM_IS_MULTIPLE_OF: "isMultipleOf" 98 NUM_IS_MULTIPLE_OF: "isMultipleOf"
99 NUM_AT_DECIMAL: "@Decimal" 99 NUM_AT_DECIMAL: "@Decimal"
100 NUM_DECIMAL: "Decimal" 100 NUM_DECIMAL: "Decimal"
101 NUM_DEC: "Dec" imported // the Num.Dectype alias 101 NUM_DEC: "Dec" // the Num.Dectype alias
102 NUM_BYTES_TO_U16: "bytesToU16" 102 NUM_BYTES_TO_U16: "bytesToU16"
103 NUM_BYTES_TO_U32: "bytesToU32" 103 NUM_BYTES_TO_U32: "bytesToU32"
104 NUM_CAST_TO_NAT: "#castToNat" 104 NUM_CAST_TO_NAT: "#castToNat"

View file

@ -19,7 +19,7 @@ fn nat_alias() {
assert_evals_to!( assert_evals_to!(
indoc!( indoc!(
r#" r#"
i : Nat i : Num.Nat
i = 1 i = 1
i i