Tuples

Some different uses of tuples in Roc.

A tuple is like a record, except instead of field names they have field positions. For example, instead of having foo.name to access the name field of a record, you might write foo.0 to acess the first field in a tuple (or foo.1 for the second field, etc.)

Code

app [main!] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.19.0/Hj-J_zxz7V9YurCSTFcFdu6cQJie4guzsPMUi5kBYUk.tar.br" }

import pf.Stdout

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.")

Output

Run this from the directory that has main.roc in it:

$ roc main.roc
First is: A String,
Second is: true,
Third is: 15000000.
You also have some pears.