Я пытаюсь создать кольцо Z/n (как обычная арифметика, но по модулю некоторого целого числа). Пример экземпляра Z4:
instance Additive.C Z4 where
zero = Z4 0
(Z4 x) + (Z4 y) = Z4 $ (x + y) `mod` 4
И так далее по кольцу. Я хотел бы иметь возможность быстро генерировать эти вещи, и я думаю, что это можно сделать с помощью шаблона haskell. В идеале я хотел бы просто перейти к $(makeZ 4)
и выдать код для Z4
, как я определил выше.
Хотя у меня с этим большие проблемы. Когда я делаю genData n = [d| data $n = $n Integer]
, я получаю «ошибку синтаксического анализа в объявлении данных/нового типа». Это работает, если я не использую переменные: [d| data Z5 = Z5 Integer |]
, что должно означать, что я делаю что-то странное с переменными. Я не уверен, что хотя; Я попытался создать их с помощью newName, и это тоже не сработало.
Может ли кто-нибудь помочь мне с тем, что здесь происходит?