(.require [library [lux (.except Info Source Module) [abstract [monoid (.only Monoid)] [equivalence (.only Equivalence)]] [control ["[0]" maybe (.use "[1]#[0]" monoid)] ["[0]" exception (.only exception)]] [data ["[0]" product] ["[0]" text (.use "[1]#[0]" equivalence)] [collection ["[0]" set (.only Set)] ["[0]" dictionary (.only Dictionary)] ["[0]" list (.use "[1]#[0]" monoid) ["[0]" property (.use "[1]#[0]" monoid)]]]] [meta ["[0]" symbol] [macro ["^" pattern] ["[0]" template]] [compiler [meta ["[0]" cli ["[0]" compiler (.only Compiler)]] [archive [module [descriptor (.only Module)]]]]]] [world [net (.only URL)] [file (.only Path)]]]] [// ["[0]" runtime (.only Runtime) (.use "[1]#[0]" equivalence)] ["[0]" dependency (.only Dependency) (.use "[1]#[0]" equivalence)] ["[0]" artifact (.only Artifact) ["[0]" type]] [repository [remote (.only Address)]]]) (def .public default_lux Dependency [dependency.#artifact ["com.github.luxlang" "lux-jvm" "0.6.5"] dependency.#type type.jvm_library]) (type .public Distribution (Variant {#Repo} {#Manual})) (def distribution_equivalence (Equivalence Distribution) (implementation (def (= reference subject) (case [reference subject] (^.with_template [] [[{} {}] true]) ([#Repo] [#Manual]) _ false)))) (type .public License [Text URL Distribution]) (def license_equivalence (Equivalence License) (all product.equivalence text.equivalence text.equivalence ..distribution_equivalence)) (type .public SCM URL) (type .public Organization [Text URL]) (def organization_equivalence (Equivalence Organization) (all product.equivalence text.equivalence text.equivalence)) (type .public Email Text) (type .public Developer [Text Email (Maybe Organization)]) (def developer_equivalence (Equivalence Developer) (all product.equivalence text.equivalence text.equivalence (maybe.equivalence ..organization_equivalence))) (type .public Contributor Developer) (type .public Info (Record [#name (Maybe Text) #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) (all product.equivalence (maybe.equivalence text.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 [#name {.#None} #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) #lux Dependency #compilers (List Compiler) #sources (Set Source) #target Target #program (Maybe Symbol) #test (Maybe Symbol) #deploy_repositories (Dictionary Text Address) #configuration (property.List Text) #java Runtime #js Runtime #python Runtime #lua Runtime #ruby Runtime])) (def .public equivalence (Equivalence Profile) (all product.equivalence ... #parents (list.equivalence text.equivalence) ... #identity (maybe.equivalence artifact.equivalence) ... #info (maybe.equivalence ..info_equivalence) ... #repositories set.equivalence ... #dependencies set.equivalence ... #lux dependency.equivalence ... #compilers (list.equivalence compiler.equivalence) ... #sources set.equivalence ... #target text.equivalence ... #program (maybe.equivalence symbol.equivalence) ... #test (maybe.equivalence symbol.equivalence) ... #deploy_repositories (dictionary.equivalence text.equivalence) ... #configuration (property.equivalence text.equivalence) ... #java runtime.equivalence ... #js runtime.equivalence ... #python runtime.equivalence ... #lua runtime.equivalence ... #ruby runtime.equivalence)) (def .public monoid (Monoid Profile) (implementation (def identity [#parents (list) #identity {.#None} #info {.#None} #repositories (set.empty text.hash) #dependencies (set.empty dependency.hash) #lux ..default_lux #compilers (list) #sources (set.empty text.hash) #target ..default_target #program {.#None} #test {.#None} #deploy_repositories (dictionary.empty text.hash) #configuration property.empty #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#= (the override)) (the baseline) (the override))]] [#parents (list#composite (the #parents baseline) (the #parents override)) #identity (maybe#composite (the #identity override) (the #identity baseline)) #info (maybe#composite (the #info override) (the #info baseline)) #repositories (set.union (the #repositories baseline) (the #repositories override)) #dependencies (set.union (the #dependencies baseline) (the #dependencies override)) #lux (if (dependency#= ..default_lux (the #lux override)) (the #lux baseline) (the #lux override)) #compilers (list#composite (the #compilers baseline) (the #compilers override)) #sources (set.union (the #sources baseline) (the #sources override)) #target (if (text#= ..default_target (the #target baseline)) (the #target override) (the #target baseline)) #program (maybe#composite (the #program override) (the #program baseline)) #test (maybe#composite (the #test override) (the #test baseline)) #deploy_repositories (dictionary.composite (the #deploy_repositories override) (the #deploy_repositories baseline)) #configuration (property#composite (the #configuration override) (the #configuration 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)