Necesito una función que toma un número arbitrario de argumentos (Todos del mismo tipo), hace algo con ellos y luego devuelve un resultado. Una lista de argumentos es impracticable en mi caso específico.¿Cómo crear una función haskell polyvariadic?
Al examinar las librerías de haskell, vi que la función printf
(del módulo Text.Printf
) usa un truco similar. Desafortunadamente, no pude entender esa magia mirando la fuente.
¿Alguien puede explicar cómo lograr esto, o al menos alguna página web/papel/lo que sea, donde podría encontrar una buena descripción para esto?
motivación:
La razón que necesito esto es realmente muy simple. Para la escuela (clase de informática), debemos escribir un módulo que sea capaz de "grabar" una expresión matemática, expresarla como una cadena (mediante la escritura de una instancia de Num/Real/etc. para un tipo de datos propio) y realizar varias operaciones en él.
Este tipo de datos contiene un constructor especial para una variable, que puede ser reemplazado por un valor o lo que sea por una función especificada. Uno de los objetivos es escribir una función, que toma dicha expresión con un número de variables (pares del tipo (Char,Rational)
) y calcula el resultado de la expresión. Deberíamos ver cómo expresar mejor el objetivo de la función. (Mi idea: la función devuelve otra función que toma exactamente tantos argumentos como vars que están definidos en la función - parece ser imposible).
Sería interesante ver su caso de uso para esto. – ShiDoiSi
Solo un proyecto para la escuela. Editaré la pregunta y publicaré el propósito. – fuz
Puede considerar otros enfoques: una función que toma una lista: evalúa :: [(Char, Rational)] -> Expr -> Racional; una función que toma una función: (Char -> Racional) -> Expr -> Racional; una función que toma un mapa: Data.Map.Map Char Rational -> Expr -> Rational. – sdcvvc