型の確認
ghci> :t 'a' 'a' :: Char ghci> :t 1 1 :: Num p => p ghci> :t "string" "string" :: [Char] ghci> :t True True :: Bool ghci> :t [1,2] [1,2] :: Num a => [a] ghci> :t (1,2) (1,2) :: (Num a, Num b) => (a, b)
関数の型宣言
文字列を受け取り、文字列を返す、型宣言。
removeNonUppercase.hs
removeNonUppercase :: [Char] -> [Char] removeNonUppercase st = [c | c <- st, c `elem` ['A'..'Z']]
ghci> :l removeNonUppercase.hs [1 of 1] Compiling Main ( removeNonUppercase.hs, interpreted ) Ok, one module loaded. ghci> removeNonUppercase "Hello World" "HW"
複数の引数を受け取る型宣言。
int2Triple :: Int -> Int -> Int -> (Int, Int, Int) int2Triple a b c = (a, b, c)
ghci> int2Triple 3 4 6 (3,4,6)
型変数
関数head
は、任意指定の型a
型のリストを受け取り同じa
型の値を返す。aを型変数と呼ぶ。
ghci> :t head head :: [a] -> a
fst
は型変数a,bからなるダブルを受け取りa型、つまり1つ目の型、の値を返す。
ghci> :t fst fst :: (a, b) -> a
型クラス
型クラスは振る舞いを定めたインターフェースを提供し、IntやCharなどの各インスタンスは複数の型クラス(インターフェース)を持つことができる。
ghci> :t (==) (==) :: Eq a => a -> a -> Bool
この例では、関数==
はEq型クラスのインスタンスaを2つ受け取りBool型を返すという関数型と読める。=>
の左側に型クラス制約を定義する。
ある関数にEqクラスの制約がついていれば、関数内のどこかで等値性の比較が行われている。ということが読める。
Ordクラス
順序付けのためのクラス。関数を除くすべての型がOrdのインスタンスとなる。
ghci> :t (>) (>) :: Ord a => a -> a -> Bool ghci> 5 > 2 True
Showクラス
文字列として表現可能にする型クラス。関数を除くすべての型はShowクラスのインスタンスとなる。show関数は与えられた引数を文字列として表示する。
ghci> :t show show :: Show a => a -> String ghci> show 1 "1" ghci> show [1,2] "[1,2]"
Readクラス
文字列を他の型として表現可能にする型クラス。
Read型クラスのインスタンスは具体的にどの型かを判別する為、推論する式や型注釈:: Intなど
を与える必要がある。
ghci> :t read read :: Read a => String -> a ghci> read "8" + 2 10 ghci> read "8" :: Int 8 ghci> read "[1,2]" :: [Int] [1,2]
Enumクラス
順序付けができるインスタンス(IntやChar)が持つ型クラス。列挙したり前後関係を取得したりできる。
ghci> :t succ succ :: Enum a => a -> a ghci> succ 10 11 ghci> ['a'..'d'] "abcd"
Boundedクラス
上限、下限を持つ型クラス。
ghci> :t minBound minBound :: Bounded a => a ghci> minBound ::Int -9223372036854775808
Numクラス
数値のように振舞う。
ghci> :t (*) (*) :: Num a => a -> a -> a
Floatingクラス
浮動少数点数に使う型クラス。
Integral
整数値のみ。
Maybe型
正確にはMaybe
のみを指す場合は型コンストラクタと呼ぶ。Maybe Int
やMaybe Char
と型引数を加えてMaybe型となる。
Maybe型はList型のようにある型を包む型となる。
Maybe a
とした場合、任意型aが0個または1つを持てる型となる。他言語のOption(al)型のようなもの。
0個の場合は関数Nothing
が、1個の場合はJust a
関数がMaybe型を返す。