2011-02-22 14 views
5

¿Hay una biblioteca que tenga versiones n-arias de funciones de tupla como first, ***, etc., a través de Template Haskell (o utilizando algún otro método).N-Ary Versiones de funciones Tuple

Idealmente me gustaría poder decir

$(select 3 [0, 1]) 

cual hacemos la lambda

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

y por un genérico *** para funciones

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

que haría que el lambda

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

Otras funciones n-ary también serían agradables, pero esas son las dos que necesito actualmente.

Respuesta

2

La biblioteca tuple proporciona muchas de estas funciones.

1

En general, diría que desea utilizar un ADT adecuado en su lugar, y bibliotecas como bifunctor, o, si se vuelve más complejo que eso, una biblioteca adecuada generics. (Ese enlace podría estar más actualizado ... si tiene dudas, y no tiene requisitos de rendimiento especialmente altos, solo use SYB)