Как упростить эту функцию в Haskell? - PullRequest
1 голос
/ 09 мая 2020

Я считаю, что писать такой код излишне. Независимо от конструкторов типов все возвращаемые значения одинаковы. Есть ли способ записать возвращаемые значения раз и навсегда?

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

1 Ответ

11 голосов
/ 09 мая 2020

Наверное ...

import Data.Ord

discard :: End -> (Int, Int)
discard (Leftend v) = v
discard (Rightend v) = v

cmp :: End -> End -> Ordering
cmp = comparing (fst . discard)
...