diff --git a/ci_scripts/all_tests.sh b/ci_scripts/all_tests.sh index f31cb310..f97a6cdc 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() { @@ -101,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/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 diff --git a/ci_scripts/expect_scripts/Tuples.exp b/ci_scripts/expect_scripts/Tuples.exp index 5083b93c..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 also 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 } 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..f9aee6a0 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 have some apples.") + (Pear, _) => echo!("You have some pears.") + (Banana, _) => echo!("You have some bananas.") + } + + Ok({}) +}