コレクションライブラリ再設計の主な設計目標は自然な型と実装コード共有の最大化を同時に実現することだった。特に、Scala のコレクションは「戻り値同型」の原則 ("same-result-type" principle) を採用しており、コレクションの変換メソッドは、できる限り同じ型のコレクションを返すようにしている。例えば、filter 演算は全てのコレクション型において、同じコレクション型のインスタンスを返すべきだ。List に filter を適用すれば List を返すし、Map は Map を返す、という具合だ。これから、これがどう実現されているのかを見てみようと思う。 Scala コレクションライブラリは、いわゆる実装トレイト (implementation trait) を用いてジェネリックなビルダとコレクションの探索を実装することで、「戻り値同型」の原則を実現しながらもコー