我在Haskell中有一个自定义数据类型来表示交通灯
data TrafficLight = Red | Yellow | Green
我正在尝试实现Enum的功能使用实例块的类型类:
instance Enum TrafficLight where
succ Green = Yellow
succ Yellow = Red
succ Red = Green
pred Green = Red
pred Yellow = Green
pred Red = Yellow
pred和suc按预期工作,但是我也想实现范围函数,这样我就可以调用
ghci> [Green .. Red]
并返回
[Green,Yellow,Red]
我理解这个功能似乎来自enumFromEnum中的函数但是我不完全确定如何像我实现pred和succ那样实现它。
haskell.org上对enumFrom
的描述给出了以下可能的定义enumFrom n = n : enumFrom (succ n)
。