Une signature de type en Haskell est généralement écrite dans le format suivant :
nomDeFonction :: typeArgument1 -> typeArgument2 -> ... -> typeArgumentN
La sortie finale peut être considérée comme un argument. C'est la conséquence de la curryfication.
Les spécifications de type peuvent consister en un type, tel que Integer, ou une variable de type dans le cas de fonctions polymorphiques.
En Haskell, ces variables de type peuvent être notamment "a", "b" ou "anyType", de sorte que l'on peut écrire :
nomDeFonction :: a -> a -> ... -> a
Puisque Haskell supporte des fonctions d'ordre supérieur, des fonctions peuvent être passées comme arguments.
Ceci s'écrit comme suit :
nomDeFonction :: (a -> a) -> a
Cette fonction accepte une fonction avec comme signature de type a -> a, et retourne des données de type a.