Skip to content

GaloisInc/s-cargot-letbind

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.