有时,我需要创建一个将不同的函数映射到两个值,然后将它们组合在一起的函数。不使用lambda怎么做?
我的职能是:
f :: a -> b
g :: c -> d
combine :: b -> d -> e
问题是:如何在不使用lambda的情况下编写
\x y -> combine (f x) (g y)
?
最佳答案
一种可选的无点拼写涉及通过使用curry
,uncurry
和(***)
(来自Control.Arrow
)或bimap
(来自Data.Bifunctor
)将参数作为一对来处理:
GHCi> :t \combine f g -> curry (uncurry combine . (f *** g))
\combine f g -> curry (uncurry combine . (f *** g))
:: (a1 -> b1 -> c) -> (a -> a1) -> (b -> b1) -> a -> b -> c
请注意,与jpath的建议不同,它甚至不比非pointfree版本短。
关于haskell - 将函数应用于haskell中的每个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564737/