fak*_*ake 1 monads haskell applicative
我找不到我在哪里看到的内容,但在reddit讨论的某个地方发现了以下do语句中的以下语法:
do
case (<- fooM) of
Foo x -> ..
...
Run Code Online (Sandbox Code Playgroud)
而不是通常的
do
foo <- fooM
case foo of
Foo x -> ..
...
Run Code Online (Sandbox Code Playgroud)
这将是非常有用的,但是它似乎没有工作(没有语言扩展),我想知道这是否只是帖子作者的速记形式,或者我是否缺少语言扩展。
请注意,我了解例如该语法是模棱两可的
(`execState` 0) $ do
return $ (<- put 3) <> (<- put 4) <> (<- put 5)
Run Code Online (Sandbox Code Playgroud)
我们可能会得到3、4或5,但是可能会有一些语义可以减轻这种情况。
sar*_*ara 11
您可以在这里使用LambdaCase!
{-# LANGUAGE LambdaCase #-}
doStuff = do
fooM >>= \case
Foo x -> ...
Run Code Online (Sandbox Code Playgroud)