Haskell a un avantage, la compilation et typage comme vérification de l'exactitude d'un programme (dans une certaine mesure).
Si votre programme Haskell compile, il a de bonnes chances d'avoir déjà éliminé beaucoup de cas douteux.
On évite plus de mauvaises surprises à l'exécution.
On peut aussi écrire ceci : max :: ( Ord a) => a -> (a -> a).
Et le lire ainsi : max prend un a et retourne (c'est le premier -> )) une fonction qui prend un a et retourne un a.
C'est pourquoi le type de retour et les paramètres d'une fonction sont séparés par des flèches.