A type ascription is a way of telling the type checker the expected type of some expression.
def foo = 1 : f64
It is used to disambiguate otherwise ambiguous cases. For example,
1 above would be inferred to have type
i32 if not
for the type ascription.
For return types, we put the ascription on the definition itself:
def bar : f64 = 1
This is equivalent to the above, but more common.
Most Futhark programs do not need explicit type ascriptions (although it is good form to list return types), but it can be needed to disambiguate some tricky cases. For example, if we want to create an empty two-dimensional array with a specific inner size:
def baz =  : f32
Type ascriptions are not “casts” and cannot change the type of a value.