【发布时间】:2015-12-30 04:23:22
【问题描述】:
我想知道是否有办法让 GHC 自动从表单的数据类型派生积分实例:
data = A | B | C | D
所以fromIntegral A = 0,fromIntegral B = 1,等等?
使用
data MyType = A | B | C | D deriving (Show, Eq, Ord, Enum, Real, Integral)
产生错误
无法创建“Integral MyType”的派生实例: “积分”不是可派生类
在“MyType”的数据声明中
(即使使用扩展 GeneralizedNewtypeDeriving)
【问题讨论】:
-
看看here
-
是的,我有。它说没有从任何类型派生的通用解决方案,并且在 newType 的情况下,您可以使用 GeneralizedNewtypeDeriving 扩展。但它并不是说 GHC 中没有允许自动派生 A|B|C 形式的类型的扩展。
-
新类型包装器方法有什么问题?
-
可以
fromEnum :: Enum a => a -> Int解决您的问题