有没有办法对monad中存储的值执行一个案例,而不必将名称绑定到它?
即而不是这样做:
c <- getChar
case c of
...
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点:
mcase getChar of
...
Run Code Online (Sandbox Code Playgroud)
或者,如果case语句可以部分应用,那将是很好的:
case of
...
Run Code Online (Sandbox Code Playgroud)
会不情愿地:
\a -> case a of
...
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
getChar >>= case of
...
Run Code Online (Sandbox Code Playgroud)
Emm*_*ery 14
现在,FUZxxl提到的提案自从7.6.1开始在GHC中实施LambdaCase
.
现在你可以这样做:
{-# LANGUAGE LambdaCase #-}
getChar >>= \case
...
Run Code Online (Sandbox Code Playgroud)
请注意关键字\
之前case
以及of
在这种情况下不存在的事实.
不,不是真的,但你可以将案例移到另一个函数中并将其应用于monadic动作的结果.
f x = case x of ...
main = do
f <$> getChar
Run Code Online (Sandbox Code Playgroud)
或者,以下是可能的:
getChar >>= \x -> case x of ...
Run Code Online (Sandbox Code Playgroud)