     let optional: [String]?
 
     static func decode(e: Extractor) throws -> Group {
-        return try build(Group.init)(
-            e <| "name",
-            e <| "floor",
-            e <||? "optional"
+        return try Group(
+            name: e <| "name",
+            floor: e <| "floor",
+            optional: e <||? "optional"
         )
     }
 }

    let uint64: UInt64

    static func decode(e: Extractor) throws -> Numbers {
        return try build(Numbers.init)(
            e <| "int",
            e <| "uint",
            e <| "int8",
            e <| "uint8",
            e <| "int16",
            e <| "uint16",
            e <| "int32",
            e <| "uint32",
            e <| "int64",
            e <| "uint64"
        )
    }
}

    let groups: [Group]

    static func decode(e: Extractor) throws -> Person {
        return try Person(
            firstName: e <| "first_name",
            lastName: e <| "last_name",
            age: e <| "age",
            int64: e <| "int64",
            height: e <| "height",
            float: e <| "float",
            bool: e <| "bool",
            number: e <| "number",
            rawValue: (e <| "raw_value" as Extractor).rawValue,
            nested: e <| [ "nested", "value" ],
            nestedDict: e <|-| [ "nested", "dict" ],
            array: e <|| "array",
            arrayOption: e <||? "arrayOption",
            dictionary: e <|-| "dictionary",
            dictionaryOption: e <|-|? "dictionaryOption",
            group: e <| "group",
            groups: e <|| "groups"
        )
    }
}
