すごい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..]