計算機科学のブログ

型の紹介 - 型クラスを使用する - Ordを実装する - パターンの記述

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

コード

sample3.hs

main :: IO ()
main = do
  print $ compare S5 S4
  print $ compare S4 S4
  print $ compare S4 S3
  print $ compare S3 S4
  print $ compare S3 S3

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

instance Eq SixSideDie where
  (==) :: SixSideDie -> SixSideDie -> Bool
  (==) S1 S1 = True 
  (==) S2 S2 = True 
  (==) S3 S3 = True 
  (==) S4 S4 = True 
  (==) S5 S5 = True 
  (==) S6 S6 = True 
  (==) _ _ = False


instance Ord SixSideDie where
  compare :: SixSideDie -> SixSideDie -> Ordering
  compare S6 S6 = EQ
  compare S6 _ = GT
  compare _ S6 = LT
  compare S5 S5 = EQ
  compare S5 _ = GT
  compare _ S5 = LT
  compare S4 S4 = EQ
  compare S4 _ = GT
  compare _ S4 = LT

入出力結果(Terminal, Zsh)

% runghc sample3.hs
GT
EQ
GT
LT
sample3.hs: sample3.hs:(24,3)-(32,19): Non-exhaustive patterns in function compare

%