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

(def .public documentation
  (List $.Documentation)
  (list ($.module /._
                  "")

        ($.definition (/.Object brand))
        ($.definition /.None)
        ($.definition /.Dict)
        ($.definition /.Function)
        ($.definition /.Boolean)
        ($.definition /.Integer)
        ($.definition /.Float)
        ($.definition /.String)

        ($.definition /.import
          "Easily import types, methods, functions and constants."
          [(import os
             "[1]::[0]"
             ("static" F_OK Integer)
             ("static" R_OK Integer)
             ("static" W_OK Integer)
             ("static" X_OK Integer)

             ("static" mkdir [String] "io" "try" "?" Any)
             ("static" access [String Integer] "io" "try" Boolean)
             ("static" remove [String] "io" "try" "?" Any)
             ("static" rmdir [String] "io" "try" "?" Any)
             ("static" rename [String String] "io" "try" "?" Any)
             ("static" listdir [String] "io" "try" (Array String)))

           (import os/path
             "[1]::[0]"
             ("static" isfile [String] "io" "try" Boolean)
             ("static" isdir [String] "io" "try" Boolean)
             ("static" sep String)
             ("static" getsize [String] "io" "try" Integer)
             ("static" getmtime [String] "io" "try" Float))])

        ($.definition /.function
          (format "Allows defining closures/anonymous-functions in the form that Python expects."
                  \n "This is useful for adapting Lux functions for usage by Python code.")
          [(is ..Function
               (function [left right]
                 (do_something (as Foo left)
                               (as Bar right))))])
        ))
