This module allows let bindings to be introduced into the S-Expression syntax.
For example, instead of:
(concat (if (enabled x) (+ (width x) (width y)) (width y))
" meters")
this can be re-written with let bindings:
(let ((wy (width y))
(wboth (+ (width x) wy))
(wide (if (enabled x) wboth wy))
)
(concat wide " meters"))
As S-expressions grow larger, let-binding can help readability for those expressions. This module provides the ‘discoverLetBindings’ function that will convert an S-expression into one containing let-bound variables, and the inverse function ‘letExpand’ which will expand let-bound variables back into the expression.
id = letExpand . discoverLetBindings guide
The typical use is to add let bindings before serializing to disk, and then expand the bindings after reading from the disk but before passing to other processing; this process allows the application using the S-Expressions to be unaware of the let-binding compression, although it does not obtain corresponding advantages of the re-use of let-bound variables.