开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜