【发布时间】:2012-07-27 19:15:43
【问题描述】:
我正在努力寻找一种方法来做这样的事情:
(head, last) `someFunction` [1, 2, 3]
生成元组 (1, 3) 作为输出。
它在理论上似乎类似于应用函子,但有点倒退。我猜有一个类似的功能可以做到这一点(或某种方法),但我似乎无法找到它/弄明白。
我尝试定义这样的函数:
fmap' :: ((a -> b), (a -> b)) -> [a] -> (b, b)
fmap' (f1, f2) xs = (f1 xs, f2 xs)
但 GHC 不会真正编译它。
任何帮助都会很棒;谢谢!
编辑(一年后!):
我的fmap' 无法编译,因为类型签名错误。显然有更好的方法来做我正在做的事情,但我的 fmap' 的类型应该是:
fmap' :: ((a -> b), (a -> b)) -> a -> (b, b)
在这种情况下,它编译并运行得很好。
【问题讨论】:
-
原来
someFunction是uncurry (liftM2 (,)),根据pointfree。当然,您可以省略uncurry,而直接使用其余部分:liftM2 (,) head last [1, 2, 3]。
标签: function haskell tuples applicative