From b9ab5c9b8eda37218df896994c9aaaf5d955a0df Mon Sep 17 00:00:00 2001 From: Anton-4 <17049058+Anton-4@users.noreply.github.com> Date: Wed, 2 Jul 2025 14:00:47 +0200 Subject: [PATCH] new syntax + alpha3 --- bin/add-exercise | 2 +- bin/install-roc | 2 +- docs/SNIPPET.txt | 7 ++++--- .../practice/accumulate/.meta/template.j2 | 18 +++++++++--------- .../practice/affine-cipher/.meta/template.j2 | 2 +- .../practice/all-your-base/.meta/template.j2 | 2 +- exercises/practice/allergies/.meta/template.j2 | 2 +- .../practice/alphametics/.meta/Example.roc | 2 +- .../practice/alphametics/.meta/template.j2 | 4 ++-- .../practice/binary-search/.meta/template.j2 | 2 +- exercises/practice/binary/.meta/template.j2 | 2 +- exercises/practice/bowling/.meta/template.j2 | 8 ++++---- exercises/practice/change/.meta/template.j2 | 2 +- .../practice/circular-buffer/.meta/template.j2 | 4 ++-- .../collatz-conjecture/.meta/template.j2 | 2 +- .../practice/complex-numbers/.meta/template.j2 | 6 +++--- .../practice/custom-set/.meta/template.j2 | 2 +- exercises/practice/diamond/.meta/Example.roc | 2 +- exercises/practice/diamond/.meta/template.j2 | 2 +- exercises/practice/dominoes/.meta/template.j2 | 14 +++++++------- .../.docs/instructions.append.md | 2 +- exercises/practice/etl/.meta/template.j2 | 4 ++-- exercises/practice/forth/.meta/template.j2 | 2 +- .../practice/go-counting/.meta/template.j2 | 10 +++++----- exercises/practice/grains/.meta/template.j2 | 2 +- exercises/practice/hamming/.meta/template.j2 | 2 +- .../largest-series-product/.meta/template.j2 | 2 +- exercises/practice/list-ops/.meta/Example.roc | 4 ++-- exercises/practice/list-ops/.meta/template.j2 | 2 +- .../practice/minesweeper/.meta/template.j2 | 4 ++-- exercises/practice/nth-prime/.meta/template.j2 | 2 +- .../nucleotide-count/.meta/template.j2 | 2 +- .../practice/ocr-numbers/.meta/template.j2 | 2 +- .../palindrome-products/.meta/template.j2 | 6 +++--- .../practice/perfect-numbers/.meta/template.j2 | 2 +- .../practice/phone-number/.meta/template.j2 | 2 +- .../protein-translation/.meta/template.j2 | 2 +- .../pythagorean-triplet/.meta/template.j2 | 2 +- .../practice/queen-attack/.meta/template.j2 | 2 +- .../rational-numbers/.meta/template.j2 | 2 +- exercises/practice/rest-api/.meta/template.j2 | 18 +++++++++--------- .../practice/saddle-points/.meta/template.j2 | 2 +- exercises/practice/say/.meta/template.j2 | 2 +- .../practice/sgf-parsing/.meta/template.j2 | 4 ++-- exercises/practice/space-age/.meta/template.j2 | 2 +- exercises/practice/strain/.meta/template.j2 | 2 +- exercises/practice/transpose/.meta/template.j2 | 4 ++-- .../practice/two-bucket/.meta/template.j2 | 2 +- .../variable-length-quantity/.meta/Example.roc | 6 +++--- .../variable-length-quantity/.meta/template.j2 | 2 +- .../practice/word-count/.meta/template.j2 | 2 +- .../practice/word-search/.meta/template.j2 | 2 +- exercises/practice/wordy/.meta/template.j2 | 2 +- 53 files changed, 98 insertions(+), 97 deletions(-) diff --git a/bin/add-exercise b/bin/add-exercise index 26a77c5f..921a5fa5 100755 --- a/bin/add-exercise +++ b/bin/add-exercise @@ -90,7 +90,7 @@ END_TEST cat << END_STUB > "exercises/practice/${slug}/${slug_pascal}.roc" module [${slug_camel}] -${slug_camel} = \myArg -> +${slug_camel} = |my_arg| crash "Please implement the '${slug_camel}' function" END_STUB diff --git a/bin/install-roc b/bin/install-roc index 8e908fac..eb724966 100755 --- a/bin/install-roc +++ b/bin/install-roc @@ -6,7 +6,7 @@ function download_alpha_release() { local install_dir="${1}" local install_file="${install_dir}/roc.tar.gz" - local release_url="https://github.com/roc-lang/roc/releases/download/0.0.0-alpha2-rolling/roc-linux_x86_64-0-alpha2-rolling.tar.gz" + local release_url="https://github.com/roc-lang/roc/releases/download/alpha3-rolling/roc-linux_x86_64-alpha3-rolling.tar.gz" mkdir -p "${install_dir}" wget -q -O ${install_file} ${release_url} tar -xzf "${install_file}" -C "${install_dir}" --strip-components 1 diff --git a/docs/SNIPPET.txt b/docs/SNIPPET.txt index ae20a4a3..12524e85 100644 --- a/docs/SNIPPET.txt +++ b/docs/SNIPPET.txt @@ -1,7 +1,8 @@ -app [main] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.19.0/Hj-J_zxz7V9YurCSTFcFdu6cQJie4guzsPMUi5kBYUk.tar.br" } +app [main!] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.19.0/Hj-J_zxz7V9YurCSTFcFdu6cQJie4guzsPMUi5kBYUk.tar.br" } + import pf.Stdout -factorial = \number -> +factorial = |number| when number is 1 -> 1 n -> n * factorial (n - 1) @@ -9,5 +10,5 @@ factorial = \number -> expect factorial 5 == 1 * 2 * 3 * 4 * 5 main! = |_args| - result = factorial 20 |> Num.toStr + result = factorial 20 |> Num.to_str Stdout.line! "factorial 20 = ${result}" diff --git a/exercises/practice/accumulate/.meta/template.j2 b/exercises/practice/accumulate/.meta/template.j2 index f28f6773..7532eb0e 100644 --- a/exercises/practice/accumulate/.meta/template.j2 +++ b/exercises/practice/accumulate/.meta/template.j2 @@ -20,19 +20,19 @@ expect {% endfor %} reverse : Str -> Str -reverse = \str -> - Str.toUtf8 str +reverse = |str| + Str.to_utf8 str |> List.reverse - |> Str.fromUtf8 - |> Result.withDefault "" + |> Str.from_utf8 + |> Result.with_default "" to_upper : Str -> Str -to_upper = \str -> - Str.toUtf8 str - |> List.map \byte -> +to_upper = |str| + Str.to_utf8 str + |> List.map |byte| if 'a' <= byte && byte <= 'z' then byte - 'a' + 'A' else byte - |> Str.fromUtf8 - |> Result.withDefault "" + |> Str.from_utf8 + |> Result.with_default "" diff --git a/exercises/practice/affine-cipher/.meta/template.j2 b/exercises/practice/affine-cipher/.meta/template.j2 index efeae892..1f738429 100644 --- a/exercises/practice/affine-cipher/.meta/template.j2 +++ b/exercises/practice/affine-cipher/.meta/template.j2 @@ -16,7 +16,7 @@ expect key = {a: {{ case["input"]["key"]["a"] }}, b: {{ case["input"]["key"]["b"] }}} result = {{ case["property"] | to_snake }} phrase key {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok {{ case["expected"] | to_roc }} result == expected diff --git a/exercises/practice/all-your-base/.meta/template.j2 b/exercises/practice/all-your-base/.meta/template.j2 index 0ff7930e..c028fa90 100644 --- a/exercises/practice/all-your-base/.meta/template.j2 +++ b/exercises/practice/all-your-base/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} { input_base: {{ case["input"]["inputBase"] | to_roc }}, output_base: {{ case["input"]["outputBase"] | to_roc }}, digits: {{ case["input"]["digits"] | to_roc }} } {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} result == Ok {{ case["expected"] }} {%- endif %} diff --git a/exercises/practice/allergies/.meta/template.j2 b/exercises/practice/allergies/.meta/template.j2 index 79403fa2..b59ce358 100644 --- a/exercises/practice/allergies/.meta/template.j2 +++ b/exercises/practice/allergies/.meta/template.j2 @@ -13,7 +13,7 @@ expect result == {{ case["expected"] | to_roc }} {%- else %} result = set {{ case["input"]["score"] }} - result == Set.fromList [{{ case["expected"] | map('to_pascal') | join(", ") }}] + result == Set.from_list [{{ case["expected"] | map('to_pascal') | join(", ") }}] {%- endif %} {% endfor %} diff --git a/exercises/practice/alphametics/.meta/Example.roc b/exercises/practice/alphametics/.meta/Example.roc index a7b5a9a0..6751d842 100644 --- a/exercises/practice/alphametics/.meta/Example.roc +++ b/exercises/practice/alphametics/.meta/Example.roc @@ -6,7 +6,7 @@ solve = |problem| # We can represent the equation as a dictionary of the letters mapped to their coefficients # when we simplify the equation. For example, we can write AB + A + B == C as 11A + 2B + (-1)C == 0. - # That then becomes this dictionary: `Dict.fromList [('A', 11), ('B', 2), ('C', -1)] + # That then becomes this dictionary: `Dict.from_list [('A', 11), ('B', 2), ('C', -1)] equation = List.walk( addends, diff --git a/exercises/practice/alphametics/.meta/template.j2 b/exercises/practice/alphametics/.meta/template.j2 index 3a047281..d46f8ef5 100644 --- a/exercises/practice/alphametics/.meta/template.j2 +++ b/exercises/practice/alphametics/.meta/template.j2 @@ -9,13 +9,13 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} {{ case["input"]["puzzle"] | to_roc }} {%- if case["expected"] %} - Result.withDefault result [] |> Set.fromList == Set.fromList [ + Result.with_default result [] |> Set.from_list == Set.from_list [ {%- for letter, value in case["expected"].items() %} ('{{ letter }}', {{ value }}), {%- endfor %} ] {%- else %} - Result.isErr result + Result.is_err result {%- endif %} {% endfor %} diff --git a/exercises/practice/binary-search/.meta/template.j2 b/exercises/practice/binary-search/.meta/template.j2 index 6f2efbb2..04ba2d3d 100644 --- a/exercises/practice/binary-search/.meta/template.j2 +++ b/exercises/practice/binary-search/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["input"]["array"] | to_roc }} |> {{ case["property"] | to_snake }} {{ case["input"]["value"] }} {%- if case["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ case["expected"] }} {%- endif %} diff --git a/exercises/practice/binary/.meta/template.j2 b/exercises/practice/binary/.meta/template.j2 index 42009982..c60a6475 100644 --- a/exercises/practice/binary/.meta/template.j2 +++ b/exercises/practice/binary/.meta/template.j2 @@ -11,7 +11,7 @@ expect {%- if case["expected"] is not none %} result == Ok {{ case["expected"] | to_roc }} {%- else %} - result |> Result.isErr + result |> Result.is_err {%- endif %} {% endfor %} diff --git a/exercises/practice/bowling/.meta/template.j2 b/exercises/practice/bowling/.meta/template.j2 index d034019d..e5f6da01 100644 --- a/exercises/practice/bowling/.meta/template.j2 +++ b/exercises/practice/bowling/.meta/template.j2 @@ -5,10 +5,10 @@ import {{ exercise | to_pascal }} exposing [Game, create, roll, score] replay_game : List U64 -> Result Game _ -replay_game = \rolls -> +replay_game = |rolls| new_game = create? {} rolls - |> List.walkUntil (Ok new_game) \state, pins -> + |> List.walk_until (Ok new_game) \state, pins -> when state is Ok game -> when game |> roll pins is @@ -29,7 +29,7 @@ expect game |> {{ case["property"] | to_snake }} {{ case["input"]["roll"] }} {%- endif %} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} result == Ok {{ case["expected"] | to_roc }} {%- endif %} @@ -39,7 +39,7 @@ expect expect rolls = {{ case["input"]["previousRolls"] | to_roc }} result = replay_game rolls - result |> Result.isOk + result |> Result.is_ok {%- endif %} diff --git a/exercises/practice/change/.meta/template.j2 b/exercises/practice/change/.meta/template.j2 index 162890ab..e689e598 100644 --- a/exercises/practice/change/.meta/template.j2 +++ b/exercises/practice/change/.meta/template.j2 @@ -10,7 +10,7 @@ expect coins = {{ case["input"]["coins"] | to_roc }} result = coins |> {{ case["property"] | to_snake }} {{ case["input"]["target"] }} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} result == Ok {{ case["expected"] | to_roc }} {%- endif %} diff --git a/exercises/practice/circular-buffer/.meta/template.j2 b/exercises/practice/circular-buffer/.meta/template.j2 index e08966a5..ff9ecd3e 100644 --- a/exercises/practice/circular-buffer/.meta/template.j2 +++ b/exercises/practice/circular-buffer/.meta/template.j2 @@ -6,7 +6,7 @@ import {{ exercise | to_pascal }} exposing [create, read, write, overwrite, clea {% for case in cases -%} # {{ case["description"] }} -run_operations{{ loop.index }} = \_ -> +run_operations{{ loop.index }} = |_| result = create { capacity: {{ case["input"]["capacity"] }} } {%- for op in case["input"]["operations"] -%} @@ -41,6 +41,6 @@ run_operations{{ loop.index }} = \_ -> expect result = run_operations{{ loop.index }} {} - result |> Result.isOk + result |> Result.is_ok {% endfor %} diff --git a/exercises/practice/collatz-conjecture/.meta/template.j2 b/exercises/practice/collatz-conjecture/.meta/template.j2 index 1e4e1cdb..580a826e 100644 --- a/exercises/practice/collatz-conjecture/.meta/template.j2 +++ b/exercises/practice/collatz-conjecture/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [steps] expect result = {{ case["property"] | to_snake }} {{ case["input"]["number"] }} {%- if case["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ case["expected"] }} {%- endif %} diff --git a/exercises/practice/complex-numbers/.meta/template.j2 b/exercises/practice/complex-numbers/.meta/template.j2 index 5a1b0a69..fa2a6d85 100644 --- a/exercises/practice/complex-numbers/.meta/template.j2 +++ b/exercises/practice/complex-numbers/.meta/template.j2 @@ -4,8 +4,8 @@ import {{ exercise | to_pascal }} exposing [real, imaginary, add, sub, mul, div, conjugate, abs, exp] -is_approx_eq = \z1, z2 -> - z1.re |> Num.isApproxEq z2.re {} && z1.im |> Num.isApproxEq z2.im {} +is_approx_eq = |z1, z2| + z1.re |> Num.is_approx_eq z2.re {} && z1.im |> Num.is_approx_eq z2.im {} {% for supercase in cases %} ### @@ -30,7 +30,7 @@ expect expected = {{ plugins.to_complex_number(subcase["expected"]) }} result |> is_approx_eq expected {%- else %} - result |> Num.isApproxEq {{ subcase["expected"] | to_roc }} {} + result |> Num.is_approx_eq {{ subcase["expected"] | to_roc }} {} {%- endif %} {%- elif subcase["input"]["z1"] %} expect diff --git a/exercises/practice/custom-set/.meta/template.j2 b/exercises/practice/custom-set/.meta/template.j2 index d1a9ba00..6ab44eea 100644 --- a/exercises/practice/custom-set/.meta/template.j2 +++ b/exercises/practice/custom-set/.meta/template.j2 @@ -63,7 +63,7 @@ expect # {{ case["description"] }} expect set = from_list {{ case["input"]["set"] | to_roc }} - result = set |> to_list |> List.sortAsc + result = set |> to_list |> List.sort_asc expected = {{ case["expected"] | to_roc }} result == expected diff --git a/exercises/practice/diamond/.meta/Example.roc b/exercises/practice/diamond/.meta/Example.roc index 27ccbadf..3ca3e219 100644 --- a/exercises/practice/diamond/.meta/Example.roc +++ b/exercises/practice/diamond/.meta/Example.roc @@ -11,7 +11,7 @@ unwrap_from_utf8 : List U8 -> Str unwrap_from_utf8 = |chars| when chars |> Str.from_utf8 is Ok(result) -> result - Err(_) -> crash("Str.fromUtf8 should never fail here") + Err(_) -> crash("Str.from_utf8 should never fail here") diamond : U8 -> Str diamond = |letter| diff --git a/exercises/practice/diamond/.meta/template.j2 b/exercises/practice/diamond/.meta/template.j2 index f4ac0f5b..ed46b6ee 100644 --- a/exercises/practice/diamond/.meta/template.j2 +++ b/exercises/practice/diamond/.meta/template.j2 @@ -8,7 +8,7 @@ import {{ exercise | to_pascal }} exposing [{{ exercise | to_snake }}] # {{ case["description"] }} expect result = {{ exercise | to_snake }} '{{ case["input"]["letter"] }}' - expected = {{ case["expected"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replaceEach "·" " " + expected = {{ case["expected"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replace_each "·" " " result == expected {% endfor %} diff --git a/exercises/practice/dominoes/.meta/template.j2 b/exercises/practice/dominoes/.meta/template.j2 index 97339a0b..cf99838e 100644 --- a/exercises/practice/dominoes/.meta/template.j2 +++ b/exercises/practice/dominoes/.meta/template.j2 @@ -16,24 +16,24 @@ Domino : (U8, U8) ## Rotate each domino if needed to ensure that the small side is on the left canonicalize : List Domino -> List Domino -canonicalize = \dominoes -> +canonicalize = |dominoes| dominoes - |> List.map \domino -> + |> List.map |domino| if domino.0 > domino.1 then (domino.1, domino.0) else domino ## Ensure that the given result is Ok and is a valid chain for the ## given list of dominoes is_valid_chain_for : Result (List Domino) _, List Domino -> Bool -is_valid_chain_for = \maybeChain, dominoes -> +is_valid_chain_for = |maybeChain, dominoes| when maybeChain is Err _ -> Bool.false Ok chain -> - if Set.fromList (canonicalize chain) == Set.fromList (canonicalize dominoes) then + if Set.from_list (canonicalize chain) == Set.from_list (canonicalize dominoes) then when chain is [] -> Bool.true [.., last] -> chain - |> List.walkUntil (Ok last) \state, domino -> + |> List.walk_until (Ok last) \state, domino -> when state is Err InvalidChain -> crash "Unreachable" Ok previous -> @@ -41,7 +41,7 @@ is_valid_chain_for = \maybeChain, dominoes -> Continue (Ok domino) else Break (Err InvalidChain) - |> Result.isOk + |> Result.is_ok else Bool.false @@ -52,7 +52,7 @@ expect {%- if case["expected"] %} result |> is_valid_chain_for {{ to_list_of_pairs(case["input"]["dominoes"]) }} {%- else %} - result |> Result.isErr + result |> Result.is_err {%- endif %} {% endfor %} diff --git a/exercises/practice/error-handling/.docs/instructions.append.md b/exercises/practice/error-handling/.docs/instructions.append.md index 7d810077..bcd5f71f 100644 --- a/exercises/practice/error-handling/.docs/instructions.append.md +++ b/exercises/practice/error-handling/.docs/instructions.append.md @@ -13,7 +13,7 @@ When things go wrong, it's important to give the end user a nice and helpful err Luckily, Roc allows you to carry payload (i.e., data) inside your `Err` tag. It's tempting to carry an error message directly (e.g., `Err "User #42 was not found"`), and this may be fine in some simple cases, but this has several limitations: - you might not have enough context inside the function that detects the error to produce a sufficiently helpful error message. - - For example, the `Str.toU64` function can be used to parse all sorts of integers: days, seconds, user IDs, and more. If the error message just says `Could not convert string "0.5" to a positive integer`, the user may not have enough context to solve the issue. + - For example, the `Str.to_u64` function can be used to parse all sorts of integers: days, seconds, user IDs, and more. If the error message just says `Could not convert string "0.5" to a positive integer`, the user may not have enough context to solve the issue. - in many cases your error handling code may need to handle some errors differently than others. However, if the errors only carry string payloads, your error handling code will have to parse that string to know what problem occurred: this is inefficient and it can easily break if the error message is ever tweaked. - if your website is multilingual, you will need to translate the error message to the user's language. It's going to be much easier to do that if the error payload is machine-friendly data rather than an English string. diff --git a/exercises/practice/etl/.meta/template.j2 b/exercises/practice/etl/.meta/template.j2 index 10e6b92a..0b2244d9 100644 --- a/exercises/practice/etl/.meta/template.j2 +++ b/exercises/practice/etl/.meta/template.j2 @@ -8,13 +8,13 @@ import {{ exercise | to_pascal }} exposing [transform] # {{ case["description"] }} expect legacy = - Dict.fromList [ + Dict.from_list [ {%- for score, letters in case["input"]["legacy"].items() %} ({{score}}, {{ letters | to_roc | replace("\"", "'") }}), {%- endfor %} ] expected = - Dict.fromList [ + Dict.from_list [ {%- for letter, score in case["expected"].items() %} ('{{letter}}', {{ score }}), {%- endfor %} diff --git a/exercises/practice/forth/.meta/template.j2 b/exercises/practice/forth/.meta/template.j2 index 4137068a..5cfd30e1 100644 --- a/exercises/practice/forth/.meta/template.j2 +++ b/exercises/practice/forth/.meta/template.j2 @@ -10,7 +10,7 @@ import Forth exposing [evaluate] expect result = evaluate {{ innerCase["input"]["instructions"] | join('\n') | to_roc_multiline_string | indent(8) }} {%- if innerCase["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ innerCase["expected"] }} {%- endif %} diff --git a/exercises/practice/go-counting/.meta/template.j2 b/exercises/practice/go-counting/.meta/template.j2 index aaa05686..885807ff 100644 --- a/exercises/practice/go-counting/.meta/template.j2 +++ b/exercises/practice/go-counting/.meta/template.j2 @@ -6,7 +6,7 @@ {%- if territory == [] %} Set.empty {} {%- else %} -Set.fromList [ +Set.from_list [ {%- for intersection in territory %} { x : {{ intersection[0] }}, y : {{ intersection[1] }} }, {%- endfor %} @@ -20,12 +20,12 @@ import {{ exercise | to_pascal }} exposing [territory, territories] ## comparing tags or records containing sets sometimes returns the wrong result ## depending on the internal order of the set data, so we have to unwrap the sets ## in order to compare them properly. -compareTerritory = \maybe_result, maybe_expected -> +compareTerritory = |maybe_result, maybe_expected| when (maybe_result, maybe_expected) is (Ok result, Ok expected) -> result.owner == expected.owner && result.territory == expected.territory _ -> Bool.false -compareTerritories = \maybe_result, maybe_expected -> +compareTerritories = |maybe_result, maybe_expected| when (maybe_result, maybe_expected) is (Ok result, Ok expected) -> result.black == expected.black && result.white == expected.white && result.none == expected.none _ -> Bool.false @@ -33,11 +33,11 @@ compareTerritories = \maybe_result, maybe_expected -> {% for case in cases -%} # {{ case["description"] }} expect - board = {{ case["input"]["board"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replaceEach "·" " " + board = {{ case["input"]["board"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replace_each "·" " " result = board |> {{ case["property"] | to_snake }} {%- if case["property"] == "territory" %} { x : {{ case["input"]["x"] }}, y : {{ case["input"]["y"] }} }{% endif %} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- elif case["expected"]["owner"] %} expected = Ok { owner: {{ case["expected"]["owner"] | to_pascal }}, diff --git a/exercises/practice/grains/.meta/template.j2 b/exercises/practice/grains/.meta/template.j2 index c244fe21..72494f1d 100644 --- a/exercises/practice/grains/.meta/template.j2 +++ b/exercises/practice/grains/.meta/template.j2 @@ -18,7 +18,7 @@ expect expect result = grains_on_square {{ subcase["input"]["square"] }} {%- if subcase["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ subcase["expected"] }} {%- endif %} diff --git a/exercises/practice/hamming/.meta/template.j2 b/exercises/practice/hamming/.meta/template.j2 index 6816105f..5e5b85a9 100644 --- a/exercises/practice/hamming/.meta/template.j2 +++ b/exercises/practice/hamming/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} {{ case["input"]["strand1"] | to_roc }} {{ case["input"]["strand2"] | to_roc }} {%- if case["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ case["expected"] }} {%- endif %} diff --git a/exercises/practice/largest-series-product/.meta/template.j2 b/exercises/practice/largest-series-product/.meta/template.j2 index fe959322..0c27be4a 100644 --- a/exercises/practice/largest-series-product/.meta/template.j2 +++ b/exercises/practice/largest-series-product/.meta/template.j2 @@ -10,7 +10,7 @@ expect digits = {{ case["input"]["digits"] | to_roc }} result = digits |> {{ case["property"] | to_snake }} {{ case["input"]["span"] | to_roc }} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok {{ case["expected"] | to_roc }} result == expected diff --git a/exercises/practice/list-ops/.meta/Example.roc b/exercises/practice/list-ops/.meta/Example.roc index ef5eb9dc..723cd03f 100644 --- a/exercises/practice/list-ops/.meta/Example.roc +++ b/exercises/practice/list-ops/.meta/Example.roc @@ -17,7 +17,7 @@ concat = |lists| filter : List a, (a -> Bool) -> List a filter = |list, function| - # Cheating: list |> List.keepIf function + # Cheating: list |> List.keep_if function loop = |l, acc| when l is [] -> acc @@ -56,7 +56,7 @@ foldl = |list, initial, function| foldr : List a, b, (b, a -> b) -> b foldr = |list, initial, function| - # Cheating: list |> List.walkBackwards initial function + # Cheating: list |> List.walk_backwards initial function when list is [] -> initial [.. as rest, last] -> rest |> foldr(function(initial, last), function) diff --git a/exercises/practice/list-ops/.meta/template.j2 b/exercises/practice/list-ops/.meta/template.j2 index 5d773025..cc1bf906 100644 --- a/exercises/practice/list-ops/.meta/template.j2 +++ b/exercises/practice/list-ops/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [append, concat, filter, length, map, "(acc, el) -> el / acc": "\\acc, el -> el / acc", "(acc, el) -> el + acc": "\\acc, el -> el + acc", "(x) -> x + 1": "\\x -> x + 1", - "(x) -> x modulo 2 == 1": "Num.isOdd", + "(x) -> x modulo 2 == 1": "Num.is_odd", } -%} {% for supercase in cases %} diff --git a/exercises/practice/minesweeper/.meta/template.j2 b/exercises/practice/minesweeper/.meta/template.j2 index 68a45c79..6398b101 100644 --- a/exercises/practice/minesweeper/.meta/template.j2 +++ b/exercises/practice/minesweeper/.meta/template.j2 @@ -7,9 +7,9 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } {% for case in cases -%} # {{ case["description"] }} expect - minefield = {{ case["input"]["minefield"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replaceEach "·" " " + minefield = {{ case["input"]["minefield"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replace_each "·" " " result = {{ case["property"] | to_snake }} minefield - expected = {{ case["expected"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replaceEach "·" " " + expected = {{ case["expected"] | to_roc_multiline_string | replace(" ", "·") | indent(8) }} |> Str.replace_each "·" " " result == expected {% endfor %} diff --git a/exercises/practice/nth-prime/.meta/template.j2 b/exercises/practice/nth-prime/.meta/template.j2 index f3e1633f..dc61da84 100644 --- a/exercises/practice/nth-prime/.meta/template.j2 +++ b/exercises/practice/nth-prime/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} {{ case["input"]["number"] }} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} result == Ok {{ case["expected"] }} {%- endif %} diff --git a/exercises/practice/nucleotide-count/.meta/template.j2 b/exercises/practice/nucleotide-count/.meta/template.j2 index 76acf3ae..75efdd73 100644 --- a/exercises/practice/nucleotide-count/.meta/template.j2 +++ b/exercises/practice/nucleotide-count/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} {{ case["input"]["strand"] | to_roc }} {%- if case["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ case["expected"] | to_roc }} {%- endif %} diff --git a/exercises/practice/ocr-numbers/.meta/template.j2 b/exercises/practice/ocr-numbers/.meta/template.j2 index ea0dda5c..d284568d 100644 --- a/exercises/practice/ocr-numbers/.meta/template.j2 +++ b/exercises/practice/ocr-numbers/.meta/template.j2 @@ -10,7 +10,7 @@ expect grid = {{ case["input"]["rows"] | to_roc_multiline_string | indent(8) }} result = {{ case["property"] | to_snake }} grid {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok {{ case["expected"] | to_roc }} result == expected diff --git a/exercises/practice/palindrome-products/.meta/template.j2 b/exercises/practice/palindrome-products/.meta/template.j2 index ad39a3b1..0a466f7f 100644 --- a/exercises/practice/palindrome-products/.meta/template.j2 +++ b/exercises/practice/palindrome-products/.meta/template.j2 @@ -4,7 +4,7 @@ import {{ exercise | to_pascal }} exposing [smallest, largest] -isEq = \result, expected -> +isEq = |result, expected| when (result, expected) is (Ok {value, factors}, Ok {value: expectedValue, factors: expectedFactors}) -> value == expectedValue && factors == expectedFactors @@ -15,11 +15,11 @@ isEq = \result, expected -> expect result = {{ case["property"] | to_snake }} {{ case["input"] | to_roc }} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok { value: {% if case["expected"]["value"] is none %}0{% else %}{{ case["expected"]["value"] }}{% endif %}, - factors: Set.fromList [ + factors: Set.from_list [ {%- for pair in case["expected"]["factors"] %} ({{ pair[0] }}, {{ pair[1] }}),{% endfor %} ] diff --git a/exercises/practice/perfect-numbers/.meta/template.j2 b/exercises/practice/perfect-numbers/.meta/template.j2 index e03500c5..4c5ea305 100644 --- a/exercises/practice/perfect-numbers/.meta/template.j2 +++ b/exercises/practice/perfect-numbers/.meta/template.j2 @@ -14,7 +14,7 @@ import {{ exercise | to_pascal }} exposing [classify] expect result = {{ case["property"] | to_snake }} {{ case["input"]["number"] }} {%- if case["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ case["expected"] | to_pascal }} {%- endif %} diff --git a/exercises/practice/phone-number/.meta/template.j2 b/exercises/practice/phone-number/.meta/template.j2 index af27f758..0e3df4ab 100644 --- a/exercises/practice/phone-number/.meta/template.j2 +++ b/exercises/practice/phone-number/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} {{ case["input"]["phrase"] | to_roc }} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok {{ case["expected"] | to_roc }} result == expected diff --git a/exercises/practice/protein-translation/.meta/template.j2 b/exercises/practice/protein-translation/.meta/template.j2 index 045faf65..cb28adcf 100644 --- a/exercises/practice/protein-translation/.meta/template.j2 +++ b/exercises/practice/protein-translation/.meta/template.j2 @@ -10,7 +10,7 @@ expect rna = {{ case["input"]["strand"] | to_roc }} result = rna |> to_protein {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} result == Ok [{%- for aminoAcid in case["expected"] -%}{{ aminoAcid | to_pascal }}, {%- endfor %}] {%- endif %} diff --git a/exercises/practice/pythagorean-triplet/.meta/template.j2 b/exercises/practice/pythagorean-triplet/.meta/template.j2 index c37971fb..c7359479 100644 --- a/exercises/practice/pythagorean-triplet/.meta/template.j2 +++ b/exercises/practice/pythagorean-triplet/.meta/template.j2 @@ -8,7 +8,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } # {{ case["description"] }} expect result = {{ case["property"] | to_snake }} {{ case["input"]["n"] }} - expected = Set.fromList [{%- for triplet in case["expected"] %} + expected = Set.from_list [{%- for triplet in case["expected"] %} ({{ triplet[0] }}, {{ triplet[1] }}, {{ triplet[2] }}), {%- endfor %}] result == expected diff --git a/exercises/practice/queen-attack/.meta/template.j2 b/exercises/practice/queen-attack/.meta/template.j2 index d332448d..04d53c77 100644 --- a/exercises/practice/queen-attack/.meta/template.j2 +++ b/exercises/practice/queen-attack/.meta/template.j2 @@ -27,7 +27,7 @@ expect {%- else %} expect result = create "{{ plugins.to_square(case["input"]["queen"]) }}" - result |> Result.isErr + result |> Result.is_err {%- endif %} {%- elif case["property"] == "canAttack" %} expect diff --git a/exercises/practice/rational-numbers/.meta/template.j2 b/exercises/practice/rational-numbers/.meta/template.j2 index 4efdee96..ede1f929 100644 --- a/exercises/practice/rational-numbers/.meta/template.j2 +++ b/exercises/practice/rational-numbers/.meta/template.j2 @@ -35,7 +35,7 @@ expect {%- if case["expected"] is iterable %} result == {{ plugins.to_roc_rational(case["expected"]) }} {%- else %} - result |> Num.isApproxEq {{ case["expected"] | to_roc }} {} + result |> Num.is_approx_eq {{ case["expected"] | to_roc }} {} {%- endif %} {% endmacro %} diff --git a/exercises/practice/rest-api/.meta/template.j2 b/exercises/practice/rest-api/.meta/template.j2 index dce6960f..d21b167c 100644 --- a/exercises/practice/rest-api/.meta/template.j2 +++ b/exercises/practice/rest-api/.meta/template.j2 @@ -4,14 +4,14 @@ import {{ exercise | to_pascal }} exposing [get, post] -standardizeResult = \result -> - result |> Result.try \string -> +standardizeResult = |result| + result |> Result.try |string| string - |> Str.replaceEach ".0," "," - |> Str.replaceEach ".0}" "}" - |> Str.toUtf8 - |> List.dropIf \c -> [' ', '\t', '\n'] |> List.contains c - |> Str.fromUtf8 + |> Str.replace_each ".0," "," + |> Str.replace_each ".0}" "}" + |> Str.to_utf8 + |> List.drop_if |c| [' ', '\t', '\n'] |> List.contains c + |> Str.from_utf8 {% for supercase in cases %} ## @@ -26,12 +26,12 @@ expect {%- for user in case["input"]["database"]["users"] %} { name: {{ user["name"] | to_roc }}, - owes: Dict.fromList [ + owes: Dict.from_list [ {%- for (name, amount) in user["owes"].items() %} ({{ name | to_roc }}, {{ amount }}), {%- endfor -%} ], - owed_by: Dict.fromList [ + owed_by: Dict.from_list [ {%- for (name, amount) in user["owed_by"].items() %} ({{ name | to_roc }}, {{ amount }}), {%- endfor -%} diff --git a/exercises/practice/saddle-points/.meta/template.j2 b/exercises/practice/saddle-points/.meta/template.j2 index 2f9a2bc5..4d0d3995 100644 --- a/exercises/practice/saddle-points/.meta/template.j2 +++ b/exercises/practice/saddle-points/.meta/template.j2 @@ -13,7 +13,7 @@ expect {%- endfor %} ] result = treeHeights |> {{ case["property"] | to_snake }} - expected = Set.fromList [ + expected = Set.from_list [ {%- for tree in case["expected"] %} {{ tree | to_roc }}, {%- endfor %} diff --git a/exercises/practice/say/.meta/template.j2 b/exercises/practice/say/.meta/template.j2 index 455f5f79..8e03ae6d 100644 --- a/exercises/practice/say/.meta/template.j2 +++ b/exercises/practice/say/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } expect result = {{ case["property"] | to_snake }} {{ case["input"]["number"] | to_roc }} {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} result == Ok {{ case["expected"] | to_roc }} {% endif %} diff --git a/exercises/practice/sgf-parsing/.meta/template.j2 b/exercises/practice/sgf-parsing/.meta/template.j2 index f71b977c..452107a0 100644 --- a/exercises/practice/sgf-parsing/.meta/template.j2 +++ b/exercises/practice/sgf-parsing/.meta/template.j2 @@ -6,7 +6,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } {%- macro to_node(node) %} GameNode { - properties: Dict.fromList [ + properties: Dict.from_list [ {%- for name, values in node["properties"].items() %} ({{ name | to_roc }}, {{ values | to_roc }}), {%- endfor %}], @@ -24,7 +24,7 @@ expect sgf = {{ case["input"]["encoded"] | to_roc }} result = {{ case["property"] | to_snake }} sgf {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = {{ to_node(case["expected"]) | indent(4) }} result == Ok expected diff --git a/exercises/practice/space-age/.meta/template.j2 b/exercises/practice/space-age/.meta/template.j2 index 4905d2e6..278c2aa1 100644 --- a/exercises/practice/space-age/.meta/template.j2 +++ b/exercises/practice/space-age/.meta/template.j2 @@ -8,6 +8,6 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } # {{ case["description"] }} expect result = {{ case["property"] | to_snake }} {{ case["input"]["planet"] | to_pascal }} {{ case["input"]["seconds"] }} - Num.isApproxEq result {{ case["expected"] }} { atol: 0.01 } + Num.is_approx_eq result {{ case["expected"] }} { atol: 0.01 } {% endfor %} diff --git a/exercises/practice/strain/.meta/template.j2 b/exercises/practice/strain/.meta/template.j2 index 8f2bbea0..92f38777 100644 --- a/exercises/practice/strain/.meta/template.j2 +++ b/exercises/practice/strain/.meta/template.j2 @@ -7,7 +7,7 @@ import {{ exercise | to_pascal }} exposing [keep, discard] {% set function_map = { "fn(x) -> contains(x, 5)": "\\x -> x |> List.contains 5", "fn(x) -> false": "\\_ -> Bool.false", - "fn(x) -> starts_with(x, 'z')": "\\x -> x |> Str.startsWith \"z\"", + "fn(x) -> starts_with(x, 'z')": "\\x -> x |> Str.starts_with \"z\"", "fn(x) -> true": "\\_ -> Bool.true", "fn(x) -> x % 2 == 0": "\\x -> x % 2 == 0", "fn(x) -> x % 2 == 1": "\\x -> x % 2 == 1", diff --git a/exercises/practice/transpose/.meta/template.j2 b/exercises/practice/transpose/.meta/template.j2 index 58b899d8..bbe9f773 100644 --- a/exercises/practice/transpose/.meta/template.j2 +++ b/exercises/practice/transpose/.meta/template.j2 @@ -7,8 +7,8 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } {% for case in cases -%} # {{ case["description"] }} expect - input = {{ case["input"]["lines"] | to_roc_multiline_string | replace(" ", "□") | indent(8) }} |> Str.replaceEach "□" " " - result = {{ case["property"] | to_snake }} input |> Str.replaceEach " " "□" + input = {{ case["input"]["lines"] | to_roc_multiline_string | replace(" ", "□") | indent(8) }} |> Str.replace_each "□" " " + result = {{ case["property"] | to_snake }} input |> Str.replace_each " " "□" expected = {{ case["expected"] | to_roc_multiline_string | replace(" ", "□") | indent(8) }} result == expected diff --git a/exercises/practice/two-bucket/.meta/template.j2 b/exercises/practice/two-bucket/.meta/template.j2 index 84714e55..195a3bf1 100644 --- a/exercises/practice/two-bucket/.meta/template.j2 +++ b/exercises/practice/two-bucket/.meta/template.j2 @@ -14,7 +14,7 @@ expect start_bucket: {{ case["input"]["startBucket"] | to_pascal }}, } {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok { moves: {{ case["expected"]["moves"] }}, diff --git a/exercises/practice/variable-length-quantity/.meta/Example.roc b/exercises/practice/variable-length-quantity/.meta/Example.roc index 7a2433f1..7f88477a 100644 --- a/exercises/practice/variable-length-quantity/.meta/Example.roc +++ b/exercises/practice/variable-length-quantity/.meta/Example.roc @@ -10,13 +10,13 @@ encode_integer = |integer| if n == 0 then bytes else - next_n = n // 128 # same as n |> Num.shiftRightZfBy 7 - last_7_bits = n % 128 |> Num.to_u8 # same as n |> Num.bitwiseAnd 0b1111111 |> Num.toU8 + next_n = n // 128 # same as n |> Num.shift_right_zf_by 7 + last_7_bits = n % 128 |> Num.to_u8 # same as n |> Num.bitwise_and 0b1111111 |> Num.to_u8 byte = if bytes == [] then last_7_bits else - last_7_bits + 128 # same as last7Bits |> Num.bitwiseOr 0b10000000 + last_7_bits + 128 # same as last7Bits |> Num.bitwise_or 0b10000000 help((bytes |> List.append(byte)), next_n) if integer == 0 then [0] else help([], integer) |> List.reverse diff --git a/exercises/practice/variable-length-quantity/.meta/template.j2 b/exercises/practice/variable-length-quantity/.meta/template.j2 index dc0c8a07..6b1121e2 100644 --- a/exercises/practice/variable-length-quantity/.meta/template.j2 +++ b/exercises/practice/variable-length-quantity/.meta/template.j2 @@ -22,7 +22,7 @@ expect bytes = {{ case["input"]["integers"] | to_roc }} result = decode bytes {%- if case["expected"]["error"] %} - result |> Result.isErr + result |> Result.is_err {%- else %} expected = Ok {{ case["expected"] | to_roc }} result == expected diff --git a/exercises/practice/word-count/.meta/template.j2 b/exercises/practice/word-count/.meta/template.j2 index 59fc61dd..cf7fb559 100644 --- a/exercises/practice/word-count/.meta/template.j2 +++ b/exercises/practice/word-count/.meta/template.j2 @@ -8,7 +8,7 @@ import {{ exercise | to_pascal }} exposing [{{ cases[0]["property"] | to_snake } # {{ case["description"] }} expect result = {{ case["property"] | to_snake }} {{ case["input"]["sentence"] | to_roc }} - expected = Dict.fromList [ + expected = Dict.from_list [ {%- for word, count in case["expected"].items() %} ({{ word | to_roc }}, {{ count }}), {%- endfor %} diff --git a/exercises/practice/word-search/.meta/template.j2 b/exercises/practice/word-search/.meta/template.j2 index 99332512..946f8a58 100644 --- a/exercises/practice/word-search/.meta/template.j2 +++ b/exercises/practice/word-search/.meta/template.j2 @@ -10,7 +10,7 @@ expect grid = {{ case["input"]["grid"] | to_roc_multiline_string | indent(8) }} words_to_search_for = {{ case["input"]["wordsToSearchFor"] | to_roc }} result = grid |> {{ case["property"] | to_snake }} words_to_search_for - expected = Dict.fromList [ + expected = Dict.from_list [ {%- for word, result in case["expected"].items() %} {%- if result is none %} # {{ word | to_roc }} is not in the grid diff --git a/exercises/practice/wordy/.meta/template.j2 b/exercises/practice/wordy/.meta/template.j2 index 8a333ef5..490fffd3 100644 --- a/exercises/practice/wordy/.meta/template.j2 +++ b/exercises/practice/wordy/.meta/template.j2 @@ -9,7 +9,7 @@ import {{ exercise | to_pascal }} exposing [answer] expect result = {{ case["property"] | to_snake }} {{ case["input"]["question"] | to_roc }} {%- if case["expected"]["error"] %} - Result.isErr result + Result.is_err result {%- else %} result == Ok {{ case["expected"] }} {%- endif %}