function RxReduxStore(initial_state, reducers) {
let streams = {}, actions = {}, store$
for (let action in reducers) {
let subject$ = new Rx.Subject()
streams[`${action}$`] = subject$.map(reducers[action])
actions[action] = (args) => subject$.next(args)
}
store$ = new Rx.BehaviorSubject(initial_state)
.merge(...Object.values(streams))
.scan((state, reducer) => reducer(state))
return {store$, actions}
}