From 629824bf726b723afab599f1637f68dbf997d2a9 Mon Sep 17 00:00:00 2001
From: "Sunrim KIM (keen)" <3han5chou7@gmail.com>
Date: Thu, 23 Oct 2014 15:59:35 +0900
Subject: [PATCH] add generated contrib.rst You need to run `make doc` before
you commit when you have edited docs under contrib/.
---
docs/contrib.rst | 141 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 141 insertions(+)
create mode 100644 docs/contrib.rst
diff --git a/docs/contrib.rst b/docs/contrib.rst
new file mode 100644
index 00000000..f8b47417
--- /dev/null
+++ b/docs/contrib.rst
@@ -0,0 +1,141 @@
+Contrib Libraries (a.k.a nitros)
+===============================
+
+Scheme standard libraries
+-------------------------
+
+- (scheme write)
+- (scheme cxr)
+- (scheme file)
+- (scheme inexact)
+- (scheme time)
+- (scheme process-context)
+- (scheme load)
+- (scheme lazy)
+
+(picrin control)
+----------------
+
+Delimited control operators.
+
+- **(reset h)**
+- **(shift k)**
+
+(picrin pretty-print)
+---------------------
+
+Pretty-printer.
+
+- **(pretty-print obj)**
+
+ Prints obj with human-readable indention to current-output-port.
+
+
+(picrin regexp)
+---------------
+
+- **(regexp ptrn [flags])**
+
+ Compiles pattern string into a regexp object. A string flags may contain any of #\g, #\i, #\m.
+
+- **(regexp? obj)**
+
+ Judges if obj is a regexp object or not.
+
+- **(regexp-match re input)**
+
+ Returns two values: a list of match strings, and a list of match indeces.
+
+- **(regexp-replace re input txt)**
+- **(regexp-split re input)**
+
+
+SRFI libraries
+--------------
+
+- `(srfi 1)
+ `_
+
+ List library.
+
+- `(srfi 8)
+ `_
+
+ ``receive`` macro.
+
+- `(srfi 17)
+ `_
+
+ Generalized set!
+
+- `(srfi 26)
+ `_
+
+ Cut/cute macros.
+
+- `(srfi 43)
+ `_
+
+ Vector library.
+
+- `(srfi 60)
+ `_
+
+ Bitwise operations.
+
+- `(srfi 95)
+ `_
+
+ Sorting and Marging.
+
+- `(srfi 111)
+ `_
+
+ Boxes
+
+(picrin control list)
+---------------------
+
+Monadic list operators.
+
+The triple of for/in/yield enables you to write a list operation in a very easy and simple code. One of the best examples is list composition::
+
+ (for (let ((a (in '(1 2 3)))
+ (b (in '(2 3 4))))
+ (yield (+ a b))))
+
+ ;=> (5 6 7 6 7 8 7 8 9)
+
+All monadic operations are done in *for* macro. In this example, *in* operators choose an element from the given lists, a and b are bound here, then *yielding* the sum of them. Because a and b are values moving around in the list elements, the expression (+ a b) can become every possible result. *yield* operator is a operator that gathers the possibilities into a list, so *for* macro returns a list of 3 * 3 results in total. Since expression inside *for* macro is a normal expression, you can write everything that you can write elsewhere. The code below has perfectly the same effect to above one::
+
+ (for (yield (+ (in '(1 2 3))
+ (in '(4 5 6)))))
+
+The second best exmaple is filtering. In the next case, we show that you can do something depending on the condition of chosen elements::
+
+ (for (let ((x (in (iota 10))))
+ (if (even? x)
+ (yield x)
+ (null))))
+
+ ;=> (0 2 4 6 8)
+
+This expression is equivalent to ``(filter even? (iota 10))`` but it is more procedual and non-magical.
+
+- **(for expr)**
+
+ [Macro] Executes expr in a list monad context.
+
+- **(in list)**
+
+ Choose a value from list. *in* function must only appear in *for* macro. The delimited continuation from the position of *in* function to the outside *for* macro is executed for each element in list. If list contains no values, that is ``(in '())``, the continuation is discarded.
+
+- **(yield value)**
+
+ Yields value from the monad context. The result of *for* will be a list of yielded values.
+
+- **(null . value)**
+
+ Returns ``()`` whatever value is given. The identity element of list composition. This operator corresponds to Haskell's fail method of Monad class.
+
+