(Scala)ある型クラスを実装する任意クラスのインスタンス列が持てるやつ
適当にググってもでてこないのでうんうんうなっていたらできた。僕みたいなうなり声を上げる人が少なくなるようにブログに書いておきます。
ある型クラス F
を実装するクラス A, B, C, ...
があって、それらのインスタンスの列を引数にとってどこかのクラス Collector
にフィールドとして保存する。 Collector
ではその列の各要素について F
のメソッドを使いたい。そういうときは
を保存しておく型クラス Box[F] { type Content = A }
を別に用意して、それの列を引数にとるとなんとかなるみたいです。
@typeclass
はsimulacrumというライブラリで、 typeClassImpl.show(a)
が a.show
とかけるようになるやつです。今回の題とは関係ないですが見やすいので。
Box
の型パラメータに A
を持っていくと Seq
にするときに Any
になって個別の型が消し飛んでしまいます。なので Box
のメンバーに入れて隠します。
うーん疲れた...もっと簡単な書き方があったら教えてください。