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

    }
    
    @inlinable
    func decode<T>(_ type: T.Type) throws -> T where T : Decodable {
        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 container<Key: Swift.CodingKey>(keyedBy type: Key.Type) throws -> KeyedDecodingContainer<Key> {
            
            guard !value.isNil else { throw DataPack.DecodeError.valueNotFound }
            guard case let .dictionary(dictionary) = value.base else { throw DataPack.DecodeError.unsupportedType }
