型の紹介 型クラスを使用する Enumクラス、OrdとEqの 手動での定義、fromEnum関数
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT2(型の紹介)、LESSON 14(型クラスを使用する)、14.10(練習問題)Q14-1の解答を求めてみる。
コード
data MyInt = Zero | One | Two | Three | Four | Five deriving (Enum)
instance Eq MyInt where
(==) a b = fromEnum a == fromEnum b
instance Ord MyInt where
compare a b = compare (fromEnum a) (fromEnum b)
入出力結果(Terminal, Zsh)
% ghci
GHCi, version 8.10.5: https://www.haskell.org/ghc/ :? for help
macro 'doc' overwrites builtin command. Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /.../.ghc/ghci.conf
Prelude
λ> :load sample1
[1 of 1] Compiling Main ( sample1.hs, interpreted )
Ok, one module loaded.
(0.04 secs,)
*Main
λ> Zero == Zero
True
it :: Bool
(0.04 secs, 65,232 bytes)
*Main
λ> Zero /= Zero
False
it :: Bool
(0.00 secs, 62,920 bytes)
*Main
λ> Zero == One
False
it :: Bool
(0.00 secs, 62,528 bytes)
*Main
λ> Two < Four
True
it :: Bool
(0.00 secs, 61,952 bytes)
*Main
λ> Two > Four
False
it :: Bool
(0.00 secs, 62,544 bytes)
*Main
λ> Two <= Four
True
it :: Bool
(0.00 secs, 61,848 bytes)
*Main
λ> compare Two Four
LT
it :: Ordering
(0.00 secs, 60,584 bytes)
*Main
λ> :quit
Leaving GHCi.
%