package nova.monadic_sfx.util import monix.reactive.Observable import monix.reactive.Observer package object reactive { type MonixProSubject[-I, +O] = Observable[O] with Observer[I] type Middleware[A, M] = Observable[(A, M)] => Observable[(A, M)] type Store[A, M] = MonixProSubject[A, (A, M)] /** * A Function that applies an Action onto the Stores current state. * @param reducer The reducing function * @tparam A The Action Type * @tparam M The Model Type */ type Reducer[A, M] = (M, A) => (M, Observable[A]) }