元组函数的N-Ary版本

时间:2011-02-22 22:46:50

标签: haskell

是否有一个库具有n-ary版本的元组函数,如first***等,通过Template Haskell(或使用其他方法)。

理想情况下我想说

$(select 3 [0, 1])

我们制作lambda

\(x, y, z) -> (x, y)

和函数的通用***

$(tapply 3 [(0, "f"), (1, "g"), (2, "h")])

会使lambda

\f g h (x, y, z) -> (f x, g y, h z)

其他n-ary函数也不错,但这些是我目前需要的两个。

3 个答案:

答案 0 :(得分:3)

使用Template Haskell实现此目的是an example

答案 1 :(得分:2)

tuple库提供了许多这类功能。

答案 2 :(得分:1)

一般来说,我会说你想要使用正确的ADT,以及像bifunctor这样的库,或者,如果它比这更复杂,则使用正确的generics库。 (该链接可能更新!如果有疑问,并且您没有特别高的性能要求,只需使用SYB