リング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を介してそれらを構築しようとしましたが、それも機能しなかったようです。
誰かがここで何が起こっているのか私を助けることができますか?