     
     /**
      Initializes a `Store`.
-     - parameter initialState The initial value of the application state in hold
-     - parameter reducer The root pure function that's responsible for transforming state according to `Actions`
+     - parameter initialState The initial value of the application state in hold.
+     - parameter reducer The root pure function that's responsible for transforming state according to `Actions`.
     **/
     public init (initialState: State, reducer: (State, Action) -> State) {
         reduce = reducer

    }
}

public protocol Dispatch {
    func dispatch(action: Action)
}

extension Dispatch {
    public func dispatch(thunk: (Action -> Void) -> Void) {
        thunk { self.dispatch($0) }
    }
}

public protocol Action {}

public protocol Publisher {
    associatedtype Publishing
    func subscribe(subscription: Publishing -> Void) -> Void -> Void
}

extension Publisher {
    public func subscribe <T: Subscriber where T.Publishing == Publishing> (subscriber subscriber: T) -> Void -> Void {
        return subscribe { newState in
            subscriber.receive(subscriber.select(newState))

}

extension Publisher where Self: Dispatch {
    /**
     Subscribes a `Subscriber` that is compatible with this `Publisher`.
     - parameter subscriber The compatible `Subscriber`.
     - returns A `dispatch` function and an `unsubscribe` handle, encapsulated.
    **/
    func connection <T: Subscriber where T.Publishing == Publishing> (to subscriber: T) -> StateConnection {
        let dispatch = { self.dispatch($0) }
        let unsubscribe = self.subscribe(subscriber: subscriber)
