(.module: [library [lux {"-" local} [abstract [equivalence {"+" Equivalence}] [hash {"+" Hash}]] [control [pipe {"+" case>}]] [data ["[0]" name] [text ["%" format {"+" Format}]]] [math [number ["n" nat]]]]] ["[0]" / "_" ["[1][0]" variable {"+" Variable}]]) (type: .public Constant Name) (type: .public Reference (Variant {#Variable Variable} {#Constant Constant})) (implementation: .public equivalence (Equivalence Reference) (def: (= reference sample) (case [reference sample] (^template [ ] [[{ reference} { sample}] (# = reference sample)]) ([#Variable /variable.equivalence] [#Constant name.equivalence]) _ false))) (implementation: .public hash (Hash Reference) (def: &equivalence ..equivalence) (def: (hash value) (case value (^template [ ] [{ value} (|> value (# hash) (n.* ))]) ([2 #Variable /variable.hash] [3 #Constant name.hash]) ))) (template [ ] [(template: .public ( content) [(<| {} {} content)])] [local ..#Variable /variable.#Local] [foreign ..#Variable /variable.#Foreign] ) (template [ ] [(template: .public ( content) [(<| {} content)])] [variable ..#Variable] [constant ..#Constant] ) (def: .public self Reference (..local 0)) (def: .public format (Format Reference) (|>> (case> {#Variable variable} (/variable.format variable) {#Constant constant} (%.name constant))))