@hackage / s-cargot-letbind

Enables let-binding and let-expansion for s-cargot defined S-expressions.

Latest0.2.5.0

About

Metadata

  • Last updated , by ryanglscott
  • License ISC
  • Maintained by: kquick@galois.com

  • Lottery factor: 2

Links

Installation

Tested Compilers

  1. 9.6.1
  2. 9.4.4
  3. 9.2.7
  4. 8.10.7
  5. 8.8.4

Readme

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.