diff --git a/cli/tests/repl_eval.rs b/cli/tests/repl_eval.rs index 6e0cd0748a..18961fb1c9 100644 --- a/cli/tests/repl_eval.rs +++ b/cli/tests/repl_eval.rs @@ -64,12 +64,12 @@ mod repl_eval { #[test] fn literal_0point0() { - expect_success("0.0", "0 : Float"); + expect_success("0.0", "0 : F64"); } #[test] fn literal_4point2() { - expect_success("4.2", "4.2 : Float"); + expect_success("4.2", "4.2 : F64"); } #[test] @@ -84,7 +84,7 @@ mod repl_eval { #[test] fn float_addition() { - expect_success("1.1 + 2", "3.1 : Float"); + expect_success("1.1 + 2", "3.1 : F64"); } #[test] @@ -148,7 +148,7 @@ mod repl_eval { #[test] fn single_element_tag_union() { expect_success("True 1", "True 1 : [ True (Num *) ]*"); - expect_success("Foo 1 3.14", "Foo 1 3.14 : [ Foo (Num *) Float ]*"); + expect_success("Foo 1 3.14", "Foo 1 3.14 : [ Foo (Num *) F64 ]*"); } #[test] @@ -157,7 +157,7 @@ mod repl_eval { expect_success( "if 1 == 1 then True 3 else False 3.14", - "True 3 : [ False Float, True (Num *) ]*", + "True 3 : [ False F64, True (Num *) ]*", ) } @@ -206,7 +206,7 @@ mod repl_eval { #[test] fn literal_float_list() { - expect_success("[ 1.1, 2.2, 3.3 ]", "[ 1.1, 2.2, 3.3 ] : List Float"); + expect_success("[ 1.1, 2.2, 3.3 ]", "[ 1.1, 2.2, 3.3 ] : List F64"); } #[test] @@ -242,7 +242,7 @@ mod repl_eval { fn nested_float_list() { expect_success( r#"[ [ [ 4, 3, 2 ], [ 1, 0.0 ] ], [ [] ], [] ]"#, - r#"[ [ [ 4, 3, 2 ], [ 1, 0 ] ], [ [] ], [] ] : List (List (List Float))"#, + r#"[ [ [ 4, 3, 2 ], [ 1, 0 ] ], [ [] ], [] ] : List (List (List F64))"#, ); } @@ -250,7 +250,7 @@ mod repl_eval { fn list_concat() { expect_success( "List.concat [ 1.1, 2.2 ] [ 3.3, 4.4, 5.5 ]", - "[ 1.1, 2.2, 3.3, 4.4, 5.5 ] : List Float", + "[ 1.1, 2.2, 3.3, 4.4, 5.5 ] : List F64", ); } @@ -265,7 +265,7 @@ mod repl_eval { fn list_sum() { expect_success("List.sum []", "0 : Num *"); expect_success("List.sum [ 1, 2, 3 ]", "6 : Num *"); - expect_success("List.sum [ 1.1, 2.2, 3.3 ]", "6.6 : Float"); + expect_success("List.sum [ 1.1, 2.2, 3.3 ]", "6.6 : F64"); } #[test] @@ -284,7 +284,7 @@ mod repl_eval { fn basic_1_field_f64_record() { // Even though this gets unwrapped at runtime, the repl should still // report it as a record - expect_success("{ foo: 4.2 }", "{ foo: 4.2 } : { foo : Float }"); + expect_success("{ foo: 4.2 }", "{ foo: 4.2 } : { foo : F64 }"); } #[test] @@ -303,7 +303,7 @@ mod repl_eval { // report it as a record expect_success( "{ foo: { bar: { baz: 4.2 } } }", - "{ foo: { bar: { baz: 4.2 } } } : { foo : { bar : { baz : Float } } }", + "{ foo: { bar: { baz: 4.2 } } } : { foo : { bar : { baz : F64 } } }", ); } @@ -319,7 +319,7 @@ mod repl_eval { fn basic_2_field_f64_record() { expect_success( "{ foo: 4.1, bar: 2.3 }", - "{ bar: 2.3, foo: 4.1 } : { bar : Float, foo : Float }", + "{ bar: 2.3, foo: 4.1 } : { bar : F64, foo : F64 }", ); } @@ -327,7 +327,7 @@ mod repl_eval { fn basic_2_field_mixed_record() { expect_success( "{ foo: 4.1, bar: 2 }", - "{ bar: 2, foo: 4.1 } : { bar : Num *, foo : Float }", + "{ bar: 2, foo: 4.1 } : { bar : Num *, foo : F64 }", ); } @@ -335,7 +335,7 @@ mod repl_eval { fn basic_3_field_record() { expect_success( "{ foo: 4.1, bar: 2, baz: 0x5 }", - "{ bar: 2, baz: 5, foo: 4.1 } : { bar : Num *, baz : Int, foo : Float }", + "{ bar: 2, baz: 5, foo: 4.1 } : { bar : Num *, baz : Int, foo : F64 }", ); } @@ -350,7 +350,7 @@ mod repl_eval { fn list_of_2_field_records() { expect_success( "[ { foo: 4.1, bar: 2 } ]", - "[ { bar: 2, foo: 4.1 } ] : List { bar : Num *, foo : Float }", + "[ { bar: 2, foo: 4.1 } ] : List { bar : Num *, foo : F64 }", ); } @@ -382,7 +382,7 @@ mod repl_eval { fn list_of_3_field_records() { expect_success( "[ { foo: 4.1, bar: 2, baz: 0x3 } ]", - "[ { bar: 2, baz: 3, foo: 4.1 } ] : List { bar : Num *, baz : Int, foo : Float }", + "[ { bar: 2, baz: 3, foo: 4.1 } ] : List { bar : Num *, baz : Int, foo : F64 }", ); } diff --git a/compiler/builtins/src/unique.rs b/compiler/builtins/src/unique.rs index 5ef68eff2a..33ab33263e 100644 --- a/compiler/builtins/src/unique.rs +++ b/compiler/builtins/src/unique.rs @@ -1150,7 +1150,7 @@ fn float_type(u: VarId) -> SolvedType { vec![ flex(u), SolvedType::Alias( - Symbol::NUM_FLOAT, + Symbol::NUM_F64, Vec::new(), Box::new(builtin_aliases::num_type(SolvedType::Apply( Symbol::ATTR_ATTR, diff --git a/compiler/constrain/src/builtins.rs b/compiler/constrain/src/builtins.rs index 5044730c07..36b19ec28e 100644 --- a/compiler/constrain/src/builtins.rs +++ b/compiler/constrain/src/builtins.rs @@ -74,7 +74,7 @@ pub fn str_type() -> Type { #[inline(always)] pub fn num_float() -> Type { Type::Alias( - Symbol::NUM_FLOAT, + Symbol::NUM_F64, vec![], Box::new(num_num(num_floatingpoint())), ) diff --git a/compiler/gen/tests/gen_list.rs b/compiler/gen/tests/gen_list.rs index d69b74a0f4..7eaa12a48d 100644 --- a/compiler/gen/tests/gen_list.rs +++ b/compiler/gen/tests/gen_list.rs @@ -599,7 +599,7 @@ mod gen_list { assert_evals_to!( indoc!( r#" - empty : List Float + empty : List F64 empty = [] diff --git a/compiler/gen/tests/gen_primitives.rs b/compiler/gen/tests/gen_primitives.rs index 27404e45a1..a34fd94892 100644 --- a/compiler/gen/tests/gen_primitives.rs +++ b/compiler/gen/tests/gen_primitives.rs @@ -293,7 +293,7 @@ mod gen_primitives { indoc!( r#" wrapper = \{} -> - alwaysFloatIdentity : Int -> (Float -> Float) + alwaysFloatIdentity : Int -> (F64 -> F64) alwaysFloatIdentity = \_ -> (\a -> a) @@ -1016,11 +1016,11 @@ mod gen_primitives { runEffect : Effect a -> a runEffect = \@Effect thunk -> thunk {} - foo : Effect Float + foo : Effect F64 foo = succeed 3.14 - main : Float + main : F64 main = runEffect foo @@ -1041,14 +1041,14 @@ mod gen_primitives { # succeed : a -> ({} -> a) succeed = \x -> \{} -> x - foo : {} -> Float + foo : {} -> F64 foo = succeed 3.14 # runEffect : ({} -> a) -> a runEffect = \thunk -> thunk {} - main : Float + main : F64 main = runEffect foo "# diff --git a/compiler/load/tests/fixtures/build/app_with_deps/AStar.roc b/compiler/load/tests/fixtures/build/app_with_deps/AStar.roc index 30c45eacf3..b93c6937f3 100644 --- a/compiler/load/tests/fixtures/build/app_with_deps/AStar.roc +++ b/compiler/load/tests/fixtures/build/app_with_deps/AStar.roc @@ -8,7 +8,7 @@ interface AStar Model position : { evaluated : Set position , openSet : Set position - , costs : Map.Map position Float + , costs : Map.Map position F64 , cameFrom : Map.Map position position } @@ -22,7 +22,7 @@ initialModel = \start -> } -cheapestOpen : (position -> Float), Model position -> Result position [ KeyNotFound ]* +cheapestOpen : (position -> F64), Model position -> Result position [ KeyNotFound ]* cheapestOpen = \costFunction, model -> folder = \position, resSmallestSoFar -> @@ -80,12 +80,12 @@ updateCost = \current, neighbour, model -> model -findPath : { costFunction: (position, position -> Float), moveFunction: (position -> Set position), start : position, end : position } -> Result (List position) [ KeyNotFound ]* +findPath : { costFunction: (position, position -> F64), moveFunction: (position -> Set position), start : position, end : position } -> Result (List position) [ KeyNotFound ]* findPath = \{ costFunction, moveFunction, start, end } -> astar costFunction moveFunction end (initialModel start) -astar : (position, position -> Float), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]* +astar : (position, position -> F64), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]* astar = \costFn, moveFn, goal, model -> when cheapestOpen (\position -> costFn goal position) model is Err _ -> diff --git a/compiler/load/tests/fixtures/build/interface_with_deps/AStar.roc b/compiler/load/tests/fixtures/build/interface_with_deps/AStar.roc index 30c45eacf3..b93c6937f3 100644 --- a/compiler/load/tests/fixtures/build/interface_with_deps/AStar.roc +++ b/compiler/load/tests/fixtures/build/interface_with_deps/AStar.roc @@ -8,7 +8,7 @@ interface AStar Model position : { evaluated : Set position , openSet : Set position - , costs : Map.Map position Float + , costs : Map.Map position F64 , cameFrom : Map.Map position position } @@ -22,7 +22,7 @@ initialModel = \start -> } -cheapestOpen : (position -> Float), Model position -> Result position [ KeyNotFound ]* +cheapestOpen : (position -> F64), Model position -> Result position [ KeyNotFound ]* cheapestOpen = \costFunction, model -> folder = \position, resSmallestSoFar -> @@ -80,12 +80,12 @@ updateCost = \current, neighbour, model -> model -findPath : { costFunction: (position, position -> Float), moveFunction: (position -> Set position), start : position, end : position } -> Result (List position) [ KeyNotFound ]* +findPath : { costFunction: (position, position -> F64), moveFunction: (position -> Set position), start : position, end : position } -> Result (List position) [ KeyNotFound ]* findPath = \{ costFunction, moveFunction, start, end } -> astar costFunction moveFunction end (initialModel start) -astar : (position, position -> Float), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]* +astar : (position, position -> F64), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]* astar = \costFn, moveFn, goal, model -> when cheapestOpen (\position -> costFn goal position) model is Err _ -> diff --git a/compiler/load/tests/test_load.rs b/compiler/load/tests/test_load.rs index 770c7a8be7..0a960bdfe9 100644 --- a/compiler/load/tests/test_load.rs +++ b/compiler/load/tests/test_load.rs @@ -357,14 +357,14 @@ mod test_load { expect_types( loaded_module, hashmap! { - "floatTest" => "Float", - "divisionFn" => "Float, Float -> Result Float [ DivByZero ]*", - "divisionTest" => "Result Float [ DivByZero ]*", + "floatTest" => "F64", + "divisionFn" => "F64, F64 -> Result F64 [ DivByZero ]*", + "divisionTest" => "Result F64 [ DivByZero ]*", "intTest" => "Int", - "x" => "Float", + "x" => "F64", "constantNum" => "Num *", - "divDep1ByDep2" => "Result Float [ DivByZero ]*", - "fromDep2" => "Float", + "divDep1ByDep2" => "Result F64 [ DivByZero ]*", + "fromDep2" => "F64", }, ); } @@ -422,12 +422,12 @@ mod test_load { expect_types( loaded_module, hashmap! { - "findPath" => "{ costFunction : position, position -> Float, end : position, moveFunction : position -> Set position, start : position } -> Result (List position) [ KeyNotFound ]*", + "findPath" => "{ costFunction : position, position -> F64, end : position, moveFunction : position -> Set position, start : position } -> Result (List position) [ KeyNotFound ]*", "initialModel" => "position -> Model position", "reconstructPath" => "Map position position, position -> List position", "updateCost" => "position, position, Model position -> Model position", - "cheapestOpen" => "(position -> Float), Model position -> Result position [ KeyNotFound ]*", - "astar" => "(position, position -> Float), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]*", + "cheapestOpen" => "(position -> F64), Model position -> Result position [ KeyNotFound ]*", + "astar" => "(position, position -> F64), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]*", }, ); } @@ -454,7 +454,7 @@ mod test_load { expect_types( loaded_module, hashmap! { - "blah2" => "Float", + "blah2" => "F64", "blah3" => "Str", "str" => "Str", "alwaysThree" => "* -> Str", @@ -476,7 +476,7 @@ mod test_load { expect_types( loaded_module, hashmap! { - "blah2" => "Float", + "blah2" => "F64", "blah3" => "Str", "str" => "Str", "alwaysThree" => "* -> Str", diff --git a/compiler/load/tests/test_uniq_load.rs b/compiler/load/tests/test_uniq_load.rs index 34ca8ea318..91fa1f304f 100644 --- a/compiler/load/tests/test_uniq_load.rs +++ b/compiler/load/tests/test_uniq_load.rs @@ -232,14 +232,14 @@ mod test_uniq_load { expect_types( loaded_module, hashmap! { - "floatTest" => "Attr Shared Float", - "divisionFn" => "Attr Shared (Attr * Float, Attr * Float -> Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*)))", - "divisionTest" => "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", + "floatTest" => "Attr Shared F64", + "divisionFn" => "Attr Shared (Attr * F64, Attr * F64 -> Attr * (Result (Attr * F64) (Attr * [ DivByZero ]*)))", + "divisionTest" => "Attr * (Result (Attr * F64) (Attr * [ DivByZero ]*))", "intTest" => "Attr * Int", - "x" => "Attr * Float", + "x" => "Attr * F64", "constantNum" => "Attr * (Num (Attr * *))", - "divDep1ByDep2" => "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", - "fromDep2" => "Attr * Float", + "divDep1ByDep2" => "Attr * (Result (Attr * F64) (Attr * [ DivByZero ]*))", + "fromDep2" => "Attr * F64", }, ); } @@ -253,12 +253,12 @@ mod test_uniq_load { expect_types( loaded_module, hashmap! { - "findPath" => "Attr * (Attr * { costFunction : Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float), end : Attr Shared position, moveFunction : Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), start : Attr Shared position } -> Attr * (Result (Attr * (List (Attr Shared position))) (Attr * [ KeyNotFound ]*)))", + "findPath" => "Attr * (Attr * { costFunction : Attr Shared (Attr Shared position, Attr Shared position -> Attr * F64), end : Attr Shared position, moveFunction : Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), start : Attr Shared position } -> Attr * (Result (Attr * (List (Attr Shared position))) (Attr * [ KeyNotFound ]*)))", "initialModel" => "Attr * (Attr Shared position -> Attr * (Model (Attr Shared position)))", "reconstructPath" => "Attr Shared (Attr Shared (Map (Attr * position) (Attr Shared position)), Attr Shared position -> Attr * (List (Attr Shared position)))", "updateCost" => "Attr * (Attr Shared position, Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr Shared (Model (Attr Shared position)))", - "cheapestOpen" => "Attr * (Attr * (Attr Shared position -> Attr * Float), Attr (* | a | b | c) (Model (Attr Shared position)) -> Attr * (Result (Attr Shared position) (Attr * [ KeyNotFound ]*)))", - "astar" => "Attr Shared (Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float), Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr * [ Err (Attr * [ KeyNotFound ]*), Ok (Attr * (List (Attr Shared position))) ]*)", + "cheapestOpen" => "Attr * (Attr * (Attr Shared position -> Attr * F64), Attr (* | a | b | c) (Model (Attr Shared position)) -> Attr * (Result (Attr Shared position) (Attr * [ KeyNotFound ]*)))", + "astar" => "Attr Shared (Attr Shared (Attr Shared position, Attr Shared position -> Attr * F64), Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr * [ Err (Attr * [ KeyNotFound ]*), Ok (Attr * (List (Attr Shared position))) ]*)", }, ); } @@ -318,7 +318,7 @@ mod test_uniq_load { expect_types( loaded_module, hashmap! { - "blah2" => "Attr * Float", + "blah2" => "Attr * F64", "blah3" => "Attr * Str", "str" => "Attr * Str", "alwaysThree" => "Attr * (* -> Attr * Str)", diff --git a/compiler/module/src/symbol.rs b/compiler/module/src/symbol.rs index 820ce0a4c5..351edbee69 100644 --- a/compiler/module/src/symbol.rs +++ b/compiler/module/src/symbol.rs @@ -612,7 +612,7 @@ define_builtins! { 2 NUM_INT: "Int" imported // the Int.Int type alias 3 NUM_INTEGER: "Integer" imported // Int : Num Integer 4 NUM_AT_INTEGER: "@Integer" // the Int.@Integer private tag - 5 NUM_FLOAT: "Float" imported // the Float.Float type alias + 5 NUM_F64: "F64" imported // the Num.F64 type alias 6 NUM_FLOATINGPOINT: "FloatingPoint" imported // Float : Num FloatingPoint 7 NUM_AT_FLOATINGPOINT: "@FloatingPoint" // the Float.@FloatingPoint private tag 8 NUM_MAX_INT: "maxInt" diff --git a/compiler/mono/src/layout.rs b/compiler/mono/src/layout.rs index ff3b38fbb9..0cd083738f 100644 --- a/compiler/mono/src/layout.rs +++ b/compiler/mono/src/layout.rs @@ -326,7 +326,7 @@ impl<'a> Layout<'a> { debug_assert!(args.is_empty()); Ok(Layout::Builtin(Builtin::Int64)) } - Alias(Symbol::NUM_FLOAT, args, _) => { + Alias(Symbol::NUM_F64, args, _) => { debug_assert!(args.is_empty()); Ok(Layout::Builtin(Builtin::Float64)) } @@ -726,7 +726,7 @@ fn layout_from_flat_type<'a>( debug_assert_eq!(args.len(), 0); Ok(Layout::Builtin(Builtin::Int64)) } - Symbol::NUM_FLOAT => { + Symbol::NUM_F64 => { debug_assert_eq!(args.len(), 0); Ok(Layout::Builtin(Builtin::Float64)) } diff --git a/compiler/reporting/src/error/type.rs b/compiler/reporting/src/error/type.rs index 4153b0c8f6..8924d7870b 100644 --- a/compiler/reporting/src/error/type.rs +++ b/compiler/reporting/src/error/type.rs @@ -1624,8 +1624,8 @@ fn to_diff<'b>( _ => false, }; let is_float = |t: &ErrorType| match t { - ErrorType::Type(Symbol::NUM_FLOAT, _) => true, - ErrorType::Alias(Symbol::NUM_FLOAT, _, _) => true, + ErrorType::Type(Symbol::NUM_F64, _) => true, + ErrorType::Alias(Symbol::NUM_F64, _, _) => true, _ => false, }; diff --git a/compiler/reporting/tests/test_reporting.rs b/compiler/reporting/tests/test_reporting.rs index b80742355b..ce47365af3 100644 --- a/compiler/reporting/tests/test_reporting.rs +++ b/compiler/reporting/tests/test_reporting.rs @@ -1054,7 +1054,7 @@ mod test_reporting { This `Blue` global tag application has the type: - [ Blue Float ]a + [ Blue F64 ]a But `f` needs the 1st argument to be: @@ -1092,7 +1092,7 @@ mod test_reporting { The 1st branch is a float of type: - Float + F64 But the type annotation on `x` says it should be: @@ -1131,7 +1131,7 @@ mod test_reporting { This `when`expression produces: - Float + F64 But the type annotation on `x` says it should be: @@ -1167,7 +1167,7 @@ mod test_reporting { The body is a float of type: - Float + F64 But the type annotation on `x` says it should be: @@ -1373,8 +1373,8 @@ mod test_reporting { Bool Int + F64 Num - Map "# ), ) @@ -1501,7 +1501,7 @@ mod test_reporting { The body is a record of type: - { x : Float } + { x : F64 } But the type annotation says it should be: @@ -1644,7 +1644,7 @@ mod test_reporting { report_problem_as( indoc!( r#" - x : { a : Int, b : Float, c : Bool } + x : { a : Int, b : F64, c : Bool } x = { b: 4.0 } x @@ -1656,17 +1656,17 @@ mod test_reporting { Something is off with the body of the `x` definition: - 1│ x : { a : Int, b : Float, c : Bool } + 1│ x : { a : Int, b : F64, c : Bool } 2│ x = { b: 4.0 } ^^^^^^^^^^ The body is a record of type: - { b : Float } + { b : F64 } But the type annotation on `x` says it should be: - { a : Int, b : Float, c : Bool } + { a : Int, b : F64, c : Bool } Tip: Looks like the c and a fields are missing. "# @@ -1829,8 +1829,8 @@ mod test_reporting { f Int + F64 Num - Map "# ), ) @@ -2119,7 +2119,7 @@ mod test_reporting { This argument is a float of type: - Float + F64 But `add` needs the 2nd argument to be: @@ -2601,7 +2601,7 @@ mod test_reporting { This argument is a record of type: - { y : Float } + { y : F64 } But `f` needs the 1st argument to be: @@ -2835,7 +2835,7 @@ mod test_reporting { report_problem_as( indoc!( r#" - a : { foo : Int, bar : Float, foo : Str } + a : { foo : Int, bar : F64, foo : Str } a = { bar: 3.0, foo: "foo" } a @@ -2847,13 +2847,13 @@ mod test_reporting { This record type defines the `.foo` field twice! - 1│ a : { foo : Int, bar : Float, foo : Str } - ^^^^^^^^^ ^^^^^^^^^ + 1│ a : { foo : Int, bar : F64, foo : Str } + ^^^^^^^^^ ^^^^^^^^^ In the rest of the program, I will only use the latter definition: - 1│ a : { foo : Int, bar : Float, foo : Str } - ^^^^^^^^^ + 1│ a : { foo : Int, bar : F64, foo : Str } + ^^^^^^^^^ For clarity, remove the previous `.foo` definitions from this record type. @@ -2867,7 +2867,7 @@ mod test_reporting { report_problem_as( indoc!( r#" - a : [ Foo Int, Bar Float, Foo Str ] + a : [ Foo Int, Bar F64, Foo Str ] a = Foo "foo" a @@ -2879,13 +2879,13 @@ mod test_reporting { This tag union type defines the `Foo` tag twice! - 1│ a : [ Foo Int, Bar Float, Foo Str ] - ^^^^^^^ ^^^^^^^ + 1│ a : [ Foo Int, Bar F64, Foo Str ] + ^^^^^^^ ^^^^^^^ In the rest of the program, I will only use the latter definition: - 1│ a : [ Foo Int, Bar Float, Foo Str ] - ^^^^^^^ + 1│ a : [ Foo Int, Bar F64, Foo Str ] + ^^^^^^^ For clarity, remove the previous `Foo` definitions from this tag union type. @@ -2978,7 +2978,7 @@ mod test_reporting { report_problem_as( indoc!( r#" - a : Num Int Float + a : Num Int F64 a = 3 a @@ -2990,8 +2990,8 @@ mod test_reporting { The `Num` alias expects 1 type argument, but it got 2 instead: - 1│ a : Num Int Float - ^^^^^^^^^^^^^ + 1│ a : Num Int F64 + ^^^^^^^^^^^ Are there missing parentheses? "# @@ -3004,7 +3004,7 @@ mod test_reporting { report_problem_as( indoc!( r#" - f : Bool -> Num Int Float + f : Bool -> Num Int F64 f = \_ -> 3 f @@ -3016,8 +3016,8 @@ mod test_reporting { The `Num` alias expects 1 type argument, but it got 2 instead: - 1│ f : Bool -> Num Int Float - ^^^^^^^^^^^^^ + 1│ f : Bool -> Num Int F64 + ^^^^^^^^^^^ Are there missing parentheses? "# diff --git a/compiler/solve/tests/solve_expr.rs b/compiler/solve/tests/solve_expr.rs index 1d31ff4e4f..96b3223265 100644 --- a/compiler/solve/tests/solve_expr.rs +++ b/compiler/solve/tests/solve_expr.rs @@ -169,7 +169,7 @@ mod solve_expr { #[test] fn float_literal() { - infer_eq("0.5", "Float"); + infer_eq("0.5", "F64"); } #[test] @@ -762,7 +762,7 @@ mod solve_expr { (\a -> a) 3.14 "# ), - "Float", + "F64", ); } @@ -894,7 +894,7 @@ mod solve_expr { // \l r -> l / r // "# // ), - // "Float, Float -> Float", + // "F64, F64 -> F64", // ); // } @@ -906,7 +906,7 @@ mod solve_expr { // 1 / 2 // "# // ), - // "Float", + // "F64", // ); // } @@ -1026,7 +1026,7 @@ mod solve_expr { #[test] fn two_field_record() { - infer_eq("{ x: 5, y : 3.14 }", "{ x : Num *, y : Float }"); + infer_eq("{ x: 5, y : 3.14 }", "{ x : Num *, y : F64 }"); } #[test] @@ -1414,12 +1414,12 @@ mod solve_expr { infer_eq( indoc!( r#" - float : Float + float : F64 float "# ), - "Float", + "F64", ); } @@ -1433,7 +1433,7 @@ mod solve_expr { float "# ), - "Float", + "F64", ); } @@ -1442,13 +1442,13 @@ mod solve_expr { infer_eq( indoc!( r#" - float : Num.Float + float : Num.F64 float = 5.5 float "# ), - "Float", + "F64", ); } @@ -1457,13 +1457,13 @@ mod solve_expr { infer_eq( indoc!( r#" - float : Float + float : F64 float = 5.5 float "# ), - "Float", + "F64", ); } @@ -1478,7 +1478,7 @@ mod solve_expr { float "# ), - "Float", + "F64", ); } @@ -1578,7 +1578,7 @@ mod solve_expr { float "# ), - "Float", + "F64", ); } @@ -1613,7 +1613,7 @@ mod solve_expr { { numIdentity, x : numIdentity 42, y } "# ), - "{ numIdentity : Num a -> Num a, x : Num a, y : Float }", + "{ numIdentity : Num a -> Num a, x : Num a, y : F64 }", ); } @@ -1791,7 +1791,7 @@ mod solve_expr { threePointZero "# ), - "Float", + "F64", ); } @@ -2523,7 +2523,7 @@ mod solve_expr { Num.toFloat "# ), - "Num * -> Float", + "Num * -> F64", ); } @@ -2535,7 +2535,7 @@ mod solve_expr { Num.pow "# ), - "Float, Float -> Float", + "F64, F64 -> F64", ); } @@ -2547,7 +2547,7 @@ mod solve_expr { Num.ceiling "# ), - "Float -> Int", + "F64 -> Int", ); } @@ -2559,7 +2559,7 @@ mod solve_expr { Num.floor "# ), - "Float -> Int", + "F64 -> Int", ); } @@ -2583,7 +2583,7 @@ mod solve_expr { Num.atan "# ), - "Float -> Float", + "F64 -> F64", ); } @@ -2850,7 +2850,7 @@ mod solve_expr { negatePoint { x: 1, y: 2.1, z: 0x3 } "# ), - "{ x : Num a, y : Float, z : Int }", + "{ x : Num a, y : F64, z : Int }", ); } @@ -2867,7 +2867,7 @@ mod solve_expr { { a, b } "# ), - "{ a : { x : Num a, y : Float, z : c }, b : { blah : Str, x : Num a, y : Float, z : c } }", + "{ a : { x : Num a, y : F64, z : c }, b : { blah : Str, x : Num a, y : F64, z : c } }", ); } diff --git a/compiler/solve/tests/solve_uniq_expr.rs b/compiler/solve/tests/solve_uniq_expr.rs index 3dcf4d4aae..73613ae3d3 100644 --- a/compiler/solve/tests/solve_uniq_expr.rs +++ b/compiler/solve/tests/solve_uniq_expr.rs @@ -75,7 +75,7 @@ mod solve_uniq_expr { #[test] fn float_literal() { - infer_eq("0.5", "Attr * Float"); + infer_eq("0.5", "Attr * F64"); } #[test] @@ -640,7 +640,7 @@ mod solve_uniq_expr { (\a -> a) 3.14 "# ), - "Attr * Float", + "Attr * F64", ); } @@ -773,7 +773,7 @@ mod solve_uniq_expr { // \l r -> l / r // "# // ), - // "Float, Float -> Float", + // "F64, F64 -> F64", // ); // } @@ -785,7 +785,7 @@ mod solve_uniq_expr { // 1 / 2 // "# // ), - // "Float", + // "F64", // ); // } @@ -1211,7 +1211,7 @@ mod solve_uniq_expr { { numIdentity, p, q } "# ), - "Attr * { numIdentity : Attr Shared (Attr b (Num (Attr a p)) -> Attr b (Num (Attr a p))), p : Attr * (Num (Attr * p)), q : Attr * Float }" + "Attr * { numIdentity : Attr Shared (Attr b (Num (Attr a p)) -> Attr b (Num (Attr a p))), p : Attr * (Num (Attr * p)), q : Attr * F64 }" ); } @@ -1831,7 +1831,7 @@ mod solve_uniq_expr { infer_eq( indoc!( r#" - Foo : { x : Str, y : Float } + Foo : { x : Str, y : F64 } { x, y } : Foo { x, y } = { x : "foo", y : 3.14 } @@ -1848,7 +1848,7 @@ mod solve_uniq_expr { infer_eq( indoc!( r#" - Foo : { x : Str, y : Float } + Foo : { x : Str, y : F64 } Bar : Foo @@ -2113,7 +2113,7 @@ mod solve_uniq_expr { Num.maxFloat / Num.maxFloat "# ), - "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", + "Attr * (Result (Attr * F64) (Attr * [ DivByZero ]*))", ); } @@ -2125,7 +2125,7 @@ mod solve_uniq_expr { 3.0 / 4.0 "# ), - "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", + "Attr * (Result (Attr * F64) (Attr * [ DivByZero ]*))", ); } @@ -2137,7 +2137,7 @@ mod solve_uniq_expr { 3.0 / Num.maxFloat "# ), - "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", + "Attr * (Result (Attr * F64) (Attr * [ DivByZero ]*))", ); } @@ -2772,11 +2772,11 @@ mod solve_uniq_expr { r#" Model position : { evaluated : Set position , openSet : Set position - , costs : Map.Map position Float + , costs : Map.Map position F64 , cameFrom : Map.Map position position } - cheapestOpen : (position -> Float), Model position -> Result position [ KeyNotFound ]* + cheapestOpen : (position -> F64), Model position -> Result position [ KeyNotFound ]* cheapestOpen = \costFunction, model -> folder = \position, resSmallestSoFar -> @@ -2802,7 +2802,7 @@ mod solve_uniq_expr { cheapestOpen "# ), - "Attr * (Attr * (Attr Shared position -> Attr * Float), Attr (* | * | a | b) (Model (Attr Shared position)) -> Attr * (Result (Attr Shared position) (Attr * [ KeyNotFound ]*)))" + "Attr * (Attr * (Attr Shared position -> Attr * F64), Attr (* | * | a | b) (Model (Attr Shared position)) -> Attr * (Result (Attr Shared position) (Attr * [ KeyNotFound ]*)))" ) }); } @@ -2815,7 +2815,7 @@ mod solve_uniq_expr { r#" Model position : { evaluated : Set position , openSet : Set position - , costs : Map.Map position Float + , costs : Map.Map position F64 , cameFrom : Map.Map position position } @@ -2867,7 +2867,7 @@ mod solve_uniq_expr { r#" Model position : { evaluated : Set position , openSet : Set position - , costs : Map.Map position Float + , costs : Map.Map position F64 , cameFrom : Map.Map position position } @@ -2881,7 +2881,7 @@ mod solve_uniq_expr { } - cheapestOpen : (position -> Float), Model position -> Result position [ KeyNotFound ]* + cheapestOpen : (position -> F64), Model position -> Result position [ KeyNotFound ]* cheapestOpen = \costFunction, model -> folder = \position, resSmallestSoFar -> @@ -2941,12 +2941,12 @@ mod solve_uniq_expr { model - findPath : { costFunction: (position, position -> Float), moveFunction: (position -> Set position), start : position, end : position } -> Result (List position) [ KeyNotFound ]* + findPath : { costFunction: (position, position -> F64), moveFunction: (position -> Set position), start : position, end : position } -> Result (List position) [ KeyNotFound ]* findPath = \{ costFunction, moveFunction, start, end } -> astar costFunction moveFunction end (initialModel start) - astar : (position, position -> Float), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]* + astar : (position, position -> F64), (position -> Set position), position, Model position -> [ Err [ KeyNotFound ]*, Ok (List position) ]* astar = \costFn, moveFn, goal, model -> when cheapestOpen (\position -> costFn goal position) model is Err _ -> @@ -2972,7 +2972,7 @@ mod solve_uniq_expr { findPath "# ), - "Attr * (Attr * { costFunction : Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float), end : Attr Shared position, moveFunction : Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), start : Attr Shared position } -> Attr * (Result (Attr * (List (Attr Shared position))) (Attr * [ KeyNotFound ]*)))" + "Attr * (Attr * { costFunction : Attr Shared (Attr Shared position, Attr Shared position -> Attr * F64), end : Attr Shared position, moveFunction : Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), start : Attr Shared position } -> Attr * (Result (Attr * (List (Attr Shared position))) (Attr * [ KeyNotFound ]*)))" ) }); } @@ -3071,7 +3071,7 @@ mod solve_uniq_expr { negatePoint { x: 1, y: 2.1, z: 0x3 } "# ), - "Attr * { x : Attr * (Num (Attr * a)), y : Attr * Float, z : Attr * Int }", + "Attr * { x : Attr * (Num (Attr * a)), y : Attr * F64, z : Attr * Int }", ); } @@ -3088,7 +3088,7 @@ mod solve_uniq_expr { { a, b } "# ), - "Attr * { a : Attr * { x : Attr * (Num (Attr * a)), y : Attr * Float, z : Attr * c }, b : Attr * { blah : Attr * Str, x : Attr * (Num (Attr * a)), y : Attr * Float, z : Attr * c } }" + "Attr * { a : Attr * { x : Attr * (Num (Attr * a)), y : Attr * F64, z : Attr * c }, b : Attr * { blah : Attr * Str, x : Attr * (Num (Attr * a)), y : Attr * F64, z : Attr * c } }" ); } diff --git a/compiler/types/src/builtin_aliases.rs b/compiler/types/src/builtin_aliases.rs index 219cbd5ec8..981c1b4a58 100644 --- a/compiler/types/src/builtin_aliases.rs +++ b/compiler/types/src/builtin_aliases.rs @@ -70,7 +70,7 @@ pub fn aliases() -> MutMap { // Float : Num FloatingPoint add_alias( - Symbol::NUM_FLOAT, + Symbol::NUM_F64, BuiltinAlias { region: Region::zero(), vars: Vec::new(), @@ -143,11 +143,7 @@ fn floatingpoint_alias_content() -> SolvedType { #[inline(always)] pub fn float_type() -> SolvedType { - SolvedType::Alias( - Symbol::NUM_FLOAT, - Vec::new(), - Box::new(float_alias_content()), - ) + SolvedType::Alias(Symbol::NUM_F64, Vec::new(), Box::new(float_alias_content())) } #[inline(always)] diff --git a/compiler/types/src/pretty_print.rs b/compiler/types/src/pretty_print.rs index f3e5ea5167..e26ba69b8f 100644 --- a/compiler/types/src/pretty_print.rs +++ b/compiler/types/src/pretty_print.rs @@ -331,7 +331,7 @@ fn write_content(env: &Env, content: Content, subs: &Subs, buf: &mut String, par match &content { Alias(nested, _, _) => match *nested { Symbol::NUM_INTEGER => buf.push_str("Int"), - Symbol::NUM_FLOATINGPOINT => buf.push_str("Float"), + Symbol::NUM_FLOATINGPOINT => buf.push_str("F64"), _ => write_parens!(write_parens, buf, { buf.push_str("Num "); @@ -344,7 +344,7 @@ fn write_content(env: &Env, content: Content, subs: &Subs, buf: &mut String, par match &attr_content { Alias(nested, _, _) => match *nested { Symbol::NUM_INTEGER => buf.push_str("Int"), - Symbol::NUM_FLOATINGPOINT => buf.push_str("Float"), + Symbol::NUM_FLOATINGPOINT => buf.push_str("F64"), _ => write_parens!(write_parens, buf, { buf.push_str("Num "); write_content(env, content, subs, buf, parens); @@ -757,7 +757,7 @@ fn write_apply( buf.push_str("Int"); } Symbol::NUM_FLOATINGPOINT if nested_args.is_empty() => { - buf.push_str("Float"); + buf.push_str("F64"); } Symbol::ATTR_ATTR => match nested_args .get(1) @@ -771,7 +771,7 @@ fn write_apply( buf.push_str("Int"); } Symbol::NUM_FLOATINGPOINT if double_nested_args.is_empty() => { - buf.push_str("Float"); + buf.push_str("F64"); } _ => default_case(subs, arg_content), }, diff --git a/compiler/types/src/types.rs b/compiler/types/src/types.rs index 0488e4580e..4d07aa859d 100644 --- a/compiler/types/src/types.rs +++ b/compiler/types/src/types.rs @@ -1160,7 +1160,7 @@ fn write_error_type_help( buf.push_str("Int"); } Type(Symbol::NUM_FLOATINGPOINT, _) => { - buf.push_str("Float"); + buf.push_str("F64"); } other => { let write_parens = parens == Parens::InTypeParam; @@ -1278,7 +1278,7 @@ fn write_debug_error_type_help(error_type: ErrorType, buf: &mut String, parens: buf.push_str("Int"); } Type(Symbol::NUM_FLOATINGPOINT, _) => { - buf.push_str("Float"); + buf.push_str("F64"); } other => { let write_parens = parens == Parens::InTypeParam; diff --git a/compiler/uniq/src/builtins.rs b/compiler/uniq/src/builtins.rs index d0d396d1c7..3c7069e587 100644 --- a/compiler/uniq/src/builtins.rs +++ b/compiler/uniq/src/builtins.rs @@ -30,7 +30,7 @@ pub fn int_literal(num_var: Variable, expected: Expected, region: Region) pub fn float_literal(num_var: Variable, expected: Expected, region: Region) -> Constraint { let num_type = Variable(num_var); let reason = Reason::FloatLiteral; - let float_type = builtin_type(Symbol::NUM_FLOAT, vec![]); + let float_type = builtin_type(Symbol::NUM_F64, vec![]); let expected_literal = ForReason(reason, float_type, region); exists( diff --git a/nix/zig.nix b/nix/zig.nix index a1e45ed43c..215c09033e 100644 --- a/nix/zig.nix +++ b/nix/zig.nix @@ -1,4 +1,4 @@ -{ pkgs, isMacOS }: +{ pkgs, isMacOS, isAarch64 }: # We require at least specific commit of Zig after the latest tagged # release (0.6.0), so we just download the binaries for that commit @@ -9,10 +9,16 @@ let if isMacOS then "macos" else "linux"; - archiveName = "zig-${osName}-x86_64-${version}"; + archName = + if isAarch64 + then "aarch64" + else "x86_64"; + archiveName = "zig-${osName}-${archName}-${version}"; sha256 = if isMacOS then "665c1a7f472cfc5e0715f0ddf6ff8409fb749ac91cbbae68c443b4a37ebd058e" + else if isAarch64 + then "116ms44vx4xz57m9z9lsgrxd1g22qp00m5qbmklky8xdd2jmj24w" else "bab70ae3bd0af538022bc3ef50d8f34fa8dceac39ba7d9e5d528eee7e6d5a1cf"; in pkgs.stdenv.mkDerivation { diff --git a/shell.nix b/shell.nix index 68c9bb8a50..efda0cc7ed 100644 --- a/shell.nix +++ b/shell.nix @@ -1,16 +1,21 @@ { }: -with { +let + splitSystem = builtins.split "-" builtins.currentSystem; + currentArch = builtins.elemAt splitSystem 0; + currentOS = builtins.elemAt splitSystem 2; +in with { # Look here for information about how pin version of nixpkgs # → https://nixos.wiki/wiki/FAQ/Pinning_Nixpkgs pkgs = import (builtins.fetchGit { - name = "nixpkgs-2020-10-24"; - url = "https://github.com/nixos/nixpkgs-channels/"; + name = "nixpkgs-2020-11-24"; + url = "https://github.com/nixos/nixpkgs/"; ref = "refs/heads/nixpkgs-unstable"; - rev = "502845c3e31ef3de0e424f3fcb09217df2ce6df6"; + rev = "6625284c397b44bc9518a5a1567c1b5aae455c08"; }) { }; - isMacOS = builtins.currentSystem == "x86_64-darwin"; + isMacOS = currentOS == "darwin"; + isAarch64 = currentArch == "aarch64"; }; with (pkgs); @@ -42,7 +47,7 @@ let [ ]; llvmPkgs = pkgs.llvmPackages_10; - zig = import ./nix/zig.nix { inherit pkgs isMacOS; }; + zig = import ./nix/zig.nix { inherit pkgs isMacOS isAarch64; }; inputs = [ # build libraries rustc