(.require
 [library
  [lux (.except)
   ["$" documentation]
   [data
    [text (.only \n)
     ["%" \\format (.only format)]]
    [collection
     ["[0]" list]]]]]
 [\\library
  ["[0]" /]])

(def .public documentation
  (List $.Documentation)
  (let [statement (list ($.definition /.Statement)
                        ($.definition /.Label)
                        ($.definition /.label)
                        ($.definition /.statement)
                        ($.definition /.then)
                        ($.definition /.local)
                        ($.definition /.set)
                        ($.definition /.let)
                        ($.definition /.local/1)
                        ($.definition /.if)
                        ($.definition /.when)
                        ($.definition /.while)
                        ($.definition /.repeat)
                        ($.definition /.for_in)
                        ($.definition /.for_step)
                        ($.definition /.return)
                        ($.definition /.closure)
                        ($.definition /.function)
                        ($.definition /.local_function)
                        ($.definition /.break)
                        ($.definition /.set_label)
                        ($.definition /.go_to)
                        )
        arithmetic (list ($.definition /.=)
                         ($.definition /.<)
                         ($.definition /.<=)
                         ($.definition /.>)
                         ($.definition /.>=)
                         ($.definition /.+)
                         ($.definition /.-)
                         ($.definition /.*)
                         ($.definition /.^)
                         ($.definition /./)
                         ($.definition /.//)
                         ($.definition /.%))
        bitwise (list ($.definition /.bit_or)
                      ($.definition /.bit_and)
                      ($.definition /.bit_xor)
                      ($.definition /.bit_shl)
                      ($.definition /.bit_shr))]
    (list.partial ($.module /._
                            "")

                  ($.definition /.Code)
                  ($.definition /.equivalence)
                  ($.definition /.hash)
                  ($.definition /.manual)
                  ($.definition /.code)
                  ($.definition /.Expression)
                  ($.definition /.Computation)
                  ($.definition /.Location)
                  ($.definition /.Literal)
                  ($.definition /.Var)
                  ($.definition /.Access)
                  ($.definition /.nil)
                  ($.definition /.boolean)
                  ($.definition /.int)
                  ($.definition /.float)
                  ($.definition /.string)
                  ($.definition /.multi)
                  ($.definition /.array)
                  ($.definition /.table)
                  ($.definition /.item)
                  ($.definition /.the)
                  ($.definition /.length)
                  ($.definition /.apply)
                  ($.definition /.do)
                  ($.definition /.concat)
                  ($.definition /.or)
                  ($.definition /.and)
                  ($.definition /.not)
                  ($.definition /.opposite)
                  ($.definition /.var)
                  ($.definition /.error/1)
                  ($.definition /.print/1)
                  ($.definition /.require/1)
                  ($.definition /.type/1)
                  ($.definition /.ipairs/1)
                  ($.definition /.error/2)

                  (list.together
                   (list statement
                         arithmetic
                         bitwise))
                  )))
