Tuples are multiple values, comma-separated, inside a pair of parenthesis. They don’t exist as a value per se, and they don’t have a type - but they are useful for several things.


It is possible to return multiple values from a function without using an intermediary data structure.

findFile: func (pattern: String) -> (Bool, File) {
  if (found) {
    return (true, file)

  // Didn't find it :/
  return (false, null)

Using a function that returns a tuple can be done in several ways.

// get both values
(found, file) := findFile("report_2013*.md")

// only get the file
(_, file) := findFile("report_2013*.md")

// only want to know if it exists
(found, _) := findFile("report_2013*.md")

// this works too, takes the first value
found := findFile("report_2013*.md")


Tuple syntax can be used to declare multiple variables on the same line:

(x, y) := (3.14, 1.52)

Variable swap

Tuple syntax can also be used to swap two variables:

(x, y) = (y, x)

// equivalent to
tmp := x
x = y
y = tmp

Cover literal

Tuple syntax can be used to conjure a cover out of thin air:

Vec2: cover {
  x, y: Float

v := (3.14, 1.52) as Vec2
// v x = 3.14, v y = 1.52