如何在Haskell中简化此功能?
How to simplified this function in Haskell?
我觉得这样写代码是多余的。无论类型构造函数是什么,return 值都是相同的。有没有办法一次性写入 return 值?
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
我猜...
import Data.Ord
discard :: End -> (Int, Int)
discard (Leftend v) = v
discard (Rightend v) = v
cmp :: End -> End -> Ordering
cmp = comparing (fst . discard)
我觉得这样写代码是多余的。无论类型构造函数是什么,return 值都是相同的。有没有办法一次性写入 return 值?
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
我猜...
import Data.Ord
discard :: End -> (Int, Int)
discard (Leftend v) = v
discard (Rightend v) = v
cmp :: End -> End -> Ordering
cmp = comparing (fst . discard)