关于一元价值的案例

时间:2011-03-22 17:39:08

标签: haskell

有没有办法对monad中存储的值执行一个案例,而不必将名称绑定到它?

即。而不是这样做:

c <- getChar
case c of
  ...

有没有办法做到这一点:

mcase getChar of
  ...

或者,如果可以部分应用case语句,那将是很好的:

case of
  ...

将会黯然失色:

\a -> case a of
  ...

所以你可以这样做:

getChar >>= case of
              ...

3 个答案:

答案 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的支持。他们提出的语法也与你提出的相同。