練習問題 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
をインポートしてしまうと独自のインスタンス定義ができない.