 public protocol MarshaledObject {
     subscript(key: KeyType) -> Any? { get }
     func anyForKey(key: KeyType) throws -> Any
-    func valueForKey<A: ValueType>(key: KeyType) throws -> A
-    func valueForKey<A: ValueType>(key: KeyType) throws -> A?
-    func valueForKey<A: ValueType>(key: KeyType) throws -> [A]
-    func valueForKey<A: ValueType>(key: KeyType) throws -> [A]?
-    func valueForKey<A: ValueType>(key: KeyType) throws -> Set<A>
-    func valueForKey<A: ValueType>(key: KeyType) throws -> Set<A>?
-    func valueForKey<A: RawRepresentable where A.RawValue: ValueType>(key: KeyType) throws -> A
-    func valueForKey<A: RawRepresentable where A.RawValue: ValueType>(key: KeyType) throws -> A?
-    func valueForKey<A: RawRepresentable where A.RawValue: ValueType>(key: KeyType) throws -> [A]
-    func valueForKey<A: RawRepresentable where A.RawValue: ValueType>(key: KeyType) throws -> [A]?
-    func valueForKey<A: RawRepresentable where A.RawValue: ValueType>(key: KeyType) throws -> Set<A>
-    func valueForKey<A: RawRepresentable where A.RawValue: ValueType>(key: KeyType) throws -> Set<A>?
 }
 
 public extension MarshaledObject {

    }
    
    public func valueForKey<A: ValueType>(key: KeyType) throws -> [A] {
        let any = try anyForKey(key)
        do {
            return try Array<A>.value(any)
        }

    }
    
    public func valueForKey<A: ValueType>(key: KeyType) throws -> Set<A> {
        let any = try self.anyForKey(key)
        do {
            return try Set<A>.value(any)
        }
