haskell - monadico - caso de valor monádico
monada programacion (3)
La propuesta mencionada por FUZxxl ahora se implementó en GHC desde la LambdaCase
7.6.1, se llama LambdaCase
.
Ahora puedes hacer:
{-# LANGUAGE LambdaCase #-}
getChar >>= /case
...
Tenga en cuenta la /
antes de la palabra clave del case
y el hecho de que no hay ninguna en ese caso.
¿Hay una manera de realizar un caso en el valor almacenado dentro de una mónada sin tener que vincular un nombre a ella?
es decir, en lugar de hacer esto:
c <- getChar
case c of
...
Hay alguna forma de hacer esto:
mcase getChar of
...
Alternativamente, sería bueno si la declaración del caso pudiera aplicarse parcialmente, así:
case of
...
sería desugared a
/a -> case a of
...
Para que pudieras hacer esto:
getChar >>= case of
...
La respuesta es no. En Haskell 98, no puede usar una declaración de caso sin usar un nombre dentro de ella. Pero hay una proposal para agregar soporte para casos-lambdas. La sintaxis que proponen es la misma que tú propones.
No, no realmente, pero puede mover el caso a otra función y aplicarlo al resultado de una acción monádica.
f x = case x of ...
main = do
f <$> getChar
Alternativamente, lo siguiente es posible:
getChar >>= /x -> case x of ...