[String]試しに確かめてみたら、String型にならなかった。[[Char]]リストの要素の個数を、そのリストの長さと呼びます。あり、空リストと呼ばれます。[False]、['a']、[[]]は、要素が一つのリストです。[]は異なるリスト型の値であることに注意してください。リストであり、後者は要素を持たない単なる空リストです。†タプルとは、有限個の要素の組です。各要素の型が異なってもかまいません。要素は括弧で囲み、カンマで区切ります。(String,Bool,Char)試しに確かめてみたら、String型にならなかった。Char)気になったので検索してみたら、String型は[Char]型の別名、ということらしい。表します.それを先に言え!ってかんじですねwHaskellのタプルは、注意点が多々あるので、何度もよく読んでおくこと。関数は、ある型の引数を他の型の結果に変換します。p.28関数には、引数の型と結果の型に制限がありません。そこで、複数の値をリストかタプルで表現すれば、一つの引数を取り一つの結果を返す関数で、複数の引数を取ったり、複数の結果を返したりできます。zerotoは、以下のように定義できます。慣習に従って、関数定義の前で関数の型を(型注釈を使って)宣言しています。関数の型は、関数についての有益な説明になっています。このような、プログラマーにより指定された型の情報は、型推論を使って自動的に決定された型と照合されます。†p.29一度に一つの引数を取る関数を、カリー化されていると表現します。カリー化された関数を扱うときに括弧が過剰になるのを避けるため、二つの規則が採用されています。->は右結合であるという規則です。以下の型を考えましょう。Intこれは、以下を意味します。Int))もう一つは、空白文字を用いて表す関数適用は、必然的に左結合であるという規則です。以下の関数適用を考えます。zこれは、以下を意味します。明示的に括弧付けをしなくても、複数の引数を取る関数はカリー化された関数として定義されます。二つの規則のおかげで、必要な括弧の個数を少なくできます。型に型変数を含めることで正確に表現できます。型変数の先頭は小文字でなければなりません。通常は、単にa、b、cという名前を使います。lengthの型は次のようになります。一つ以上の型変数を含む型や、そのような型を持つ式は、多相的と呼ばれます。Int」は多相型で、lengthは多相関数です。一般的に、プレリュードで提供される関数の多くは多相的です。「型変数」という用語の意味の定義が不十分な気がしたので、調べてみた。variable」というらしい。型変数を使って、型をパラメータ化することもできます。a型変数には、当然ですが具体的な型が入ります。cや複数文字を使っても問題ありません。この型変数は任意の型が入ることを示しています。同じ名前の型変数の型は、全て同じであることに注意してください。見る書き方ですが、これは型変数aに対して型クラス制約を行っています。型変数をそのまま使うと任意の型を許容してしまうため、型クラス制約を型変数にかける必要があるということです。今の段階での理解を整理しておく。型変数は、任意の型(型情報)を保存する変数。型について記述するときに、とりあえず型変数を使って宣言しておくことができる。型変数は、通常「a、b、c、...」のように小文字アルファベットを使っていくみたい。型変数は、最終的には具体的な型が当てはめられて処理される。型を扱うための道具ということみたい。(参考)型変数の意味とは直接関係ないかもしれないけど、型変数の活用方法=「型依存プログラミング」「型レベルプログラミング」という考え方が紹介されていた。aという形式で書きます。ここで、Cは型クラス名、aは型変数です。+の型は次のようになります。一つ以上の型クラス制約を持つ型は、多重定義型と呼ばれます。そのような型を持つ関数は、多重定義されていると言われます。aは多重定義型であり、(+)は多重定義された関数です。プレリュードで提供される数値関連の関数の多くは多重定義されています。型は、互いに関連する値の集合であったことを思い出してください。この考え方に従えば、型クラス(または単にクラス)とは、共通のメソッドを提供する型の集合です。ここで、メソッドとは、多重定義された操作のことを指します。たくさんの基本クラスが標準で提供されています。「型クラス制約」の説明が分かりづらかったので、別の説明方法を調べてみる。.型は、互いに関連する値の集合たとえば、Bool型にはFalseとTrueという二つの真理値が含まれます。(Char,Bool)このスクリプトをWinGHCiでロードして実行したら、エラーになった。^何かをimportしないと、read関数は使えないのだろうか?もしくは、このdo記法では何か間違いがあるのだろうか?エラーメッセージの意味もよく理解できない。勉強が進んだ後で、デバッグしてみよう。