通过枚举创建函数

rcb*_*nan 13 haskell algebraic-data-types

我刚开始学习Haskell.我认为我已经掌握了基础知识,但我想确保我实际上也强迫自己在功能上思考.

data Dir = Right | Left | Front | Back | Up | Down deriving (Show, Eq, Enum)
inv Right = Left
inv Front = Back
inv Up = Down
Run Code Online (Sandbox Code Playgroud)

无论如何,我想要做的就是创建一个函数来映射每个"Dir"和它的对面/ inv.我知道我可以轻松地继续这3行,但我不禁想知道是否有更好的方法.我尝试添加:

inv a = b where inv b = a
Run Code Online (Sandbox Code Playgroud)

但显然你不能这样做.所以我的问题是:是否有一种方法可以生成其余的反转或者更好的创建此函数的方法?

非常感谢.

sig*_*fpe 18

如果之间的配对UpDown等是一个重要的功能,那么也许这方面的知识,应在类型中得到反映.

data Axis = UpDown | LeftRight | FrontBack
data Sign = Positive | Negative
data Dir = Dir Axis Sign
Run Code Online (Sandbox Code Playgroud)

inv 现在很容易.