有没有办法对monad中存储的值执行一个案例,而不必将名称绑定到它?
即。而不是这样做:
c <- getChar
case c of
...
有没有办法做到这一点:
mcase getChar of
...
或者,如果可以部分应用case语句,那将是很好的:
case of
...
将会黯然失色:
\a -> case a of
...
所以你可以这样做:
getChar >>= case of
...
答案 0 :(得分:14)
FUZxxl提到的提案现在自7.6.1开始在GHC中实施,它被称为LambdaCase
。
现在你可以做到:
{-# LANGUAGE LambdaCase #-}
getChar >>= \case
...
请注意\
关键字之前的case
以及在这种情况下没有of
这一事实。
答案 1 :(得分:6)
不,不是真的,但你可以将案例移到另一个函数中并将其应用于monadic动作的结果。
f x = case x of ...
main = do
f <$> getChar
另外,以下是可能的:
getChar >>= \x -> case x of ...
答案 2 :(得分:5)
答案是否定的。在Haskell 98中,如果不在其中使用名称,则不能使用case语句。但是有一个proposal用于添加对case-lambdas的支持。他们提出的语法也与你提出的相同。