人気ブログランキングへ

2009年05月05日

Yet Another Haskell Tutorial (和訳): 4.1 単純型

4.1 単純型

組み込まれている型には、Int (正負両方の整数)、Char (文字)、String (文字列) など多数ある。Char型に属する式についてはすでに見たので、String型に属する式を調べてみよう。

Prelude> :t "Hello"
"Hello" :: String

もっと複雑な式を入力することもできる。たとえば、同値であることを調べてみよう。

Prelude> :t 'a' == 'b'
'a' == 'b' :: Bool

この式が偽であっても、ある型、すなわちBool型を持つことに注意が必要である。

■注■ Bool は Boolean (通常は "ブーリアン" と読むが、1度か2度 "ブーリーン" と言うのを聞いたことがある) の短縮形で、取り得る値は True または False のどちらかである。

型に誤りのある式の型をシェルに出力させれば、型チェックや型推論がどのように処理されるか観察できる。たとえば、等号は2つの引数の型は同じ型に属する必要がある。文字と文字列を比較させようとすれば、CharStringが異なる型であることがわかる。

Prelude> :t 'a' == "a"
ERROR - Type error in application
*** Expression : 'a' == "a"
*** Term : 'a'
*** Type : Char
*** Does not match : [Char]

エラーの1行目 ("Expression" と書かれている行) は、型エラーが起きている式を教えている。2行目は、この式のどの部分の型が正しくないかを示している。3行目はこの項がどの型に推論されたかを示し、4行目はどの型に一致する必要があったかを示している。この場合は、Char型が[Char]型 (文字のリスト。Haskellの文字列は文字のリストとして表現される) に一致していないと言っている。
前述のように、:: 演算子を使えば式の型を明示的に指定できる。たとえば、上の例で "a" と書く代わりに ("a"::String) と書くこともできた。この場合、"a" には1とおりの解釈しか存在しないため何も変化しない。しかし、数値の場合を考えてみよう。以下を試してほしい。

Prelude> :t 5 :: Int
5 :: Int
Prelude> :t 5 :: Double
5 :: Double

このように、数値5はIntDoubleのどちらにインスタンス化させることもできることがわかる。型を指定しないとどうなるだろうか?

Prelude> :t 5
5 :: Num a => a

予想と違っていたのではないだろうか? 手短に説明すると、これが意味するのは、ある型 a がクラス Num のインスタンスなら、式 5 の型は型 a に属するということである。もし意味がわからなくても、今はかまわない。第4.3節で型クラス (ここで述べているもの) について広範囲に論じる。この読み方だが、「Num のインスタンスである a が a を実装している」となる。

演習

演習 4.1 以下の式を自分で計算し、もしそれが型を持つならその型を確かめよ。また、式が型エラーであるかどうか注意せよ。
1. 'h':'e':'l':'l':'o':[]
2. [5,'a']
3. (5,'a')
4. (5::Int) + 10
5. (5::Int) + (10::Double)


前ページ「4 型の基礎
次ページ「4.2 多相型


5 Basic Input/Output
6 Modules
7 Advanced Features
8 Advanced Types
9 Monads
10 Advanced Techniques
A Brief Complexity Theory
B Recursion and Induction
C Solutions To Exercises


これは、Haskell (ハスケル) のチュートリアル "Yet Another Haskell Tutorial" を日本語に翻訳したものです。
オリジナルのドキュメントは、
http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf
などから入手できます。
日本語訳に関するご指摘は、コメントとしてお寄せください。

posted by K/I at 20:28 | 東京 ☔ | Comment(0) | TrackBack(0) | Yet Another Haskell Tutorial | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。