Function types

Function types represent functions that take inputs and yield outputs. The type of functions that take inputs of type A and yield outputs of type B is written A -> B (or A B).

Every function in Disco takes exactly one input and produces exactly one output. “Multi-argument” functions can be represented using a product type as the input type. For example, the type of a function taking two natural numbers as input and producing a rational number as output could be written N × N N.

Note that if A and B are types, then A -> B is itself a type, which can be used in all the same ways as any other type. In other words, functions in Disco are “first-class”, which means they can be used in the same ways as any other values: for example, functions can be given as input to other functions, or returned as output, we can have lists of functions, etc.