unsplit
это просто MA#join
, для любого M[M[A]]
, где M
является Monad
.
split
не существует "из коробки".Ниже описан способ сделать это, чтобы продемонстрировать некоторые концепции Скалаза.Это фактически вызывает переполнение стека в компиляторе в данный момент!
val ls = List(1, 2, 3, 4, 5)
val n = 5
def truesAndFalses(n: Int): Stream[Boolean] =
Stream.continually(true.replicate[Stream](n) |+| false.replicate[Stream](n)).join
val grouped: List[List[Int]] = {
var zipped: List[(Int, Boolean)] = ls.zip(truesAndFalses(2))
var groupedWithBools: List[List[(Int, Boolean)]] = zipped splitWith {_._2}
groupedWithBools ∘∘ {pair: (Int, _) => pair._1}
}
val joined: List[Int] = grouped ∘∘ {_ * 2} join