You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

37 lines
990 B

package nova.monadic_sfx.implicits
import monix.reactive.Observable
import monix.reactive.Observer
import monix.{eval => me}
import monix.execution.Scheduler
class ActionObservableExecuter[T](
delegate: Observable[T]
) {
def -->(sub: Observer[T])(implicit s: Scheduler) =
delegate
.doOnNext(el => me.Task(sub.onNext(el)))
.subscribe()
}
class ActionObservableBuilder[A](
observableAction: Observable[A]
) {
def useLazy[T](v: => T) =
new ActionObservableExecuter[T](observableAction.mapEval(_ => me.Task(v)))
def use[T](cb: A => T) =
new ActionObservableExecuter[T](
observableAction.mapEval(ae => me.Task(cb(ae)))
)
def useIterable[T](cb: A => collection.immutable.Iterable[T]) =
new ActionObservableExecuter[T](
observableAction.flatMap(a =>
Observable.suspend(Observable.fromIterable(cb(a)))
)
)
def map[B](cb: A => B) =
new ActionObservableBuilder(observableAction.mapEval(v => me.Task(cb(v))))
}