(;module: lux (lux (control [eq #+ Eq] codec hash) (data [text "Text/" Monoid Eq]))) ## [Types] ## (type: Ident ## [Text Text]) ## [Functions] (do-template [ ] [(def: #export ( [module name]) (-> Ident Text) )] [module module] [name name] ) ## [Structures] (struct: #export _ (Eq Ident) (def: (= [xmodule xname] [ymodule yname]) (and (Text/= xmodule ymodule) (Text/= xname yname)))) (struct: #export _ (Codec Text Ident) (def: (encode [module name]) (case module "" name _ ($_ Text/compose module ";" name))) (def: (decode input) (if (Text/= "" input) (#;Left (Text/compose "Invalid format for Ident: " input)) (case (text;split-all-with ";" input) (^ (list name)) (#;Right ["" name]) (^ (list module name)) (#;Right [module name]) _ (#;Left (Text/compose "Invalid format for Ident: " input)))))) (struct: #export _ (Hash Ident) (def: eq Eq) (def: (hash [module name]) (let [(^open) text;Hash] (n/+ (hash module) (hash name)))))