Scrap Your Boilerplate:A Practical Design Pattern for Generic Programmingという論文を勉強中です。 以前リストの自由度で話した内容と関連しているのですが、 Haskellのリストは長さは可変な代わりに要素の型が全て同一でなくてはいけなくて、タプルは要素型が同一でなくてはよいけれども長さは固定、つまり リストでは [1, 2] :: [Integer] [1, 2, 3, 4] :: [Integer] のように長さの違うリストでも同じ型で表現できるけど、 [1, 'a'] のようなことは許されない。 タプルでは (1, 'a') :: (Integer, Char) は許されても (1, 2) :: (Integer, Integer) (1, 2, 'a') :: (Integer, Integer, Char) と