(.using
  [library
   [lux "*"
    ["$" documentation {"+" documentation:}]
    [data
     [text {"+" \n}
      ["%" format {"+" format}]]]
    [macro
     ["[0]" template]]]]
  [\\library
   ["[0]" /]])

(documentation: /.Property
  "A property in the environment.")

(documentation: /.Environment
  "An abstraction for environment variables of a program.")

(documentation: (/.Parser it)
  "A parser of environment variables of a program.")

(documentation: /.empty
  "An empty environment.")

(documentation: /.property
  ""
  [(property name)])

(documentation: /.result
  (format "Executes a parser against the given environment variables."
          \n "Does not check whether all environment variables were parsed, since they're usually an open set.")
  [(result parser environment)])

(.def: .public documentation
  (.List $.Module)
  ($.module /._
            ""
            [..Property
             ..Environment
             ..Parser
             ..empty
             ..property
             ..result
             ($.default /.unknown_property)]
            []))
