(.module: [library [lux (#- Type static) [abstract [equivalence (#+ Equivalence)] ["." monad (#+ do)]] [data ["." product] [format [".F" binary (#+ Writer) ("#\." monoid)]] [collection ["." row (#+ Row)]]]]] ["." // #_ ["." modifier (#+ Modifier modifiers:)] ["#." constant (#+ UTF8) ["#/." pool (#+ Pool Resource)]] ["#." index (#+ Index)] ["#." attribute (#+ Attribute)] ["#." type (#+ Type) [category (#+ Value)] [descriptor (#+ Descriptor)]]]) (type: #export #rec Field {#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: #export equivalence (Equivalence Field) ($_ product.equivalence modifier.equivalence //index.equivalence //index.equivalence (row.equivalence //attribute.equivalence))) (def: #export (writer field) (Writer Field) (`` ($_ binaryF\compose (~~ (template [ ] [( (get@ field))] [modifier.writer #modifier] [//index.writer #name] [//index.writer #descriptor] [(binaryF.row/16 //attribute.writer) #attributes])) ))) (def: #export (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))] (wrap {#modifier modifier #name @name #descriptor @descriptor #attributes attributes})))