map :: (a -> b) -> [a] -> [b]
fmap :: Functor f => (a -> b) -> f a -> f b
liftM :: Monad m => (a -> b) -> m a -> m b
Pourquoi avons-nous trois fonctions différentes qui font essentiellement la même chose?
map :: (a -> b) -> [a] -> [b]
fmap :: Functor f => (a -> b) -> f a -> f b
liftM :: Monad m => (a -> b) -> m a -> m b
Pourquoi avons-nous trois fonctions différentes qui font essentiellement la même chose?
map
existe pour simplifier les opérations sur les listes et pour des raisons historiques (voir Quel est le point de la carte en Haskell, quand il y a fmap?).
3You pourrait se demander pourquoi nous avons besoin d'une carte distincte de la fonction. Pourquoi ne pas en finir avec l'actuel liste carte uniquement fonction, et renommer fmap à la carte à la place? Eh bien, c'est une bonne question. L' argument habituel est que quelqu'un vient juste d'apprendre Haskell, lors de l'utilisation de la carte de manière incorrecte, aurait beaucoup de voir plutôt une erreur sur les listes que les Foncteurs.
-- Typeclassopedia, page 20
fmap
et liftM
existent parce que les monades ne sont pas automatiquement foncteurs en Haskell (même si elles devraient être):
Le fait que nous avons à la fois fmap et liftM est un conséquence malheureuse du fait que la Monade type de classe ne nécessite pas de un Foncteur exemple, même si mathématiquement parlant, chaque monade est un foncteur. Cependant, fmap et liftM sont essentiellement interchangeables, car il est un bug (dans un contexte social plutôt que le sens technique) pour tout type à être une instance de la Monade sans être une instance de Functor.
-- Typeclassopedia, page 33
Edit: agustuss de l'histoire de l' map
et fmap
:
Ce n'est pas réellement comment ça se passe. Ce qui s'est passé est que le type de carte a été généralisé pour couvrir Foncteur en Haskell 1.3. I. e., en Haskell 1.3 fmap a été appelé carte. Ce changement est ensuite revenue en Haskell 1.4 et fmap a été introduit. La raison de ce changement était pédagogiques; lors de l'enseignement de Haskell pour les débutants de la très général type de carte messages d'erreur les plus difficiles à comprendre. À mon avis, ce n'était pas la bonne façon de résoudre le problème.
-- Quel est le point de la carte en Haskell, quand il y a fmap?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.