case on monadic value
Is there a way to perform a case on the value stored within a mon开发者_高级运维ad without having to bind a name to it?
i.e. instead of doing this:
c <- getChar
case c of
...
Is there a way to do this:
mcase getChar of
...
Alternatively, it would be nice if the case statement could be partially applied so:
case of
...
would be desugared to:
\a -> case a of
...
So you could do this:
getChar >>= case of
...
The proposal mentioned by FUZxxl was now implemented in GHC since 7.6.1, it's called LambdaCase
.
Now you can do:
{-# LANGUAGE LambdaCase #-}
getChar >>= \case
...
Note the \
before the case
keyword and the fact that there is no of
in that case.
No, not really, but you can move the case into another function and apply it to the result of a monadic action.
f x = case x of ...
main = do
f <$> getChar
Alternativly, the following is possible:
getChar >>= \x -> case x of ...
The answer is no. In Haskell 98, you can't use a case statement without using a name inside it. But there is a proposal for adding support for case-lambdas. The syntax they propose is the same you propose too.
精彩评论