map
existe para simplificar las operaciones en listas y por razones históricas (consulte ¿Cuál es el punto de map en Haskell, cuando hay fmap? ).
Puede preguntar por qué necesitamos una función de mapa separada. ¿Por qué no simplemente eliminar la función de mapa actual de solo lista y cambiar el nombre de fmap a mapa en su lugar? Bueno, esa es una buena pregunta. El argumento habitual es que alguien que acaba de aprender Haskell, cuando usa el mapa incorrectamente, preferiría ver un error sobre las listas que sobre los Functors.
- Typeclassopedia , página 20
fmap
y liftM
existen porque las mónadas no eran functors automáticamente en Haskell:
El hecho de que tengamos fmap y liftM es una consecuencia desafortunada del hecho de que la clase de tipo Monad no requiere una instancia de Functor, aunque matemáticamente hablando, cada mónada es un functor. Sin embargo, fmap y liftM son esencialmente intercambiables, ya que es un error (en un sentido social más que técnico) que cualquier tipo sea una instancia de Monad sin ser también una instancia de Functor.
- Typeclassopedia , página 33
Editar: historia de agustuss map
y fmap
:
En realidad, no es así como sucede. Lo que sucedió fue que el tipo de mapa se generalizó para cubrir Functor en Haskell 1.3. Es decir, en Haskell 1.3 fmap se llamaba map. Este cambio luego se revirtió en Haskell 1.4 y se introdujo fmap. La razón de este cambio fue pedagógica; Al enseñar Haskell a principiantes, el tipo de mapa muy general hizo que los mensajes de error fueran más difíciles de entender. En mi opinión, esta no era la forma correcta de resolver el problema.
- ¿Cuál es el punto de map en Haskell, cuando hay fmap?