     }
     
     @inlinable
-    func decode<T>(_ type: T.Type) throws -> T where T : Decodable {
+    func decode<T: Decodable>(_ type: T.Type) throws -> T {
         switch type {
         case is Bool.Type: return try self._decode(Bool.self) as! T
         case is Float.Type: return try self._decode(Float.self) as! T

    }
    
    @inlinable
    func decode<T>(_ type: T.Type, forKey key: Key) throws -> T where T : Decodable {
        guard let entry = value[key.stringValue] else { throw DataPack.DecodeError.valueNotFound }
        return try entry.decode(type)
    }
    
    @inlinable
    func nestedContainer<NestedKey>(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer<NestedKey> where NestedKey : CodingKey {
        
        guard let entry = self.value[key.stringValue] else { throw DataPack.DecodeError.valueNotFound }
        guard case let .dictionary(dictionary) = entry.base else { throw DataPack.DecodeError.unsupportedType }

extension DataPack {
    
    @inlinable
    public func decode<T: Decodable>(_ type: T.Type, options: DecoderOptions = DecoderOptions()) throws -> T {
        return try T(from: _Decoder(value: self, codingPath: [], options: options))
    }
    
