Esto debería ser fácil para los profesionales Haskell ..¿Qué es similar a fmap para los valores monádicos?
Tengo un valor Tal vez,
> let a = Just 5
puedo imprimirlo:
> print a
Just 5
Pero quiero aplicar un I/O acción al interior de Maybe. La única forma que he descubierto la manera de hacer esto sin usar case
es:
> maybe (return()) print a
5
Sin embargo, esto parece demasiado prolijo. En primer lugar, return()
es específico para la mónada de E/S, así que tengo que encontrar un "cero" diferente para cada mónada. Quiero probar este truco.
Quiero asignar un mapa de una E/S Acción (imprimir) en el valor Maybe e imprimirlo si es Just
, o no hacer nada si es Nothing
. Quiero expresarlo de alguna manera como,
> fmap print a
Pero esto no funciona ya print
es una acción IO:
No instance for (Show (IO()))
Probé Applicative
, pero no puedo averiguar si hay una manera de expresarlo:
> print <$> a
No instance for (Show (IO()))
Obviamente estoy un poco confundido acerca de mónadas-dentro-mónadas .. puede alguien decirme la manera correcta de manera más sucinta expresan esto?
Gracias.
Btw 'print <$> a' es exactamente lo mismo que' fmap print a', –