Haskell通过枚举限制整数值

时间:2016-05-06 03:36:11

标签: haskell types type-constructor

我想做这样的事情:

data Bit = 0 | 1

但是由于右侧必须是有效的数据构造函数(?),我必须使用像

这样的东西

data Bit = Zero | One

这并不是特别好,因为我想使用实际值0和1.什么是我的难题的最佳解决方案?

1 个答案:

答案 0 :(得分:8)

您可能会喜欢我前一段时间写的这个厚脸皮Num实例:

instance Num Bool where
    (+) = (/=)
    (*) = (&&)
    negate = id
    abs = id
    signum = id
    fromInteger = odd

例如,在ghci:

> (3 + 5) * 6 :: Bool
False

您应该能够使用类似的,经过适当修改的内容来支持data Bit = O | I而不是data Bool = False | True