我最近有幸学习了一些Idris,我发现非常方便的一件事是!-notation,它让我缩短了do块中的monadic代码,比如
a' <- a
b' <- b
c' <- c
someFunction a' b' c'
Run Code Online (Sandbox Code Playgroud)
更好的
someFunction !a !b !c
Run Code Online (Sandbox Code Playgroud)
现在,当我在Haskell中编写代码时,我正在寻找类似的东西,但据我所知它不存在(并且爆炸字符显然已经用于严格的模式匹配).有没有办法避免在do块中有一堆琐碎的左箭头?也许是一个扩展,它会添加一个重写规则,或者是什么呢?
chi*_*chi 20
因为每个monad都是 Applicative(GHC> = 7.10)我们可以写
someFunction <$> a <*> b <*> c
Run Code Online (Sandbox Code Playgroud)
请注意,如果someFunction返回类型的monadic值,则返回m T上面的内容m (m T),这可能不是我们想要的(正如@pigworker在下面指出的那样).然而join,我们可以将两层结合在一起:
join $ someFunction <$> a <*> b <*> c
Run Code Online (Sandbox Code Playgroud)