• [^] # Re: cat troll.hs

    Posté par . En réponse à la dépêche Sortie du Glorious Haskell Compiler 7.8. Évalué à 4. Dernière modification le 01 mai 2014 à 18:17.

    C’est parce qu’on ne travaille pas dans un système de types simpliste, comme le lambda calcul simplement typé. Il y a plusieurs kinds, qui sont des constructeurs de types (juste deux en Haskell, ceux d’arité 0 ou 1, les autres sont obtenus par curryfication). Ici tes Int et b sont de kind *, mais m est de kind * -> *, j’imagine. Plus d’infos dans le classique TAPL de Pierce,

    Pour simplifier, c’est pareil qu’en C, tu ne peux pas écrire qu’une fonction prend en paramètre un tableau, sans spécifier le type de ses éléments (pas de func (int x, [] y)). En Haskell, tu peux quand même généraliser avec forall a. func :: Int -> Monad a par exemple. (En C, on doit outrepasser le système de types par des casts).