計算機科学のブログ

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