我最近有幸学习了一些 Idris,我发现非常方便的一件事是!-符号 https://idris2.readthedocs.io/en/latest/tutorial/interfaces.html?highlight=do%20notation#notation,这让我可以缩短 do 块内的单子代码,例如
a' <- a
b' <- b
c' <- c
someFunction a' b' c'
到更好的
someFunction !a !b !c
现在,当我在 Haskell 中编写代码时,我正在寻找类似的东西,但据我所知它不存在(并且 bang 字符显然已经用于严格的模式匹配)。有什么方法可以避免在 do 块内出现一堆琐碎的左箭头吗?也许是添加重写规则的扩展,或者类似的东西?
由于每个单子都是一个Applicative
(GHC >= 7.10)我们可以写
someFunction <$> a <*> b <*> c
请注意,如果someFunction
返回类型的一元值m T
,上面将返回m (m T)
,这可能不是我们想要的(正如@pigworker 在下面指出的那样)。然而我们可以join
两层在一起:
join $ someFunction <$> a <*> b <*> c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)