fork download
  1. import Data.List (sort)
  2.  
  3. data DanKyuRank = Kyu Int | Dan Int deriving ( Eq, Show )
  4.  
  5. instance Ord DanKyuRank where
  6. compare (Dan _) (Kyu _) = GT
  7. compare (Kyu _) (Dan _) = LT
  8. compare (Dan a) (Dan b) = compare a b
  9. compare (Kyu a) (Kyu b) = compare b a
  10.  
  11. main = do
  12. print $ compare (Dan 1) (Dan 2)
  13. print $ compare (Kyu 1) (Kyu 2)
  14. print $ compare (Dan 1) (Kyu 2)
  15. print $ Dan 1 /= Dan 1
  16. print $ Kyu 1 /= Kyu 1
  17. print $ Dan 1 /= Kyu 1
  18. let xs = [Dan 5, Dan 9, Kyu 4, Kyu 1, Dan 2, Kyu 6, Dan 1]
  19. print $ xs
  20. print $ sort xs
  21.  
Success #stdin #stdout 0s 4444KB
stdin
Standard input is empty
stdout
LT
GT
GT
False
False
True
[Dan 5,Dan 9,Kyu 4,Kyu 1,Dan 2,Kyu 6,Dan 1]
[Kyu 6,Kyu 4,Kyu 1,Dan 1,Dan 2,Dan 5,Dan 9]