型名がその値に依らない定数の型は以下の 3 つです:

  • 真偽型 Boolean
  • 比較型 Ordering
  • 文字型 Character

この他の型の型名は、その値によって変動します。

型名がその値に依存して変動する定数の型には以下のようなものがあります:

  • リスト型
  • タプル型

これらは他のプログラミング言語で言う配列のようなものです。
ただし、リスト型はその要素の型名が一致していなければならないという制約があります。
一方、タプル型にはそのような制約はありません。

真偽型 Boolean

型名は Bool です。
真偽型には以下の 2 つの値があります:

Prelude> True
True
Prelude> False
False

比較型 Ordering

型名は Ordering です。
比較型には以下の 3 つの値があります:

Prelude> GT
GT
Prelude> EQ
EQ
Prelude> LT
LT

文字型 Character

型名は Char です。
シングルクォーテーションで 1 つの文字を囲みます:

Prelude> 'a'
'a'
Prelude> '\n'
'\n'
Prelude> '\t'
'\t'
Prelude> '\b'
'\b'
Prelude> '\a'
'\a'

文字列型 String

型名は [Char] です。
ダブルクォーテーションで文字列を囲みます:

Prelude> "abc"
"abc"

後述するように、実は文字列型はリスト型と同じものです。

リスト型 List

基本的な型名は [a] です。
ここで a は任意の定数の型が入ることを表します。
[]
でカンマ区切りの任意の定数の型を囲みます:

Prelude> []
[]
Prelude> [1,2,3]
[1,2,3]
Prelude> ['a','b','c']
"abc"
Prelude> [True, False]
[True, False]

上記から分かるように、文字列型は「文字型で構成されたリスト型」です。
これは文字列型の型名が [Char] であることからも明らかです。
なぜなら、リスト型はその要素によって型名が以下のように変動するからです:

Prelude> :t [True]
[True] :: [Bool]
Prelude> :t [[]]
[[]] :: [[a]]

リスト型は以下のような書き方も出来ます:

Prelude> 1:2:3[]
[1,2,3]
Prelude> 'a':'b':['c']
"abc"
Prelude> 'a':"bc"
"abc"

10 以下の正数のリストは .. を利用すると、以下のようにしても書くことが出来ます:

[1..10]
take 10 [1..]

ここで、take は第二引数に指定したリストから、第一引数で指定した数の分だけ先頭から要素を取り出す高階関数です。
.. の前に 2 つの数字があった場合は、その 2 つの数字の差を公差とした配列になります。
したがって、10 以下の正数の偶数のリスト [2,4,6,8,10] は以下のようにして書くことが出来ます:

[2,4..10]