Generic functions
Up until now each function has accepted precisely one type for each of its arguments.
The twice
function in the previous lesson on
higher order functions only worked with functions that would take and
return ints. This is overly restrictive, it should be possible to use this
function with any type, so long as the function and the initial value are
compatible.
To enable this, Gleam supports generics, also known as parametric polymorphism.
This works by using a type variable instead of specifying a concrete type. It stands in for whatever specific type is being used when the function is called. These type variables are written with a lowercase name.
Type variables are not like an any
type, they get replaced with a
specific type each time the function is called. Try uncommenting
twice(10, exclaim)
to see the compiler error from trying to use a
type variable as an int and a string at the same time.