map
existe para simplificar as operações em listas e por razões históricas (veja Qual é o objetivo do mapa em Haskell, quando há fmap? ).
Você pode perguntar por que precisamos de uma função de mapa separada. Por que não simplesmente acabar com a função de mapa somente de lista atual e renomear fmap para map em vez disso? Bem, essa é uma boa pergunta. O argumento usual é que alguém que acabou de aprender Haskell, ao usar o mapa incorretamente, prefere ver um erro sobre listas do que sobre Functors.
- Typeclassopedia , página 20
fmap
e liftM
existem porque as mônadas não eram automaticamente functores em Haskell:
O fato de termos fmap e liftM é uma consequência infeliz do fato de que a classe do tipo Monad não requer uma instância de Functor, embora matematicamente falando, toda mônada é um functor. No entanto, fmap e liftM são essencialmente intercambiáveis, uma vez que é um bug (em um sentido social e não técnico) para qualquer tipo ser uma instância de Monad sem também ser uma instância de Functor.
- Typeclassopedia , página 33
Editar: história de agustuss map
e fmap
:
Não é assim que acontece. O que aconteceu foi que o tipo de mapa foi generalizado para cobrir o Functor em Haskell 1.3. Ou seja, em Haskell 1.3 fmap era chamado de mapa. Esta mudança foi então revertida no Haskell 1.4 e o fmap foi introduzido. A razão para essa mudança foi pedagógica; ao ensinar Haskell para iniciantes, o tipo muito geral de mapa tornava as mensagens de erro mais difíceis de entender. Na minha opinião, essa não era a maneira certa de resolver o problema.
- Qual é o ponto do mapa em Haskell, quando há fmap?