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

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

        ($.definition /.memoization)
        ($.definition (/.Memo input output))

        ($.definition /.open
          "Memoization where the memoized results can be re-used accross invocations."
          [(open memo)])

        ($.definition /.closed
          (format "Memoization confined to a single invocation to the function (not counting any subsequent recursive invocations)."
                  \n "Memoized results will be re-used during recursive invocations, but cannot be accessed after the main invocation has ended.")
          [(closed hash memo)])

        ($.definition /.none
          (format "No memoization at all."
                  \n "This is useful as a test control when measuring the effect of using memoization.")
          [(none hash memo)])
        ))
