我经常发现我想要组合两个函数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
功能 (.:), (.:.), (.::), (.::.) 等做什么我想