From 99b145b72206ac6a7c098a076865b34af98311b0 Mon Sep 17 00:00:00 2001 From: Norbert Hajagos Date: Fri, 27 Feb 2026 11:25:00 +0100 Subject: [PATCH 1/6] update tuples example --- examples/Tuples/README.md | 7 ++-- examples/Tuples/main.roc | 75 ++++++++++++++++++++------------------- 2 files changed, 42 insertions(+), 40 deletions(-) diff --git a/examples/Tuples/README.md b/examples/Tuples/README.md index 077d6123..03181f14 100644 --- a/examples/Tuples/README.md +++ b/examples/Tuples/README.md @@ -5,8 +5,8 @@ For example, instead of having `foo.name` to access the `name` field of a record you might write `foo.0` to access the first field in a tuple (or `foo.1` for the second field, etc.) - ## Code + ```roc file:main.roc ``` @@ -17,8 +17,9 @@ Run this from the directory that has `main.roc` in it: ``` $ roc main.roc -First is: A String, +First is: Just a String, Second is: true, -Third is: 15000000. +Third is: 15000000.0. + You also have some pears. ``` diff --git a/examples/Tuples/main.roc b/examples/Tuples/main.roc index 657a6d8a..a40cc502 100644 --- a/examples/Tuples/main.roc +++ b/examples/Tuples/main.roc @@ -1,37 +1,38 @@ -app [main!] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.20.0/X73hGh05nNTkDHU06FHC0YfFaQB1pimX7gncRcao5mU.tar.br" } - -import pf.Stdout -import pf.Arg exposing [Arg] - -main! : List Arg => Result {} _ -main! = |_args| - - # a tuple that contains three different types - simple_tuple : (Str, Bool, I64) - simple_tuple = ("A String", Bool.true, 15_000_000) - - # access the items in a tuple by index (starts at 0) - first_item = simple_tuple.0 - second_item = if simple_tuple.1 then "true" else "false" - third_item = Num.to_str(simple_tuple.2) - - Stdout.line!( - """ - First is: ${first_item}, - Second is: ${second_item}, - Third is: ${third_item}. - """, - )? - - # You can also use tuples with `when`: - fruit_selection : [Apple, Pear, Banana] - fruit_selection = Pear - - quantity = 12 - - when (fruit_selection, quantity) is - # TODO re-enable when github.com/roc-lang/roc/issues/5530 is fixed. - # (_, qty) if qty == 0 -> Stdout.line! "You have no fruit." - (Apple, _) -> Stdout.line!("You also have some apples.") - (Pear, _) -> Stdout.line!("You also have some pears.") - (Banana, _) -> Stdout.line!("You also have some bananas.") +main! : List(Str) => Try({}, _) +main! = |_args| { + + # A tuple that contains three different types + simple_tuple : (Str, Bool, Dec) + simple_tuple = ("Just a String", True, 15_000_000) + + + # Access the items in a tuple by index (starts at 0) + first_item = simple_tuple.0 + second_item = if simple_tuple.1 "true" else "false" + third_item = simple_tuple.2.to_str() + + echo!( + \\First is: ${first_item}, + \\Second is: ${second_item}, + \\Third is: ${third_item}. + \\ + ) + + # You can also use tuples with `match`: + fruit_selection : [Apple, Pear, Banana] + fruit_selection = Pear + + quantity = 12 + + # Create a tuple of fruites and quantities, + # So you can match on both of them + match (fruit_selection, quantity) { + (_, 0) => echo!("You have no fruit.") + (Apple, 1) => echo!("You have an apple.") + (Apple, _) => echo!("You also have some apples.") + (Pear, _) => echo!("You also have some pears.") + (Banana, _) => echo!("You also have some bananas.") + } + + Ok({}) +} From c352e5cf3c81e56dd34bfad3d20e7575bbc16f57 Mon Sep 17 00:00:00 2001 From: Norbert Hajagos Date: Fri, 27 Feb 2026 12:44:45 +0100 Subject: [PATCH 2/6] ran roc fmt --- examples/Tuples/main.roc | 68 ++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/examples/Tuples/main.roc b/examples/Tuples/main.roc index a40cc502..63be812e 100644 --- a/examples/Tuples/main.roc +++ b/examples/Tuples/main.roc @@ -1,38 +1,38 @@ main! : List(Str) => Try({}, _) main! = |_args| { - # A tuple that contains three different types - simple_tuple : (Str, Bool, Dec) - simple_tuple = ("Just a String", True, 15_000_000) - - - # Access the items in a tuple by index (starts at 0) - first_item = simple_tuple.0 - second_item = if simple_tuple.1 "true" else "false" - third_item = simple_tuple.2.to_str() - - echo!( - \\First is: ${first_item}, - \\Second is: ${second_item}, - \\Third is: ${third_item}. - \\ - ) - - # You can also use tuples with `match`: - fruit_selection : [Apple, Pear, Banana] - fruit_selection = Pear - - quantity = 12 - - # Create a tuple of fruites and quantities, - # So you can match on both of them - match (fruit_selection, quantity) { - (_, 0) => echo!("You have no fruit.") - (Apple, 1) => echo!("You have an apple.") - (Apple, _) => echo!("You also have some apples.") - (Pear, _) => echo!("You also have some pears.") - (Banana, _) => echo!("You also have some bananas.") - } - - Ok({}) + # A tuple that contains three different types + simple_tuple : (Str, Bool, Dec) + simple_tuple = ("Just a String", True, 15_000_000) + + # Access the items in a tuple by index (starts at 0) + first_item = simple_tuple.0 + second_item = if simple_tuple.1 "true" else "false" + third_item = simple_tuple.2.to_str() + + echo!( + \\First is: ${first_item}, + \\Second is: ${second_item}, + \\Third is: ${third_item}. + \\ + , + ) + + # You can also use tuples with `match`: + fruit_selection : [Apple, Pear, Banana] + fruit_selection = Pear + + quantity = 12 + + # Create a tuple of fruites and quantities, + # So you can match on both of them + match (fruit_selection, quantity) { + (_, 0) => echo!("You have no fruit.") + (Apple, 1) => echo!("You have an apple.") + (Apple, _) => echo!("You also have some apples.") + (Pear, _) => echo!("You also have some pears.") + (Banana, _) => echo!("You also have some bananas.") + } + + Ok({}) } From 7f594de9f3b748599cfffa329aff85183bf8dcd9 Mon Sep 17 00:00:00 2001 From: Anton-4 <17049058+Anton-4@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:51:17 +0100 Subject: [PATCH 3/6] remove also "also" is bit confusing here, we are only matching one thing. --- examples/Tuples/main.roc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/Tuples/main.roc b/examples/Tuples/main.roc index 63be812e..f9aee6a0 100644 --- a/examples/Tuples/main.roc +++ b/examples/Tuples/main.roc @@ -29,9 +29,9 @@ main! = |_args| { match (fruit_selection, quantity) { (_, 0) => echo!("You have no fruit.") (Apple, 1) => echo!("You have an apple.") - (Apple, _) => echo!("You also have some apples.") - (Pear, _) => echo!("You also have some pears.") - (Banana, _) => echo!("You also have some bananas.") + (Apple, _) => echo!("You have some apples.") + (Pear, _) => echo!("You have some pears.") + (Banana, _) => echo!("You have some bananas.") } Ok({}) From 7a5fdbdf0516a69c3e4e40d303e6a3502f37c6a1 Mon Sep 17 00:00:00 2001 From: Anton-4 <17049058+Anton-4@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:52:16 +0100 Subject: [PATCH 4/6] remove also in test too --- ci_scripts/expect_scripts/Tuples.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_scripts/expect_scripts/Tuples.exp b/ci_scripts/expect_scripts/Tuples.exp index 5083b93c..9ca7c650 100644 --- a/ci_scripts/expect_scripts/Tuples.exp +++ b/ci_scripts/expect_scripts/Tuples.exp @@ -9,7 +9,7 @@ source ./ci_scripts/expect_scripts/shared-code.exp spawn ./examples/Tuples/main -expect "First is: A String,\r\nSecond is: true,\r\nThird is: 15000000.\r\nYou also have some pears.\r\n" { +expect "First is: A String,\r\nSecond is: true,\r\nThird is: 15000000.\r\nYou have some pears.\r\n" { expect eof { check_exit_and_segfault } From e10f8fc6aeb5cbac2695000d5802d22b19f92b7e Mon Sep 17 00:00:00 2001 From: Anton-4 <17049058+Anton-4@users.noreply.github.com> Date: Fri, 27 Feb 2026 17:33:00 +0100 Subject: [PATCH 5/6] run CI on tuples example --- ci_scripts/all_tests.sh | 1 + ci_scripts/check_format.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/ci_scripts/all_tests.sh b/ci_scripts/all_tests.sh index f31cb310..85e7340e 100755 --- a/ci_scripts/all_tests.sh +++ b/ci_scripts/all_tests.sh @@ -17,6 +17,7 @@ fi # opt-in list of examples to test (add examples as they are updated for the new compiler) optin=( + "Tuples" ) is_optin() { diff --git a/ci_scripts/check_format.sh b/ci_scripts/check_format.sh index f51796c1..bcfa2558 100755 --- a/ci_scripts/check_format.sh +++ b/ci_scripts/check_format.sh @@ -18,6 +18,7 @@ fi # opt-in list of files to format check (add files as they are updated for the new compiler) optin=( + "examples/Tuples/main.roc" ) for file in "${optin[@]}"; do From 44387478a7263b7890a172c4885664809ec77fd3 Mon Sep 17 00:00:00 2001 From: Anton-4 <17049058+Anton-4@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:54:13 +0100 Subject: [PATCH 6/6] No roc build, fix expect --- ci_scripts/all_tests.sh | 1 - ci_scripts/expect_scripts/Tuples.exp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ci_scripts/all_tests.sh b/ci_scripts/all_tests.sh index 85e7340e..f97a6cdc 100755 --- a/ci_scripts/all_tests.sh +++ b/ci_scripts/all_tests.sh @@ -102,7 +102,6 @@ if is_optin "TryOperatorDesugaring"; then fi if is_optin "Tuples"; then - $ROC build ./examples/Tuples/main.roc expect ci_scripts/expect_scripts/Tuples.exp fi diff --git a/ci_scripts/expect_scripts/Tuples.exp b/ci_scripts/expect_scripts/Tuples.exp index 9ca7c650..f4ea5e5c 100644 --- a/ci_scripts/expect_scripts/Tuples.exp +++ b/ci_scripts/expect_scripts/Tuples.exp @@ -7,9 +7,9 @@ set timeout 7 source ./ci_scripts/expect_scripts/shared-code.exp -spawn ./examples/Tuples/main +spawn $env(ROC) ./examples/Tuples/main.roc --no-cache -expect "First is: A String,\r\nSecond is: true,\r\nThird is: 15000000.\r\nYou have some pears.\r\n" { +expect "First is: Just a String,\r\nSecond is: true,\r\nThird is: 15000000.0.\r\n\r\nYou have some pears.\r\n" { expect eof { check_exit_and_segfault }