更好的方式在Haskell中定义一个枚举

我想要一个数据类型来表示一个有限的整数集合,可以通过特定的名称来寻址。我认为最好的方法是使用Enum。然而,有一个小问题。我知道定义一个枚举的唯一方式是这样:

data MyDataType = Foo | Bar | Baz

instance Enum MyDataType 
 toEnum 0 = Foo
 toEnum 1 = Bar
 toEnum 2 = Baz

 fromEnum Foo = 0
 fromEnum Bar = 1
 fromEnum Baz = 2 

注意,我必须重复相同的对两次 – 一次定义整数到枚举映射,另一次定义枚举到整数映射。有没有办法避免这种重复?

谢谢。

instance Enum MyDataType where
    fromEnum = fromJust . flip lookup table
    toEnum = fromJust . flip lookup (map swap table)
table = [(Foo, 0), (Bar, 1), (Baz, 2)]
http://stackoverflow.com/questions/6000511/better-way-to-define-an-enum-in-haskell

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:更好的方式在Haskell中定义一个枚举