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

(documentation: /.left
  "Lifts value to the left side of a 2-variant.")

(documentation: /.right
  "Lifts value to the right side of a 2-variant.")

(documentation: /.either
  "Applies a function to either side of a 2-variant."
  [(either on_left on_right)])

(documentation: /.then
  "Applies functions to both sides of a 2-variant."
  [(then on_left on_right)])

(.def: .public documentation
  (.List $.Module)
  ($.module /._
            "Functionality for working with variants (particularly 2-variants)."
            [..left
             ..right
             ..either
             ..then
             ($.default /.lefts)
             ($.default /.rights)
             ($.default /.partition)
             ($.default /.equivalence)
             ($.default /.hash)]
            []))
