     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 groups: [Group]

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

    let uint64: UInt64

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