(Scala)ある型クラスを実装する任意クラスのインスタンス列が持てるやつ

適当にググってもでてこないのでうんうんうなっていたらできた。僕みたいなうなり声を上げる人が少なくなるようにブログに書いておきます。

ある型クラス F を実装するクラス A, B, C, ... があって、それらのインスタンスの列を引数にとってどこかのクラス Collector にフィールドとして保存する。 Collector ではその列の各要素について F のメソッドを使いたい。そういうときは

を保存しておく型クラス Box[F] { type Content = A }を別に用意して、それの列を引数にとるとなんとかなるみたいです。

@typeclasssimulacrumというライブラリで、 typeClassImpl.show(a)a.show とかけるようになるやつです。今回の題とは関係ないですが見やすいので。

Box の型パラメータに A を持っていくと Seq にするときに Any になって個別の型が消し飛んでしまいます。なので Box のメンバーに入れて隠します。

うーん疲れた...もっと簡単な書き方があったら教えてください。