     }
 }
 
+/**
+ A type-erased `StoreProtocol` conformance.
+ */
 public struct AnyStore<T>: StoreProtocol {
     private let doSubscribe: (@escaping (T) -> Void) -> (() -> Void)
     private let doDispatch: (Action) -> Void

    func subscribe(_ subscription: @escaping (State) -> Void) -> ((Void) -> Void)
}

public protocol StoreProtocol: Publisher, Dispatcher {
    var state: State { get }
}

extension StoreProtocol {
    public func dispatch(_ thunk: (@escaping () -> State, @escaping (Action) -> Void) -> Void) {
        let getState = { self.state }
        thunk(getState, dispatch)

extension Dispatcher {
    /**
     Executes a closure with an injected `dispatch` function.
     Useful for asynchronous `Action` dispatches.

     - parameter thunk: The closure that will be executed with an injected `dispatch` function.
     */
