<@U0LKYQPJP> about rx… you can use like this: ```...
# javascript
d
@gbaldeck about rx… you can use like this:
Copy code
open class Store<TState, TMessage>(initialState: TState,
                                   val updater: (TState, TMessage, Dispatcher<TMessage>) -> TState)
    : Rx.BehaviorSubject<TState>(initialState) {

    val messages = Rx.Subject<TMessage>()
    val currentState get() = value
    val pulse = this.map { Pulse(it, this::dispatch) }
    var reporter: Reporter<TState, TMessage> = ConsoleReporter()

    init {
        messages
            .concatMap { message ->
                Rx.Observable.of(currentState)
                    .map {
                        try {
                            val newState = updater(it, message, this::dispatch)
                            reporter.onNewState(message, it, newState)

                            true to newState

                        } catch (e: Throwable) {
                            reporter.onError(message, it, e)

                            false to currentState
                        }
                    }
            }
            .filter { it.first }
            .map { it.second }
            .subscribe(this)
    }

    fun dispatch(message: TMessage) {
        messages.next(message)
    }

}