Sto provando a creare l'anello Z/n (come la normale aritmetica, ma modulo qualche intero). Un'istanza di esempio è Z4:Costruttore dati nel modello haskell
instance Additive.C Z4 where
zero = Z4 0
(Z4 x) + (Z4 y) = Z4 $ (x + y) `mod` 4
E così via per l'anello. Mi piacerebbe essere in grado di generare rapidamente queste cose e penso che il modo per farlo sia con il modello haskell. Idealmente mi piacerebbe solo andare $(makeZ 4)
e spingerlo fuori il codice per Z4
come ho definito sopra.
Sto avendo un sacco di problemi con questo però. Quando faccio genData n = [d| data $n = $n Integer]
ottengo "errore di analisi nella dichiarazione di dati/newtype". Funziona anche se non utilizzo variabili: [d| data Z5 = Z5 Integer |]
, il che significa che sto facendo qualcosa di strano con le variabili. Non sono sicuro di cosa però; Ho provato a costruirli tramite newName e non sembrava funzionare.
Qualcuno può aiutarmi con quello che sta succedendo qui?
Non sono un mago di Haskell modello, ma sto scommettendo le persone che vorranno vedere il codice Template Haskell. –