type SidType = Int
class (Eq a, Ord a) => Sided a where -- Данные имеющие '''SID'''
sid :: a -> SidType
data SympText = SympText {
tSid :: SidType,
text :: String
}
instance Sided SympText where
sid = tSid
instance Eq SympText where
a == b = sid a == sid b
instance Ord SympText where
compare a b = compare (sid a) (sid b)
type Category = Int
data SympCats = SympCats {
cSid :: SidType,
categ :: Category
}
instance Sided SympCats where
sid = cSid
instance Eq SympCats where
a == b = sid a == sid b
instance Ord SympCats where
compare a b = compare (sid a) (sid b)
Здесь видно, что для каждой стркуруры Symp* приходится рисовать совершенно одинаковые определения Eq и Ord.
Можно ли как-то это унифицировать?
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>