(.module: [library [lux {"-" [Info Source Module Name]} [abstract [monoid {"+" [Monoid]}] [equivalence {"+" [Equivalence]}]] [control ["[0]" maybe ("[1]\[0]" monoid)] ["[0]" exception {"+" [exception:]}]] [data ["[0]" product] ["[0]" text ("[1]\[0]" equivalence)] [collection ["[0]" dictionary {"+" [Dictionary]}] ["[0]" list ("[1]\[0]" monoid)] ["[0]" set {"+" [Set]}]]] [macro ["[0]" template]] [world [net {"+" [URL]}] [file {"+" [Path]}]] [tool [compiler [meta [archive [descriptor {"+" [Module]}]]]]]]] [// ["[0]" runtime {"+" [Runtime]} ("[1]\[0]" equivalence)] ["[0]" dependency {"+" [Dependency]} ("[1]\[0]" equivalence)] ["[0]" artifact {"+" [Artifact]} ["[0]" type]] [repository [remote {"+" [Address]}]]]) (def: .public default_compiler Dependency [#dependency.artifact ["com.github.luxlang" "lux-jvm" "0.6.0"] #dependency.type type.jvm_library]) (type: .public Distribution (Variant #Repo #Manual)) (implementation: distribution_equivalence (Equivalence Distribution) (def: (= reference subject) (case [reference subject] (^template [] [[ ] true]) ([#Repo] [#Manual]) _ false))) (type: .public License [Text URL Distribution]) (def: license_equivalence (Equivalence License) ($_ product.equivalence text.equivalence text.equivalence ..distribution_equivalence)) (type: .public SCM URL) (type: .public Organization [Text URL]) (def: organization_equivalence (Equivalence Organization) ($_ product.equivalence text.equivalence text.equivalence)) (type: .public Email Text) (type: .public Developer [Text Email (Maybe Organization)]) (def: developer_equivalence (Equivalence Developer) ($_ product.equivalence text.equivalence text.equivalence (maybe.equivalence ..organization_equivalence))) (type: .public Contributor Developer) (type: .public Info (Record [#url (Maybe URL) #scm (Maybe SCM) #description (Maybe Text) #licenses (List License) #organization (Maybe Organization) #developers (List Developer) #contributors (List Contributor)])) (def: info_equivalence (Equivalence Info) ($_ product.equivalence (maybe.equivalence text.equivalence) (maybe.equivalence text.equivalence) (maybe.equivalence text.equivalence) (list.equivalence ..license_equivalence) (maybe.equivalence ..organization_equivalence) (list.equivalence ..developer_equivalence) (list.equivalence ..developer_equivalence))) (def: .public default_info Info [#url #.None #scm #.None #description #.None #licenses (list) #organization #.None #developers (list) #contributors (list)]) (type: .public Source Path) (def: .public default_source Source "source") (type: .public Target Path) (def: .public default_target Target "target") (def: .public default_repository Address "https://repo1.maven.org/maven2/") (type: .public Name Text) (def: .public default Name "") (type: .public Profile (Record [#parents (List Name) #identity (Maybe Artifact) #info (Maybe Info) #repositories (Set Address) #dependencies (Set Dependency) #compiler Dependency #sources (Set Source) #target Target #program (Maybe Module) #test (Maybe Module) #deploy_repositories (Dictionary Text Address) #java Runtime #js Runtime #python Runtime #lua Runtime #ruby Runtime])) (def: .public equivalence (Equivalence Profile) ($_ product.equivalence ... #parents (list.equivalence text.equivalence) ... #identity (maybe.equivalence artifact.equivalence) ... #info (maybe.equivalence ..info_equivalence) ... #repositories set.equivalence ... #dependencies set.equivalence ... #compiler dependency.equivalence ... #sources set.equivalence ... #target text.equivalence ... #program (maybe.equivalence text.equivalence) ... #test (maybe.equivalence text.equivalence) ... #deploy_repositories (dictionary.equivalence text.equivalence) ... #java runtime.equivalence ... #js runtime.equivalence ... #python runtime.equivalence ... #lua runtime.equivalence ... #ruby runtime.equivalence)) (implementation: .public monoid (Monoid Profile) (def: identity [#parents (list) #identity #.None #info #.None #repositories (set.empty text.hash) #dependencies (set.empty dependency.hash) #compiler default_compiler #sources (set.empty text.hash) #target ..default_target #program #.None #test #.None #deploy_repositories (dictionary.empty text.hash) #java runtime.default_java #js runtime.default_js #python runtime.default_python #lua runtime.default_lua #ruby runtime.default_ruby]) (def: (composite override baseline) (template.let [(!runtime ) [(if (runtime\= (value@ override)) (value@ baseline) (value@ override))]] [#parents (list\composite (value@ #parents baseline) (value@ #parents override)) #identity (maybe\composite (value@ #identity override) (value@ #identity baseline)) #info (maybe\composite (value@ #info override) (value@ #info baseline)) #repositories (set.union (value@ #repositories baseline) (value@ #repositories override)) #dependencies (set.union (value@ #dependencies baseline) (value@ #dependencies override)) #compiler (if (dependency\= ..default_compiler (value@ #compiler override)) (value@ #compiler baseline) (value@ #compiler override)) #sources (set.union (value@ #sources baseline) (value@ #sources override)) #target (if (text\= ..default_target (value@ #target baseline)) (value@ #target override) (value@ #target baseline)) #program (maybe\composite (value@ #program override) (value@ #program baseline)) #test (maybe\composite (value@ #test override) (value@ #test baseline)) #deploy_repositories (dictionary.merged (value@ #deploy_repositories override) (value@ #deploy_repositories baseline)) #java (!runtime #java runtime.default_java) #js (!runtime #js runtime.default_js) #python (!runtime #python runtime.default_python) #lua (!runtime #lua runtime.default_lua) #ruby (!runtime #ruby runtime.default_ruby)]))) (exception: .public no_identity)