En Elm, existe una variante especial de variables de tipo llamadas variables de tipo restringido. El ejemplo más común es el tipo numérico. La función negate la utiliza:
> negate
<function> : number -> number
Normalmente, las variables de tipo se pueden rellenar con cualquier valor, pero number solo se puede rellenar con valores Int y Float. Esto limita las posibilidades.
La lista completa de variables de tipo restringido es:
number permite Int y Float
appendable permite String y List a
comparable permite Int, Float, Char, String y listas/tuplas de valores comparables
compappend permite String y List comparable
Estas variables de tipo restringido existen para que operadores como (+) y (<) sean un poco más flexibles.