Lispers who love Haskell can be heard saying that Haskell is Lisp's missing M-Expression implementation. Though that statement embodies a great deal of poetic license (an perhaps romanticism), there is a very natural fit between the two.
In practical terms, there are two areas of intersection between Haskell and Lisp:
- Haskell implementations written in Lisp (there seems to be only one of these), and
- Lisps written in Haskell (much more common)
There is a github organization which tracks these projects, though more detail is given below.
Also, there is a twitter account dedicated to all things Haskell+Lisp.
Haskells in Lisp
- Yale Haskell - written between 1991 and 1993; was built from sources using CMU Common Lisp, Lucid Common Lisp, Allegro Common Lisp, Harlequin LispWorks, Kyoto Common Lisp. The last did suffer from performance problems, though. Compiled binaries were available for Sparc systems running SunOS 4.1.2 and Sparc 10's (sun4m) running 4.1.3. In the last release, the full functionality of X windows was made available at the Haskell level.
Lisps in Haskell
Lisp Syntax for Haskell:
- Liskell - From the ILC 2007 paper: "Liskell uses an extremely minimalistic parse tree and shifts syntactic classification of parse tree parts to a later compiler stage to give parse tree transformers the opportunity to rewrite the parse trees being compiled. These transformers can be user supplied and loaded dynamically into the compiler to extend the language." Has not received attention for a while, though the author has stated that he continues to think about it and has future plans for it.
- Lisk - Inspired by Liskell, but with the intent of making different design choices. Uses the haskell-src-exts AST and pretty printer to convert Lisk code to Haskell. 100% abandoned; interested parties are actively (and nicely!) discouraged by the original author. The name is being bandied about for a potential new Haskell+Lisp effort (blessed by the original author).
The following Lisps are not wrappers around Haskell, but rather their own languages. Some may offer interop with FFI calls.
- Husk Scheme - Implements a superset of the R5RS standard and a large portion of the R7RS-small language. Advanced features are provided including continuations, hygienic macros, libraries, and a full numeric tower. Actively maintained.
- Leesp - Like Husk, this was written as part of the popular Scheme/Haskell tutorial. Actively maintained.
- Blaise - Slava Akhmechet's Lisp from 2006. Recently updated by community members to run on the lastest version of GHC. The original author likely disavows any interest :-)