# Tuple Patterns

Tuple patterns only match tuples. They are written as simply a comma separated list of patterns within parenthesis:

    (1, $x, "buckle my shoe")

You can also write a rest pattern variable at the end using an asterisk (`*`):

    ($a, fie, $b, *$c)

This will match the rest of the items in the data value that the tuple pattern is matched to. Note that the rest pattern variable is always bound to a tuple.

Examples:

> - matching `(1, $x, "buckle my shoe")` to `(1, 2, "buckle my shoe")` matches, binding `$x` to 2.
> - matching `(1, $x, "buckle my shoe")` to `(1, 2, "buckle my belt")` does not match because the third pattern within the tuple pattern fails to match the third value in the matched tuple.
> - matching `($a, fie, $b, *$c)` to `(fee, fie, foe, fum)` matches, binding `$a` to `fee`, `$b` to `foe` and `$c` to `(fum)`.
> - matching `($a, fie, $b, *$c)` to `(fee, fie, foe)` matches, binding `$a` to `fee`, `$b` to `foe` and `$c` to `()`.
> - matching `($a, fie, $b, *$c)` to `(fee, fie)` does not match because the data value has to have a length of at least three.

Hint

You can use `(*$foo)` to only match a tuple. It will bind `$foo` to the entire tuple, but will fail to match any other data type.

Copyright © 2007-2009 Bruce Frederiksen

Page last modified Mon, Oct 27 2008.