Haskell - 从类型构造函数的枚举中自动导出Integral

时间:2015-12-29 17:52:48

标签: haskell types

我想知道是否有办法让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'的派生实例:    “积分”不是一个可导出的类

     

在“MyType”

的数据声明中

(即使扩展名为GeneralizedNewtypeDeriving)

1 个答案:

答案 0 :(得分:6)

如果你想要的只是f A == 0f B == 1等功能,你可以使用fromEnum :: Enum a => a -> Int

Integral类型类适用于您可以实际添加,减去,除以...的类型。在您的情况下,没有一个非常合理的实现这些东西。如果你想将它们作为算术模1 + fromEnum maxBound实现......好吧,如果你的Enum代表那些数字,我不建议这样做,如果它们是这样,modular-arithmetic包已经实现了你需要的东西。