summaryrefslogtreecommitdiff
path: root/elpa/llama-0.6.2/README-elpa
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/llama-0.6.2/README-elpa')
-rw-r--r--elpa/llama-0.6.2/README-elpa71
1 files changed, 71 insertions, 0 deletions
diff --git a/elpa/llama-0.6.2/README-elpa b/elpa/llama-0.6.2/README-elpa
new file mode 100644
index 0000000..809f657
--- /dev/null
+++ b/elpa/llama-0.6.2/README-elpa
@@ -0,0 +1,71 @@
+1 Llama — Compact syntax for short lambda
+═════════════════════════════════════════
+
+ This package implements a macro named `##', which provides a compact
+ way to write short `lambda' expressions.
+
+ The signature of the macro is `(## FN &rest BODY)' and it expands to a
+ `lambda' expression, which calls the function `FN' with the arguments
+ `BODY' and returns the value of that. The arguments of the `lambda'
+ expression are derived from symbols found in `BODY'.
+
+ Each symbol from `%1' through `%9', which appears in an unquoted part
+ of `BODY', specifies a mandatory argument. Each symbol from `&1'
+ through `&9', which appears in an unquoted part of `BODY', specifies
+ an optional argument. The symbol `&*' specifies extra (`&rest')
+ arguments.
+
+ The shorter symbol `%' can be used instead of `%1', but using both in
+ the same expression is not allowed. Likewise `&' can be used instead
+ of `&1'. These shorthands are not recognized in function position.
+
+ To support binding forms that use a vector as `VARLIST' (such as
+ `-let' from the `dash' package), argument symbols are also detected
+ inside of vectors.
+
+ The space between `##' and `FN' can be omitted because `##' is
+ read-syntax for the symbol whose name is the empty string. If you
+ prefer you can place a space there anyway, and if you prefer to not
+ use this somewhat magical symbol at all, you can instead use the
+ alternative name `llama'.
+
+ Instead of:
+
+ ┌────
+ │ (lambda (a &optional _ c &rest d)
+ │ (foo a (bar c) d))
+ └────
+
+ you can use this macro and write:
+
+ ┌────
+ │ (##foo %1 (bar &3) &*)
+ └────
+
+ which expands to:
+
+ ┌────
+ │ (lambda (%1 &optional _&2 &3 &rest &*)
+ │ (foo %1 (bar &3) &*))
+ └────
+
+ Unused trailing arguments and mandatory unused arguments at the border
+ between mandatory and optional arguments are also supported:
+
+ ┌────
+ │ (##list %1 _%3 &5 _&6)
+ └────
+
+ becomes:
+
+ ┌────
+ │ (lambda (%1 _%2 _%3 &optional _&4 &5 _&6)
+ │ (list %1 &5))
+ └────
+
+ Note how `_%3' and `_&6' are removed from the body, because their
+ names begin with an underscore. Also note that `_&4' is optional,
+ unlike the explicitly specified `_%3'.
+
+ Consider enabling `llama-fontify-mode' to highlight `##' and its
+ special arguments.