LIL: abstract interfaces and supporting concrete data-structures in Common Lisp
Common Lisp Racket
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
core
interface
pure
stateful
test
transform
.gitignore
README.md
bibliography.scrbl
lil.asd
lisp-interface-library.asd
version.text

README.md

lisp-interface-library

LIL: abstract interfaces and concrete data structures in Common Lisp

Features

  • LIL nicely combines ad-hoc polymorphism (CLOS-powered object oriented programming) and parametric polymorphism (as in ML functors, C++ templates, etc.). To our knowledge, only scalaz matches the expressiveness of LIL.

  • LIL sports both pure (persistent, immutable) and stateful (ephemeral, mutable) variants of data structures in Interface-Passing Style. This variants are in the respective packages PURE and STATEFUL; a common core is shared in package INTERFACE, covering read-only operations; automatic transforms allow bridging from stateful to pure and back.

  • LIL supports data structures in traditional Object-Oriented Style, in both stateful (the usual Object-Oriented kind) and pure variants, in the respective packages POSH and CLASSY. There too, automatic transforms to go from Interface-Passing Style to traditional Object-Oriented Style and back.

Building it

LIL needs to be built using ASDF 3.1 or later:

Indeed, LIL notably relies on ASDF 3.1's package-inferred-system. whereby instead of dependencies being listed in a central .asd file, each source file has a defpackage form from which the dependencies are deduced. While we think it's a great way to write Lisp code, you don't have to use it in your own code to use LIL.

LIL also depends on fare-utils, fare-memoization, closer-mop, alexandria.

Using it

See test/pure-map.lisp and test/stateful-map.lisp for examples of how to use LIL. Unhappily, no one is working on documentation at this time.