LoginSignup
4
0

More than 5 years have passed since last update.

Haskell入門 型

Last updated at Posted at 2018-08-30

haskellと型

haskellの学習を進めるにあたり慣れていない概念が、型。すごH本を参考にまとめてみます。

型変数って?

Haskellでは、式も関数も型が重要である。とくに、関数を定義する際には、明示的に宣言しておいたほうがいい。
しかし、中にはいろいろな型に対して動作する関数がある。試しに、head関数の型を調べる。

ghci> :t head
head :: [a] -> a

aは型変数。どんな型も取りうることを意味する。headの型宣言は「任意の型のリストを引数に取り、その型の要素を一つ返す」と読める。
型変数を用いた関数を多相的関数という。

型クラス、インスタンスって慣れなてないなあ...

ちょっと抽象的で慣れてないので、具体例から考える。

ghci> :t (==)
(==) :: (Eq a) => a -> a -> Bool

=>は、型クラス制約という。
「等値性関数は、同じ型の任意の2つの引数を取り、Boolを返す。引数の2つの値の型はEqクラスのインスタンスでなければならない」と読める。Eq型クラスは、等値性をテストするためのインターフェイスを提供する。
ここで用語を整理します。

型クラス

関数の集まりを定める。なんらかの振る舞いを定義。

インスタンス

その型クラスが記述する振る舞いを実装する。

等値性関数の例で言うなら、ある2つの値の等値性を比較することに意味があるなら、その型はEq型クラスのインスタンスにできる、ということ。

あるクラスのインスタンスに、あるがなる、ということに注意。

Eq型クラスで具体例

型が関数を実装しているとは、その関数がその特定の型に対して使われたときに、どういう振る舞いをするか定義するということ。Eqのインスタンスが実装するべき関数は、== と  /= である。
Eqの様々なインスタンス(=)に対する == と  /= の動作が定義される。

ghci> 5 == 5
True
ghci> 5 /= 5
False
ghci> 'a' == 'a'
True
ghci> "Ha Ha" == "Ha Ha"
True
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0