我找不到我在哪里看到这个但是我在reddit讨论中找到了do块中的以下语法:
do
case (<- fooM) of
Foo x -> ..
...
而不是通常的
do
foo <- fooM
case foo of
Foo x -> ..
...
这将是非常有用的,但它似乎没有工作(没有语言扩展),我想知道它是否只是作者的简写或我是否缺少语言扩展。
请注意,我理解这种语法是不明确的
(`execState` 0) $ do
return $ (<- put 3) <> (<- put 4) <> (<- put 5)
我们可能得到3,4或5但可能有语义来缓解这种情况。
我认为不存在这样的事情;如果它确实如此,我只期望它适用于case
,而不是像你的第二个例子那样在任意表达式中。
我浏览了list of GHC language extensions,但没有一个看起来很有希望。
你可以在这里使用LambdaCase!
{-# LANGUAGE LambdaCase #-}
doStuff = do
fooM >>= \case
Foo x -> ...