Я хочу, чтобы тип данных представлял конечный набор целых чисел, которые могут быть адресованы конкретными именами. Я считаю, что лучший способ сделать это - использовать Enum
. Однако есть одна небольшая проблема. Единственный способ, которым я знаю для определения 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
Обратите внимание, что я должен повторять одну пару два раза - один раз при определении отображения целочисленного числа и другого времени при определении отображения перечисления в целое. Есть ли способ избежать этого повторения?
Спасибо.