Próbuję utworzyć pierścień Z/n (jak normalna arytmetyczna, ale modulo jakaś liczba całkowita). Przykładowym przykładem jest Z4:Konstruktor danych w szablonie haskell
instance Additive.C Z4 where
zero = Z4 0
(Z4 x) + (Z4 y) = Z4 $ (x + y) `mod` 4
I tak dalej za pierścionek. Chciałbym móc szybko wygenerować te rzeczy i myślę, że sposobem na to jest szablon haskell. Idealnie chciałbym po prostu przejść $(makeZ 4)
i wypluć kod dla Z4
, jak to zdefiniowałem powyżej.
Mam jednak wiele problemów z tym. Kiedy wykonuję genData n = [d| data $n = $n Integer]
pojawia się "błąd parsowania w deklaracji danych/typów". Działa to, jeśli nie używam zmiennych: [d| data Z5 = Z5 Integer |]
, co musi oznaczać, że robię coś dziwnego ze zmiennymi. Nie jestem pewien co; Próbowałem konstruować je za pomocą newName i to też nie działa.
Czy ktoś może mi pomóc z tym, co się tutaj dzieje?
Nie jestem kretynem szablonów Haskella, ale założę się, że ludzie, którzy będą chcieli, zobaczą twój szablon Haskella. –