(.module: [lux #* [control [equivalence (#+ Equivalence)] [codec (#+ Codec)] hash] [data ["." text ("text/." Monoid Hash)]]]) ## [Types] ## (type: Ident ## [Text Text]) ## [Functions] (do-template [ ] [(def: #export ( [module name]) (-> Ident Text) )] [module module] [name name] ) ## [Structures] (structure: #export _ (Equivalence Ident) (def: (= [xmodule xname] [ymodule yname]) (and (text/= xmodule ymodule) (text/= xname yname)))) (structure: #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)))))) (structure: #export _ (Hash Ident) (def: eq Equivalence) (def: (hash [module name]) (n/+ (text/hash module) (text/hash name))))