Skip to content
LIL: abstract interfaces and supporting concrete data-structures in Common Lisp
Common Lisp Racket
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
interface Rename package :core to :lil/core. May 14, 2016
pure Rename package :core to :lil/core. May 14, 2016
stateful Rename package :core to :lil/core. May 14, 2016
test remove lisp-machine styles May 14, 2016
.gitignore Drop support for ASDF earlier than 3.1. May 26, 2015
bibliography.scrbl Drop support for ASDF earlier than 3.1. May 26, 2015
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
version.text new minor release with some refactoring by Masataro Asai May 14, 2016


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.