我正在尝试创建环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]
我得到“数据/ newtype声明中的解析错误”。如果我不使用变量,它确实有效: [d| data Z5 = Z5 Integer |]
,这必然意味着我正在做一些奇怪的变量。我不确定是什么;我尝试通过newName构建它们,但似乎也没有用。
任何人都可以帮我解决这里发生的事情吗?