5

ファイルのストリーム処理にMonix を使用するコードがあります。Observableこのコードをテストするには、 で行う操作をObservable型に依存しないようにして、 のような他のデータ構造でも実行できるようにしListます。そのため、基になるデータ構造を抽象化するために次のコードを記述しました。

def permutations[F[_] : Applicative : FunctorFilter : SemigroupK](chars: F[Char]): F[F[Char]] = {
  Range.inclusive('a', 'z').map(_.toChar)
    .map { c ⇒
      FunctorFilter[F].filter(chars)(Character.toLowerCase _ andThen (_ != c))
    }
    .map(Applicative[F].pure)
    .reduceLeft(SemigroupK[F].combineK)
}

私を悩ませているのは、このコードが多くの中間データ構造を作成することです。このプロセスをより効率的にするために使用できる型クラスはありますか? LiftIOアイテムのコレクションのように、オーバーヘッドをあまりかけずに、あるデータ構造を別のデータ構造に持ち上げるものはありますか?

4

2 に答える 2