型の紹介 - 型クラスを使用する - 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
%