して以下のように定義しました。以下のように実装できます。実装することでどのように自分と同じ型のコレクションを作成すればいいのかという情報を与えます。対する共通実装を提供することができました。もとに抽象化を試みます。作れるように定義してみました。共通化がうまくいきません。渡す関数によって結果のコレクション型が変化するのですが、その挙動を再現できていないというのがあります。変換を以下に記載します。定義されているか否かで結果のコレクション型が変化します。どこかから引っ張ってくることです。して受け取れるようにします。コンパニオンオブジェクトで定義します。実装することができました。汎用的なコレクション操作メソッドをできるだけ一箇所で定義したいメソッドに渡した関数によって結果のコレクション型を変えたいといった課題を解決するために導入された仕組みということになります。同様な挙動も実現することができます。役に立ったのかということを見ていきました。使用しない実装に移行されます。よる解決法の組み合わせとして面白い話だなと思いました。