Estoy tratando de crear el anillo Z/n (como la aritmética normal, pero modulo entero). Una instancia de ejemplo es Z4:Constructor de datos en la plantilla haskell
instance Additive.C Z4 where
zero = Z4 0
(Z4 x) + (Z4 y) = Z4 $ (x + y) `mod` 4
Y así sucesivamente para el anillo. Me gustaría poder generar estas cosas rápidamente, y creo que la forma de hacerlo es con la plantilla haskell. Idealmente, me gustaría simplemente ir al $(makeZ 4)
y hacer que escupe el código de Z4
como lo definí anteriormente.
Sin embargo, estoy teniendo muchos problemas con esto. Cuando lo hago genData n = [d| data $n = $n Integer]
obtengo "error de análisis en la declaración data/newtype". Funciona si no uso variables: [d| data Z5 = Z5 Integer |]
, lo que significa que estoy haciendo algo extraño con las variables. No estoy seguro de qué; Traté de construirlos a través de newName y eso tampoco pareció funcionar.
¿Alguien me puede ayudar con lo que está pasando aquí?
No soy un asistente de Template Haskell, pero apuesto a que las personas que quieran ver el código de su plantilla Haskell. –