Haskell 中带有元组参数的函数组合
有时我有两个形式的函数:
f :: a -> (b1,b2)
h :: b1 -> b2 -> c
并且我需要组合 g。我通过将 h 更改为 h' 来解决这个问题:
h' :: (b1,b2) -> c
您能否向我展示(如果可能的话)一个函数 m,以便:
(h . m . f) == (h' . f)
或处理此类情况的另一种方法。谢谢。
Sometimes I have two functions of the form:
f :: a -> (b1,b2)
h :: b1 -> b2 -> c
and I need the composition g. I solve this by changing h to h':
h' :: (b1,b2) -> c
Can you please show me (if possible) a function m, so that:
(h . m . f) == (h' . f)
Or another way to deal with such situations. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您要做的就是获取一个对柯里化参数
h
进行操作的函数,并将其应用于f
的结果,这是一个元组。这一将两个参数的函数转换为采用一个元组参数的函数的过程称为“uncurrying”。我们有来自 Data.Tuple:所以现在我们可以写:
另一个棘手的思考方式是通过一个应用函子,
来自 Conor McBride 的 Idea,他将其写为:
(|f fst snd|) 。我认为。
What you're looking to do is to take a function that operates on curried arguments,
h
, and apply it to the result off
, which is a tuple. This process, turning a function of two arguments into a function that takes one argument that is a tuple, is called uncurrying. We have, from Data.Tuple:So now we can write:
Another tricky way to think of this is via an applicative functor,
Idea from Conor McBride, who'd write it as:
(|f fst snd|) . f
I think.你想要做的是uncurry
h
。这个函数需要a ->; b-> c
并将其转换为(a, b) -> c
.What you want to do is uncurry
h
. This function takesa -> b -> c
and converts it into(a, b) -> c
.