Задача из #A6RBIH сводится к следующему вопросу: можно ли заставить компилятор преобразовывать ; в `>>=`, а не `>>`? Тогда в do notation можно будет записывать такой себе dataflow: do { return 1; return . (+1); print }. Сейчас это можно сделать, только введя явные названия для аргументов: do { s <- return 1; s' <- return (s+1); print s' }
С обычной записью, конечно же, никаких проблем: return 1 >>= return . (+1) >>= print