練習問題 2.3.3
明示的にインスタンスを与えて,
Bool
を型クラス
Enum
のメンバーとして宣言せよ.
{-# LANGUAGE NoImplicitPrelude #-}
module Exer020303 where
import GHC.Types
not :: Bool -> Bool
not False = True
not True = False
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
x /= y = not (x == y)
class Enum a where
toEnum :: Int -> a
fromEnum :: a -> Int
instance Eq Bool where
False == False = True
True == True = True
_ == _ = False
instance Enum Bool where
fromEnum False = 0
fromEnum True = 1
toEnum 0 = False
toEnum 1 = True
N.B.
Bool
は
Prelude
モジュールで
Enum
クラスのインスタンスとして定義されているので,
Prelude
をインポートしてしまうと独自のインスタンス定義ができない.