Estoy usando GHCi (versión 6.12.3) para jugar un poco con Haskell. Recientemente leí acerca de funtores y funtores aplicativos pensé que si no podías hacer algo similar al <*>
de los funtores aplicativos se implementaría solo con las primitivas del functor. Después de pensarlo se me ocurrió fmap fmap
que tendría un (casi) tipo ideal deHaskell - fmap fmap no funciona
Functor f => f (a -> b) -> f (f a -> f b)
o más genéricamente
(Functor f1, Functor f2) => f1 (a -> b) -> f1 (f2 a -> f2 b)
Probé
let q = fmap fmap
Tengo el siguiente error
<interactive>:1:8:
Ambiguous type variable `f1' in the constraint:
`Functor f1' arising from a use of `fmap' at <interactive>:1:8-16
Probable fix: add a type signature that fixes these type variable(s)
<interactive>:1:13:
Ambiguous type variable `f' in the constraint:
`Functor f' arising from a use of `fmap' at <interactive>:1:13-16
Probable fix: add a type signature that fixes these type variable(s)
Escribir la firma del tipo anterior como se sugirió no ayudó. Lo más loco es cuando escribí :t fmap fmap
Obtuve un tipo equivalente al anterior.
¿Qué estoy haciendo mal? ¿Por qué fmap fmap
da un error de tipo aunque GHCi encuentra un tipo para él?
Parece ser la restricción del monomofismo porque tu alma funciona. Gracias. Pero, ¿por qué no funcionó cuando especifiqué el tipo? – Mafi