 // MARK: - DefaultStoreType
 
 public protocol DefaultStoreType {
+    
     associatedtype Default: DefaultConvertible
-    
-    var key: String { get }
   
     func set(value: Default)
     func get() -> Default?

// MARK: -

public final class AnyStore<D: DefaultConvertible>: DefaultStoreType {
    public typealias Default = D
    
    public let key: String
    
    private let _set: Default -> ()
    private let _get: () -> Default?
    private let _remove: () -> ()
    
    public init<Inner: DefaultStoreType where Inner.Default == D>(_ inner: Inner) {
        self.key = inner.key
        
        _set = inner.set
        _get = inner.get
        _remove = inner.remove

/// Represents objects that can type-safely be interacted with DefaultStoreType
public protocol DefaultConvertible {
    
    static var key: String { get }
    
    /// Desirialize AnyObject to adopted object.
    /// The argument "object" is intended to be passed from DefaultStoreType
    init?(_ object: AnyObject)
