Comment définir l’équivalent de cette fonction (prise de learnyouahaskell ) dans GHCi?
import Data.List numUniques :: (Eq a) => [a] -> Int numUniques = length . nub
Sans la déclaration de type, GHCi accepte la définition de la fonction, mais elle se termine par un type inutile:
Prelude Data.List> import Data.List Prelude Data.List> let numUniques' = length . nub Prelude Data.List> :t numUniques' numUniques' :: [()] -> Int
La fonction résultante accepte uniquement une liste d’unités en tant que paramètre.
Existe-t-il un moyen de fournir des déclarations de type dans GHCi? Ou existe-t-il une autre façon de définir des fonctions comme celles-ci qui ne nécessitent pas de déclaration de type?
Je n’ai pas vu d’indices évidents dans le guide GHCi et j’ai expérimenté des expressions comme celles-ci (en vain):
> let numUniques' = ((length . nub) :: (Eq a) => [a] -> Int) > :t numUniques' numUniques' :: [()] -> Int
Existe-t-il un moyen de fournir des déclarations de type dans GHCi?
let numUniques' :: (Eq a) => [a] -> Int; numUniques' = length . nub
Ou existe-t-il une autre façon de définir des fonctions comme celles-ci qui ne nécessitent pas de déclaration de type?
Si vous désactivez la ressortingction de monomorphisme avec -XNoMonomorphismRessortingction
, cela -XNoMonomorphismRessortingction
le bon type.
Notez que vous pouvez également éviter la ressortingction du monomorphisme en ajoutant simplement des “points” (c’est-à-dire des variables explicites) à votre expression. Donc, cela donne aussi le type correct:
laissez numUniques x = longueur. nub $ x