我想知道是否有办法让GHC从表单的数据类型自动派生积分实例:
data = A | B | C | D
那么从积分A = 0,从积分B = 1等?
运用
data MyType = A | B | C | D deriving (Show, Eq, Ord, Enum, Real, Integral)
产生错误
无法创建'Integral MyType'的派生实例:'Integral'不是可派生类
在'MyType'的数据声明中
(即使扩展名为GeneralizedNewtypeDeriving)
如果你想要的是一个函数,使得f A == 0
,f B == 1
等等,你可以使用fromEnum :: Enum a => a -> Int
.
该Integral
类型类是你实际上可以加,减种,除...在你的情况,还没有一个非常明智地执行这些东西.如果你想把它们作为算术模数实现1 + fromEnum maxBound
......好吧,我不建议那样做,如果你Enum
代表的只是那些数字,如果它们有,那么modular-arithmetic
包已经实现了你需要的东西.