Je le suivais dans GHCi:Haskell Ambiguous Occurrences - comment éviter?
:m + Data.Map
let map = fromList [(1, 2)]
lookup 1 map
GHCi sait que la carte est un (Carte Entier Entier). Alors pourquoi revendique-t-il une ambiguïté entre Prelude.lookup et Data.Map.lookup lorsque le type est clair et que je peux éviter?
<interactive>:1:0:
Ambiguous occurrence `lookup'
It could refer to either `Prelude.lookup', imported from Prelude
or `Data.Map.lookup', imported from Data.Map
> :t map
map :: Map Integer Integer
> :t Prelude.lookup
Prelude.lookup :: (Eq a) => a -> [(a, b)] -> Maybe b
> :t Data.Map.lookup
Data.Map.lookup :: (Ord k) => k -> Map k a -> Maybe a
C'est le genre de réponse que j'ai cherché, +1. Mais j'ai une question à gauche. Pourquoi, alors, il n'y a pas de classe de type "container" pour tous ces 'Data.List',' Data.Set' etc? Ou s'il y a (et si je comprends bien, c'est la classe de type 'Functor') - alors, pourquoi la définition de ses instances pour les types de conteneur n'est pas omniprésente dans les bibliothèques? – ulidtko
@ulidtko: La réponse courte est "parce que c'est plus difficile que ça en a l'air", et la réponse longue ne rentrerait pas dans un commentaire. Il y a beaucoup de complications impliquées dans ce que les conteneurs supportent quelles opérations et limites sur les types d'éléments, & c. Rechercher des informations sur l'extension 'TypeFamilies' - les API de conteneur en sont un exemple motivant. –
@ulidtko Cela pourrait être intéressant pour vous: http://hackage.haskell.org/packages/archive/classy-prelude/0.4.1/doc/html/ClassyPrelude.html –