组合两个函数f和g的Haskell符号,其中g有多个参数



我经常发现我想要组合两个函数f和g,但是g有多个参数。Haskell是否为此提供了一组操作符(我知道我可以自己写,但这似乎很常见,我不想重复Haskell中已经存在的操作符)

就是像

这样的东西
(.@) = (.)
(.@@) f g x1 x2 = f $ g x1 x2
(.@@@) f g x1 x2 x3 = f $ g x1 x2 x3
(.@@@@) f g x1 x2 x3 x4 = f $ g x1 x2 x3 x4
...

不超过合理数量的参数

我知道你得到了你想要的答案,但我想指出的是,这些组合子有以下可爱的实现:

(.:)   = (.) . (.)
(.:.)  = (.) . (.) . (.)
(.::)  = (.) . (.) . (.) . (.)
(.::.) = (.) . (.) . (.) . (.) . (.)

,如果您只需要完全应用它们:

f .: g   = (f .) . g
f .:. g  = ((f .) .) . g
f .:: g  = (((f .) .) .) . g
f .::. g = ((((f .) .) .) .) . g

直接使用这些表达式而不定义操作符似乎没有那么可怕。至少第一个,(f .) . g,对我来说似乎足够可读。

从@ bheklir的评论,我正在寻找的答案是在组合库:http://hackage.haskell.org/package/composition-1.0.1.0/docs/Data-Composition.html

功能 (.:), (.:.), (.::), (.::.) 等做什么我想

相关内容

  • 没有找到相关文章

最新更新