 
 extension Dispatch {
     /**
-     Executes a closure with an injected `dispatch` function. Useful for
-     asynchronous `Action` dispatching.
+     Executes a closure with an injected `dispatch` function. Useful for asynchronous `Action` dispatching.
      - parameter thunk The closure that will be executed with an injected `dispatch` function.
      **/
     public func dispatch(thunk: (Action -> Void) -> Void) {

import Foundation

/**
 The data structure responsible for holding application state, 
 allowing controlled mutation through dispatched `Actions` and
 notifying interested parties that `subscribe` to state changes.
 **/
public final class Store<State>: Publisher, Dispatch {
    private let reduce: (State, Action) -> State

    }
}

/**
 Instances conforming to `Subscriber` receive objects of an `associatedtype` associated to generic updates.
 Plus, they should be able to select some portion of this associated object, producing a second associated 
 object of another `associatedtype`.
 **/
public protocol Subscriber: class {
    associatedtype Publishing
    associatedtype Selection
    
    /**
     Selects some portion of an object of an arbitrary (associated) type.
     - parameter publishing The object that will suffer the selection.
     - returns An object selected from `publishing`.
    **/
    func select(publishing: Publishing) -> Selection
    
    /**
     Receives an object associated to a generic update, preferably after undergoing selection by `select`.
     - parameter selection The object associated to a generic update, after going through selection.
     **/
    func receive(selection: Selection)
}

