計算機科学のブログ

型の紹介 型クラスを使用する Ordを実装する compare関数

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT2(型の紹介)、LESSON14(型クラスを使用する)、14.5(Ordを実装する)、クイックチェック14-3の解答を求めてみる。

コード

data SixSidedDice = S1 | S2 | S3 | S4 | S5 | S6

instance Eq SixSidedDice where
  (==) S1 S1 = True
  (==) S2 S2 = True
  (==) S3 S3 = True
  (==) S4 S4 = True
  (==) S5 S5 = True
  (==) S6 S6 = True
  (==) _ _ = False

instance Ord SixSidedDice where
  compare S6 S4 = GT
  compare S5 S4 = GT
  compare S4 S4 = EQ
  compare S4 _ = GT

main :: IO ()
main = do
  mapM_
    print
    [ S4 == S5,
      S4 < S5,
      S4 > S5,
      S4 == S4,
      S4 < S4,
      S4 > S4,
      S4 == S3,
      S4 < S3,
      S4 > S3
    ]

入出力結果(Terminal, Zsh)

% runghc sample03.hs
False
False
True
True
False
False
False
False
True
%