(WindowsではTest.exeとなります)ここでif式も一緒に習得できてしまいましたね。doの直後の最初の空白でない文字は特別な文字です。上の例の場合ではputStrLnの先頭のpがそれです。doブロック内のすべての行はそのpと同じ列から開始します。深くインデントすれば、それ以前の行の一部となります。逆に浅くインデントすれば、doブロックはそこで終わります。これは"レイアウト"と呼ばれ、Haskellでは、いつも行の終了文字や中括弧を使うのは面倒なので、代わりにレイアウトを使います。(then句とelse句はこれが理由でインデントされなければならないのです。ifと同じ列から開始した場合、別の行と解釈されてしまって、エラーとなります。レイアウトを使う場合はインデントにタブを用いないでください。技術的にはタブが8文字であれば動作しますが、おすすめできません。中にはそういう人もいるかもしれませんが、プロポーショナルフォントを使うこともおすすめしません。簡潔な型これまで、型宣言に関して全く触れてきませんでした。その必要がなかったのですが、それはHaskellが型推論を行うからです。一般的に型宣言はしたい場合以外はする必要がありません。型宣言をする場合は::を使って行います。(そして後で触れる型class)は常に大文字から開始します。変数は常に小文字から始まります。convention)ではありません。ghciを使って、ある値がどんな型かを確認することもできます。普段、自分では型宣言をしないので、この機能は役に立ちます。[Char](上の例を見て気づいたように、[Char]はStringの別名です。listsを見てみましょう)数字に関してはもっと面白いものが見られます。tこれらの型は"型クラス"を用いています。あらゆる数字型として使うことができます。どのような分数型にもなれますが、整数型にはなれません。(ちなみにこれは関数呼び出しです)はどのような整数型にもなれますが、分数型にはなれません。Haskellの"prelude"(初期状態でimportされるライブラリの一部)内には5種類の数値型があります。