extension ObservableType {
typealias Accumulator<A> = (A, E) -> Observable<A>
func flatScan<A>(_ seed: A, accumulator: @escaping Accumulator<A>) -> Observable<A> {
return self
.scan(Observable<A>.just(seed)) { observable, current -> Observable<A> in
observable.flatMap { previous in
accumulator(previous, current)
}
}
.flatMap { $0 }
}
}