- 自分の書いたものを消したいくらいだが、このメモは自分で書いた、というそれだけの理由で、自分にとっては価値があるので、残すことにする
- 型とクラスを調べるために
- どちらも":info"によって情報を示すことができる(この記事の末尾にそれぞれの表示を示した)
:info Int
:info Enum
- 型とクラスとインスタンス
- 型は互いに関連する値の集合である
- 型の情報は次のように見る(Int型の場合)
:info Int
data Int = ...
...
instance Enum Int ...
instance Eq Int ...
...
-
-
- のように"data Int"とあるように、「"Int"型として値を持たせる」ための「型」であって、
- また、"instance Enum Int..."とあるように「"Int"型はクラスEnum,Eq,...に帰属して、Enum,Eq,...クラス内で定義された関数に引数として渡すことができる」と書かれている
- これが、(データの)型から見た、クラス・インスタンスとの関係
- 他方、クラスは共通のメソッドを提供する型の集合である
- クラスの情報を表示するには次のようにする(Enumクラスの場合)
:info Enum
class Enum a where
succ :: a -> a
...
instance Enum Ordering
instance Enum Int
...
-
-
- のように"class Enum"とあるように「"Enum"クラスで」あって、
- そこには、"succ :: a -> a"とあるように、「succという関数が定義して」あって、
- また、"instance Enum Int"などとあるように、「型、Ordering,Int,...」に、Enumクラスの関数は適用できる」と書かれている
- これが、クラスから見た、(データの)型・インスタンスとの関係
- このように、(データの)型<-インスタンス->クラスという関係にある
- したがって、「(データの)型はそれぞれのクラスとインスタンスで結ばれているかどうか」、という関係にある
- 「(データの)型」は、「クラス(に対応する)集合」の要素かどうか、という関係にある
- その関係を表にしたのが以下
- 型(Preludeにある型〜基本となる型)
- IO
- IOError
- Int
- Integer
- Float
- Double
- Char
- Bool
- Ordering
- Maybe
- () (ユニット)
- [] (List)
- (,) (Tuple)
- 型変数 (aが良く使われる)は、どの型とも決めないけれど、型を扱うときに使われる
- クラス(Preludeにあるクラス〜基本となるクラス)
- Show
- Read
- Eq
- Ord
- Enum
- Num
- Real
- Fractional
- RealFrac
- Floating
- RealFloat
- Integral
- Bounded
- Monad
- MonadPlus
- Functor
- 型とクラスに関する簡単なコメント
- 型
- IO
- 他ととにかく違う。外部とのやりとりはとにかく別立て
- Modad,MonadoPlus,Functorの集合の要素
- IOError
- IO的だけれど、エラーとして判定したり表示したりされる対象として、ある程度、他の型と重なる
- Show,Read,Eqの集合の要素
- Maybeと[](リスト)
- Monad,MonadPlus,Functorの要素、Ordn要素。それ以外のクラスの集合の要素ではない
- Char,Bool,Ordering
- 数値を扱わないけれど、基本的なデータ型
- 数値関係のクラス(Num,Real,Integral,RealFrac,Floating,RealFloat)とIO/Monad系のクラス以外のすべてのクラスの集合に属する
- Int,Integer,Float,Double
- 数値関係のクラス(Num,Realに属する)
- 整数系のInt,IntegerはIntegralクラスの集合に属する
- 非整数系のFloat,DoubleはRealFrac,Floating,RealFloatに属する
- IntのみはBoundedに属する
- タプル("(,)")
- 少し特別。数値系とは限らないのでCharなどと似た帰属性質を持ち、Boundedにも属する。複数要素を束ねたものなので、Enumに属さない
- ()
- クラス
- Show,Read,Eq
- Ord
- 全順序型データに対するクラス
- 数値はもちろん、Char(文字コードは順序あり)やBoolも順序を入れて管理している
- Enum
- 同じ型の値をならべてその上の演算なので、単項の「値関係」の型を対象とする(値をまとめているリスト[]とタプル(,)は対象外、IOErrorとMaybe も対象外)
- Bounded
- 上下の極みを定義する。半順序な型(Ordering型は順序であって半順序ではない)を対象とする。無限大のInteger型や、値の付け方が指数表示だったりするFloat,Doubleには極みがないということで、このクラスに入らない(?)。タプル型("(,)")に極みがある(タプルの要素のそれぞれに極みを与える)のはちょっと後付っぽい感じ。ただしリスト[]に極みがないのは、リストの要素はすべて同じ型なので、その個々のようそに「極み」をつけるのは変だし、リストの要素の型が極みを持ちえない型である可能性もあるから(?)
- Num,Real
- RealFloat,Floating,RealFloat
- Int,Integer
- 整数には整数にしかできないことがあるので、取り立ててクラスにする
- Monad,MonadPlus,Functor
- 圏論的取扱いのクラス
- 圏論的取扱いは、非関数型言語にはない。逆に言えば、非関数型言語でも使われるデータ型は、このクラスに属する必要はない
- HaskellではIOをうまく扱うためにMonadをつかっているので、IO型がこのグループのクラスに属する
- Maybeも型が決められなくならないような「工夫」としてMonad系に帰属する
- リスト[]はHaskellでもろもろをうまく回すための基軸的なものであるので、Monad的な取扱いを実現するために選ばれた、「複数要素ハンドラー」として、このグループのクラスに帰属する
- クラスについて補遺
- 「同じか違うか」Eqクラス
- 「大きいか小さいか(全順序)」Ordクラス
- 「数値は、(自然数)→整数→有理数→実数→複素数、と拡大する」。コンピュータでは無理数は「十分に桁数の多い小数・有理数」として扱うので、本当のいみの実数はない。複素数は数値のペアとして表されるので、ここでは扱わない。群環体的に、除算について閉じているかどうかを考えることで数値に関する型は分類される
- 型とクラス
- 型の:info 表示
- IO,IOErrorは他と違ってdataで始まっていないことからも、「特殊」であることがわかる
Prelude> :info IO
newtype IO a
= GHC.Types.IO (GHC.Prim.State# GHC.Prim.RealWorld
-> (# GHC.Prim.State# GHC.Prim.RealWorld, a #))
instance Monad IO
instance Functor IO
Prelude> :info IOError
type IOError = GHC.IO.Exception.IOException
Prelude> :info Int
data Int = GHC.Types.I# GHC.Prim.Int#
instance Bounded Int
instance Enum Int
instance Eq Int
instance Integral Int
instance Num Int
instance Ord Int
instance Read Int
instance Real Int
instance Show Int
Prelude> :info Integer
data Integer
= integer-gmp:GHC.Integer.Type.S# GHC.Prim.Int#
| integer-gmp:GHC.Integer.Type.J# GHC.Prim.Int# GHC.Prim.ByteArray#
instance Enum Integer
instance Eq Integer
instance Integral Integer
instance Num Integer
instance Ord Integer
instance Read Integer
instance Real Integer
instance Show Integer
Prelude> :info Float
data Float = GHC.Types.F# GHC.Prim.Float#
instance Enum Float
instance Eq Float
instance Floating Float
instance Fractional Float
instance Num Float
instance Ord Float
instance Read Float
instance Real Float
instance RealFloat Float
instance RealFrac Float
instance Show Float
Prelude> :info Float
data Float = GHC.Types.F# GHC.Prim.Float#
instance Enum Float
instance Eq Float
instance Floating Float
instance Fractional Float
instance Num Float
instance Ord Float
instance Read Float
instance Real Float
instance RealFloat Float
instance RealFrac Float
instance Show Float
Prelude> :info Double
data Double = GHC.Types.D# GHC.Prim.Double#
instance Enum Double
instance Eq Double
instance Floating Double
instance Fractional Double
instance Num Double
instance Ord Double
instance Read Double
instance Real Double
instance RealFloat Double
instance RealFrac Double
instance Show Double
Prelude> :info Char
data Char = GHC.Types.C# GHC.Prim.Char#
instance Bounded Char
instance Enum Char
instance Eq Char
instance Ord Char
instance Read Char
instance Show Char
Prelude> :info Bool
data Bool = False | True
instance Bounded Bool
instance Enum Bool
instance Eq Bool
instance Ord Bool
instance Read Bool
instance Show Bool
Prelude> :info Ordering
data Ordering = LT | EQ | GT
instance Bounded Ordering
instance Enum Ordering
instance Eq Ordering
instance Ord Ordering
instance Read Ordering
instance Show Ordering
Prelude> :info Maybe
data Maybe a = Nothing | Just a
instance Eq a => Eq (Maybe a)
instance Monad Maybe
instance Functor Maybe
instance Ord a => Ord (Maybe a)
instance Read a => Read (Maybe a)
instance Show a => Show (Maybe a)
Prelude> :info []
data [] a = [] | a : [a]
instance Eq a => Eq [a]
instance Monad []
instance Functor []
instance Ord a => Ord [a]
instance Read a => Read [a]
instance Show a => Show [a]
Prelude> :info ()
data () = ()
instance Bounded ()
instance Enum ()
instance Eq ()
instance Ord ()
instance Read ()
instance Show ()
Prelude> :info (,)
data (,) a b = (,) a b
instance (Bounded a, Bounded b) => Bounded (a, b)
instance (Eq a, Eq b) => Eq (a, b)
instance (Ord a, Ord b) => Ord (a, b)
instance (Read a, Read b) => Read (a, b)
instance (Show a, Show b) => Show (a, b)
Prelude>
-
- クラスの:info表示
- タプル "(,)"のインスタンスの定義が要素数2,3,...,15のべた書きになっている(Haskellっぽくない)ことがわかる
- "MonadPlus"クラスは…何か変
Prelude> :info Show
class Show a where
showsPrec :: Int -> a -> ShowS
show :: a -> String
showList :: [a] -> ShowS
instance (Show a, Show b) => Show (Either a b)
instance Show a => Show [a]
instance Show Ordering
instance Show a => Show (Maybe a)
instance Show Int
instance Show Char
instance Show Bool
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i,
Show j,
Show k,
Show l,
Show m,
Show n,
Show o) =>
Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i,
Show j,
Show k,
Show l,
Show m,
Show n) =>
Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i,
Show j,
Show k,
Show l,
Show m) =>
Show (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i,
Show j,
Show k,
Show l) =>
Show (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i,
Show j,
Show k) =>
Show (a, b, c, d, e, f, g, h, i, j, k)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i,
Show j) =>
Show (a, b, c, d, e, f, g, h, i, j)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h,
Show i) =>
Show (a, b, c, d, e, f, g, h, i)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g,
Show h) =>
Show (a, b, c, d, e, f, g, h)
instance (Show a,
Show b,
Show c,
Show d,
Show e,
Show f,
Show g) =>
Show (a, b, c, d, e, f, g)
instance (Show a, Show b, Show c, Show d, Show e, Show f) =>
Show (a, b, c, d, e, f)
instance (Show a, Show b, Show c, Show d, Show e) =>
Show (a, b, c, d, e)
instance (Show a, Show b, Show c, Show d) => Show (a, b, c, d)
instance (Show a, Show b, Show c) => Show (a, b, c)
instance (Show a, Show b) => Show (a, b)
instance Show ()
instance Show Integer
instance Show Float
instance Show Double
Prelude> :info Read
class Read a where
readsPrec :: Int -> ReadS a
readList :: ReadS [a]
GHC.Read.readPrec :: Text.ParserCombinators.ReadPrec.ReadPrec a
GHC.Read.readListPrec ::
Text.ParserCombinators.ReadPrec.ReadPrec [a]
instance (Read a, Read b) => Read (Either a b)
instance Read a => Read [a]
instance Read Ordering
instance Read a => Read (Maybe a)
instance Read Integer
instance Read Int
instance Read Float
instance Read Double
instance Read Char
instance Read Bool
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i,
Read j,
Read k,
Read l,
Read m,
Read n,
Read o) =>
Read (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i,
Read j,
Read k,
Read l,
Read m,
Read n) =>
Read (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i,
Read j,
Read k,
Read l,
Read m) =>
Read (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i,
Read j,
Read k,
Read l) =>
Read (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i,
Read j,
Read k) =>
Read (a, b, c, d, e, f, g, h, i, j, k)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i,
Read j) =>
Read (a, b, c, d, e, f, g, h, i, j)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h,
Read i) =>
Read (a, b, c, d, e, f, g, h, i)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g,
Read h) =>
Read (a, b, c, d, e, f, g, h)
instance (Read a,
Read b,
Read c,
Read d,
Read e,
Read f,
Read g) =>
Read (a, b, c, d, e, f, g)
instance (Read a, Read b, Read c, Read d, Read e, Read f) =>
Read (a, b, c, d, e, f)
instance (Read a, Read b, Read c, Read d, Read e) =>
Read (a, b, c, d, e)
instance (Read a, Read b, Read c, Read d) => Read (a, b, c, d)
instance (Read a, Read b, Read c) => Read (a, b, c)
instance (Read a, Read b) => Read (a, b)
instance Read ()
Prelude> :info Eq
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
instance Eq a => Eq (Maybe a)
instance (Eq a, Eq b) => Eq (Either a b)
instance Eq a => Eq [a]
instance Eq Ordering
instance Eq Integer
instance Eq Float
instance Eq Double
instance Eq Char
instance Eq Bool
instance (Eq a,
Eq b,
Eq c,
Eq d,
Eq e,
Eq f,
Eq g,
Eq h,
Eq i,
Eq j,
Eq k,
Eq l,
Eq m,
Eq n,
Eq o) =>
Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
instance (Eq a,
Eq b,
Eq c,
Eq d,
Eq e,
Eq f,
Eq g,
Eq h,
Eq i,
Eq j,
Eq k,
Eq l,
Eq m,
Eq n) =>
Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Eq a,
Eq b,
Eq c,
Eq d,
Eq e,
Eq f,
Eq g,
Eq h,
Eq i,
Eq j,
Eq k,
Eq l,
Eq m) =>
Eq (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Eq a,
Eq b,
Eq c,
Eq d,
Eq e,
Eq f,
Eq g,
Eq h,
Eq i,
Eq j,
Eq k,
Eq l) =>
Eq (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Eq a,
Eq b,
Eq c,
Eq d,
Eq e,
Eq f,
Eq g,
Eq h,
Eq i,
Eq j,
Eq k) =>
Eq (a, b, c, d, e, f, g, h, i, j, k)
instance (Eq a,
Eq b,
Eq c,
Eq d,
Eq e,
Eq f,
Eq g,
Eq h,
Eq i,
Eq j) =>
Eq (a, b, c, d, e, f, g, h, i, j)
instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i) =>
Eq (a, b, c, d, e, f, g, h, i)
instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h) =>
Eq (a, b, c, d, e, f, g, h)
instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g) =>
Eq (a, b, c, d, e, f, g)
instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f) =>
Eq (a, b, c, d, e, f)
instance (Eq a, Eq b, Eq c, Eq d, Eq e) => Eq (a, b, c, d, e)
instance (Eq a, Eq b, Eq c, Eq d) => Eq (a, b, c, d)
instance (Eq a, Eq b, Eq c) => Eq (a, b, c)
instance (Eq a, Eq b) => Eq (a, b)
instance Eq ()
instance Eq Int
Prelude> :info Ord
class Eq a => Ord a where
compare :: a -> a -> Ordering
(<) :: a -> a -> Bool
(>=) :: a -> a -> Bool
(>) :: a -> a -> Bool
(<=) :: a -> a -> Bool
max :: a -> a -> a
min :: a -> a -> a
instance Ord a => Ord (Maybe a)
instance (Ord a, Ord b) => Ord (Either a b)
instance Ord a => Ord [a]
instance Ord Ordering
instance Ord Integer
instance Ord Float
instance Ord Double
instance Ord Char
instance Ord Bool
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i,
Ord j,
Ord k,
Ord l,
Ord m,
Ord n,
Ord o) =>
Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i,
Ord j,
Ord k,
Ord l,
Ord m,
Ord n) =>
Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i,
Ord j,
Ord k,
Ord l,
Ord m) =>
Ord (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i,
Ord j,
Ord k,
Ord l) =>
Ord (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i,
Ord j,
Ord k) =>
Ord (a, b, c, d, e, f, g, h, i, j, k)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i,
Ord j) =>
Ord (a, b, c, d, e, f, g, h, i, j)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h,
Ord i) =>
Ord (a, b, c, d, e, f, g, h, i)
instance (Ord a,
Ord b,
Ord c,
Ord d,
Ord e,
Ord f,
Ord g,
Ord h) =>
Ord (a, b, c, d, e, f, g, h)
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) =>
Ord (a, b, c, d, e, f, g)
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) =>
Ord (a, b, c, d, e, f)
instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e)
instance (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d)
instance (Ord a, Ord b, Ord c) => Ord (a, b, c)
instance (Ord a, Ord b) => Ord (a, b)
instance Ord ()
instance Ord Int
Prelude> :info Enum
class Enum a where
succ :: a -> a
pred :: a -> a
toEnum :: Int -> a
fromEnum :: a -> Int
enumFrom :: a -> [a]
enumFromThen :: a -> a -> [a]
enumFromTo :: a -> a -> [a]
enumFromThenTo :: a -> a -> a -> [a]
instance Enum Ordering
instance Enum Int
instance Enum Char
instance Enum Bool
instance Enum ()
instance Enum Integer
instance Enum Float
instance Enum Double
Prelude> :info Num
class (Eq a, Show a) => Num a where
(+) :: a -> a -> a
(*) :: a -> a -> a
(-) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
instance Num Integer
instance Num Int
instance Num Float
instance Num Double
Prelude> :info Real
class (Num a, Ord a) => Real a where toRational :: a -> Rational
instance Real Integer
instance Real Int
instance Real Float
instance Real Double
Prelude> :info Fractional
class Num a => Fractional a where
(/) :: a -> a -> a
recip :: a -> a
fromRational :: Rational -> a
instance Fractional Float
instance Fractional Double
Prelude> :info RealFrac
class (Real a, Fractional a) => RealFrac a where
properFraction :: Integral b => a -> (b, a)
truncate :: Integral b => a -> b
round :: Integral b => a -> b
ceiling :: Integral b => a -> b
floor :: Integral b => a -> b
instance RealFrac Float
instance RealFrac Double
Prelude> :info Integral
class (Real a, Enum a) => Integral a where
quot :: a -> a -> a
rem :: a -> a -> a
div :: a -> a -> a
mod :: a -> a -> a
quotRem :: a -> a -> (a, a)
divMod :: a -> a -> (a, a)
toInteger :: a -> Integer
instance Integral Integer
instance Integral Int
Prelude> :info Bounded
class Bounded a where
minBound :: a
maxBound :: a
instance Bounded Ordering
instance Bounded Int
instance Bounded Char
instance Bounded Bool
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i,
Bounded j,
Bounded k,
Bounded l,
Bounded m,
Bounded n,
Bounded o) =>
Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i,
Bounded j,
Bounded k,
Bounded l,
Bounded m,
Bounded n) =>
Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i,
Bounded j,
Bounded k,
Bounded l,
Bounded m) =>
Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i,
Bounded j,
Bounded k,
Bounded l) =>
Bounded (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i,
Bounded j,
Bounded k) =>
Bounded (a, b, c, d, e, f, g, h, i, j, k)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i,
Bounded j) =>
Bounded (a, b, c, d, e, f, g, h, i, j)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h,
Bounded i) =>
Bounded (a, b, c, d, e, f, g, h, i)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g,
Bounded h) =>
Bounded (a, b, c, d, e, f, g, h)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f,
Bounded g) =>
Bounded (a, b, c, d, e, f, g)
instance (Bounded a,
Bounded b,
Bounded c,
Bounded d,
Bounded e,
Bounded f) =>
Bounded (a, b, c, d, e, f)
instance (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e) =>
Bounded (a, b, c, d, e)
instance (Bounded a, Bounded b, Bounded c, Bounded d) =>
Bounded (a, b, c, d)
instance (Bounded a, Bounded b, Bounded c) => Bounded (a, b, c)
instance (Bounded a, Bounded b) => Bounded (a, b)
instance Bounded ()
Prelude> :info Monad
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a
instance Monad Maybe
instance Monad []
instance Monad IO
Prelude> :info MonadPlus
Top level: Not in scope: data constructor `MonadPlus'
Prelude> :info Functor
class Functor f where
fmap :: (a -> b) -> f a -> f b
(GHC.Base.<$) :: a -> f b -> f a
instance Functor Maybe
instance Functor []
instance Functor IO