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

(.def .public documentation
  (.List $.Documentation)
  (list ($.module /._
                  "A method for abstracting I/O and effectful computations to make it safe while writing pure functional code.")

        ($.definition /.functor)
        ($.definition /.apply)
        ($.definition /.monad)

        ($.definition (/.IO it)
          "A type that represents synchronous, effectful computations that may interact with the outside world.")

        ($.definition /.io
          (format "Delays the evaluation of an expression, by wrapping it in an IO 'thunk'."
                  \n "Great for wrapping effectful computations (which will not be performed until the IO is 'run!').")
          [(io (exec
                 (log! msg)
                 "Some value..."))])

        ($.definition /.run!
          "A way to execute IO computations and perform their side-effects.")
        ))
