我认为以这种方式编写代码是多余的。无论类型构造器是什么,返回值都相同。有没有办法一次写一次返回值?
data End = Leftend (Int,Int) | Rightend (Int, Int)
deriving (Eq, Ord, Show)
cmp:: End->End->Ordering
cmp (Leftend (l, h1)) (Rightend (r,h2))
| l < r = LT
| l == r = EQ
| l > r = GT
cmp (Leftend (l, h1)) (Leftend (r,h2))
| l < r = LT
| l == r = EQ
| l > r = GT
cmp (Rightend (l, h1)) (Rightend (r,h2))
| l < r = LT
| l == r = EQ
| l > r = GT
cmp (Rightend (l, h1)) (Leftend (r,h2))
| l < r = LT
| l == r = EQ
| l > r = GT
我猜...
我不确定这是否是您要找的答案。但是我会做的就是这样。
我更喜欢Ocaml之类的东西,其中类型系统可以让您做一些神奇的事情,并且我假设您正在寻找的解决方案。