Я не могу найти, где я видел это, но я нашел где-то в обсуждении 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, но может быть семантика, чтобы смягчить это.