Создание функций на основе перечислений

Я только начал изучать Haskell. Думаю, у меня есть основы, но я хочу убедиться, что заставляю себя думать и функционально.

data Dir = Right | Left | Front | Back | Up | Down deriving (Show, Eq, Enum)
inv Right = Left
inv Front = Back
inv Up = Down

В общем, суть того, что я пытаюсь сделать, - это создать функцию для сопоставления между каждый «Реж» и его противоположность / инв. Я знаю, что могу легко продолжить это еще 3 строчки, но не могу не задаться вопросом, есть ли способ получше. Я пробовал добавить:

inv a = b where inv b = a

, но, видимо, вы не можете этого сделать. Итак, мой вопрос: есть ли способ сгенерировать остальные инверсии или лучший способ создать эту функцию?

Большое спасибо.

13
задан Don Stewart 6 June 2011 в 01:55
поделиться