(.module: [library [lux {"-" Type static public private} [abstract [equivalence {"+" Equivalence}] ["[0]" monad {"+" do}]] [data ["[0]" product] [format ["[0]F" binary {"+" Writer} ("[1]#[0]" monoid)]] [collection ["[0]" row {"+" Row}]]]]] ["[0]" // "_" ["[0]" modifier {"+" Modifier modifiers:}] ["[1][0]" constant {"+" UTF8} ["[1]/[0]" pool {"+" Pool Resource}]] ["[1][0]" index {"+" Index}] ["[1][0]" attribute {"+" Attribute}] ["[1][0]" type {"+" Type} [category {"+" Value}] [descriptor {"+" Descriptor}]]]) (type: .public Field (Rec Field (Record [#modifier (Modifier Field) #name (Index UTF8) #descriptor (Index (Descriptor Value)) #attributes (Row Attribute)]))) (modifiers: Field ["0001" public] ["0002" private] ["0004" protected] ["0008" static] ["0010" final] ["0040" volatile] ["0080" transient] ["1000" synthetic] ["4000" enum] ) (def: .public equivalence (Equivalence Field) ($_ product.equivalence modifier.equivalence //index.equivalence //index.equivalence (row.equivalence //attribute.equivalence))) (def: .public (writer field) (Writer Field) (`` ($_ binaryF#composite (~~ (template [ ] [( (value@ field))] [modifier.writer #modifier] [//index.writer #name] [//index.writer #descriptor] [(binaryF.row/16 //attribute.writer) #attributes])) ))) (def: .public (field modifier name type attributes) (-> (Modifier Field) UTF8 (Type Value) (Row Attribute) (Resource Field)) (do //constant/pool.monad [@name (//constant/pool.utf8 name) @descriptor (//constant/pool.descriptor (//type.descriptor type))] (in [#modifier modifier #name @name #descriptor @descriptor #attributes attributes])))