私はリングZ/nを作成しようとしています(通常の算術のようですが、整数のモジュロのように)。例はZ4:テンプレートのデータコンストラクタhaskell
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を使ってそれらを構築しようとしましたが、どちらもうまくいかないようです。
ここで何が起こっているのかお手伝いできますか?
私はTemplate Haskellウィザードではありませんが、テンプレートHaskellコードを見たい人には賭けています。 –