home


[型]

Haskellは型付き言語です.
ここでの説明は概要です. 型以外の以降の説明も含めて,詳しくはHaskell 98を参照してください.

1. 基本的な型

数値には,整数を表すInt型や実数を表すDouble型などがあります.
値(式)の型を明示するには"::"の後に型を書きます.(Haskellは型推論機構を備えており,型が明示されない場合は可能な範囲で自動推論してくれます)
Prelude> 3::Int
3
Prelude> 3::Double
3.0
文字を表すのはChar型,真偽値を表すのはBool型です.Bool型の値はTrueまたはFalseです.
relude> 'c'::Char
'c'
Prelude> True && False
False
Prelude> True || False
True
Prelude> 2<3
True
Toupleを使って複合的なデータを表現することが出来ます.Toupleでは異なる型の要素を含む事が出来ます.
Prelude> (2::Int, 3::Double, 'c', True) 
(2,3.0,'c',True)
Prelude> (2::Int, (4,'a'))
(2,(4,'a'))
Listは任意数の要素を含むことが出来ます.ただし全ての要素は同じ型でなくてはいけません.文字列はChar型の値を要素とするリストです.
Prelude> [1,2,3,4,5]
[1,2,3,4,5]
Prelude> ['H', 'e', 'l', 'l', 'o']
"Hello"
Prelude> "Hello"
"Hello"
ghciでは"t"コマンドで型を調べることが出来ます.
Prelude> :t 'c'
'c' :: Char
リストに対して"t"コマンドを適用してみると,以下のようになります.すなわちType型の値を要素とするリストの型は[Type]です. このようにHaskellでは既存の型を修飾した型が存在します.
Prelude> :t ['H', 'e', 'l', 'l', 'o']
['H', 'e', 'l', 'l', 'o'] :: [Char]

2. Data

data キーワードを使用して,自分でデータ型を定義することが出来ます.型名は大文字で始まらなければいけません. 以下はInt型のintValとDouble型のdoubleValという名前のついた2つの要素を持つデータ構造MyStructの定義の例です. また,foo1,foo2,foo3はMyStructを用いた関数の例です.
data MyStruct = MyStruct {
  intVal :: Int,
  doubleVal :: Double
}

foo1 :: Int->Double->MyStruct
foo1 i d = MyStruct i d

foo2 :: MyStruct->Int
foo2 m = intVal m

foo3 :: MyStruct->Double
foo3 m = doubleVal m
foo1,foo2,foo3を使ってみると,以下のようになります.
*Main> foo2 (foo1 1 2.0)
1
*Main> foo3 (foo1 1 2.0)
2.0