Skip to content
LIL: abstract interfaces and supporting concrete data-structures in Common Lisp
Branch: master
Clone or download
fare Depend on fare-memoization 1.2.0
1.1.0 was incompatible. 1.0.0 should actually work, too,
but ASDF doesn't have a way to exclude just one bad release.
Latest commit ac2e006 Apr 1, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
core Depend on fare-memoization 1.2.0 Apr 1, 2018
pure Rename package :core to :lil/core. May 14, 2016
transform Rename package :core to :lil/core. May 14, 2016
.gitignore core/definition core/utility May 14, 2016
lil.asd Depend on fare-memoization 1.2.0 Apr 1, 2018
lisp-interface-library.asd Drop support for ASDF earlier than 3.1. May 26, 2015


LIL: abstract interfaces and concrete data structures in Common Lisp


  • 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.

You can’t perform that action at this time.