基本概念型とは?互いに関連する値の集合例: Bool型はFalseとTrueという値を持つv ::T 「vは型Tの値である」例: False :: Bool not :: Bool -> Bool -- Bool型をBool型に変換する関数の型 not True :: Bool型推論関数適用の型付け規則:f :: A -> B かつ e :: A ならば f e :: Bすべての式は型を持たなければいけない推論できない式(例: not 3)は型エラーとなるHaskellは事前に型検査をおこなうので型安全である(型安全だからといってエラーがないわけではない: 1 `div` 0)
多重定義型加算演算子 +IntやFloatなどの数値型の足し算ができる> 1+ 23> 1.1 + 2.23.3クラス制約: 「どんな数値型にも」というような制約を表す書き方 C aC: クラス名、a: 型変数 「クラスCのインスタンスであるどんな型aについても」(+) :: Num a => a -> a -> aNumクラスのインスタンスであるどんな型aについても加算演算子(+)の型はa -> a -> aである
14.
多重定義型 (続き)例: (-):: Num a => a -> a -> a negate :: Num a => a -> a abs :: Num a => a -> a数値自体も多重定義されている3 :: Num a => a
基本クラス (続き)Ord: 順序がつけられるEqクラスのインスタンスであり、以下のメソッドが定義されている(<):: a -> a -> Bool(<=) :: a -> a -> Bool(>) :: a -> a -> Bool(>=) :: a -> a -> Boolmin :: a -> a -> amax :: a -> a -> aBool, Char等はOrdのインスタンスOrdのインスタンスのリスト、タプルもOrdのインスタンス(辞書式順序)
17.
基本クラス (続き)Show: 表示できる(文字列に変換できる)show:: a -> StringRead: 文字列から変換できるread :: String -> areadの結果の型は文脈から決まる場合にはその型になるnot (read "False")のread "False"の型はBool決まらない場合には結果の型を指定すればよい> read "123"<interactive>:1:1: Ambiguous type variable `a0‘ in the constraint:(中略)> read "123" :: Int123目的の型に変換できないような文字列が入力されるとエラーになるnot (read "Hello")はエラーになる
18.
基本クラス (続き)Num: 数値EqとShowのインスタンスであり、以下のメソッドが定義されている(+):: a -> a -> a(-) :: a -> a -> a(*) :: a -> a -> anegate :: a -> aabs :: a -> asignum :: a -> aIntegral: 整数Numのインスタンスであり、以下のメソッドが定義されているdiv :: a -> a -> amod :: a -> a -> aFractional: 分数Numのインスタンスであり、以下のメソッドが定義されている(/) :: a -> a -> arecip :: a -> a -- 逆数