Конструктор данных в шаблоне haskell

Я пытаюсь создать кольцо 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] Я получаю «ошибку синтаксического анализа в объявлении data / newtype». Это действительно работает, если я не использую переменные: [d | data Z5 = Z5 Integer |] , что должно означать, что я делаю что-то странное с переменными. Я не уверен, что именно; Я попытался создать их через newName, но это тоже не сработало.

Кто-нибудь может мне помочь с тем, что здесь происходит?

11
задан Xodarap 27 September 2011 в 01:00
поделиться