すごいHaskell一章

リストとタプル

リストは要素の型まで含めて型。
タプルはさらにサイズまで含めて型なのか。
リストは同じ型の要素しか持てないけど、タプルは異なる型の要素を持てる。
リストはサイズ(要素の数)を変更できるけど、タプルはサイズ固定。

[1,2]
[1,2,3]

は同じ型。

[1,2]
['a', 'b']

は別の型。

(1,2)
(1,2,3)
(1,'a')

は3つとも別の型。

なので、

[[1,2],[1,2,3],[1,2]]

はOKだけど、

[(1,2), (1,2,3), (1,2)]

はエラーになる。

Main> [(1,2), (1,2,3), (1,2)]
<interactive>:1:9:
    Couldn't match expected type `(t0, t1)'
                with actual type `(t2, t3, t4)'
    In the expression: (1, 2, 3)
    In the expression: [(1, 2), (1, 2, 3), (1, 2)]
    In an equation for `it': it = [(1, 2), (1, 2, 3), (1, 2)]

タプルは構造体みたいなデータの集まりに使える

("Yamada Taro", "Tokyo", 19)

タプルに要素を追加する一般的な関数は書けない

つまり、サイズごとに型を指定して関数を書く必要がある。

遅延評価なので無限リストが使える

[1..]

最初に解の候補となる集合を生成し、変換とフィルタリングを行う。