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.
|
|
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)))) }
|