Personal tools

Applications and libraries/Compilers and interpreters

From HaskellWiki

< Applications and libraries(Difference between revisions)
Jump to: navigation, search
(Updated name for Haskell CHR, added links to STM-based CHR implementation, by Michael Stahl; and CCHR: STM-based CHR implementation by Lam and Sulzmann, and added a description for CCHR.)
(Added Timber)

Revision as of 15:19, 9 December 2008

Haskell, with its support for pattern matching on data structures, generic structure traversals, and expressive type system, is popular for implementing compilers and interpreters. Here's a selection of compilers and interpreters implemented in Haskell.


1 Large languages

1.1 Haskell

GHC, The Glasgow Haskell Compiler, is written in Haskell
Yhc, The York Haskell Compiler, is written in Haskell
Jhc is a Haskell compiler which aims to produce the most efficient programs possible via whole program analysis
A compiler for Haskell 98, written in Haskell
The purpose of the EHC project is to provide a description of a Haskell compiler which is as understandable as possible so it can be used for education as well as research.
A parallel version of Haskell from MIT.

1.1.1 Helium

A Haskell subset for educational purposes

1.1.2 Generic Haskell

Generic Haskell
An extension of Haskell that supports generic programming

1.1.3 Data Field Haskell

Data Field Haskell
A dialect of the functional programming language Haskell that provides an instance of data fields

1.1.4 Eden

A Haskell dialect for parallel programming

1.1.5 Chameleon

A Haskell-style language which implements the ideas described in a ``A Theory of Overloading``

1.1.6 CHR (Constraint Handling Rules)

Haskell CHR
A concurrent committed-choice constraint logic programming language, implemented using GHC's software transactional memory. According to the site referenced by the above-mentioned link, "It also contains an implementation of WAM for Haskell, so Prolog-style terms with variables are now possible."
STM-based CHR implementation, by Michael Stahl (gzipped TAR file)
CCHR: STM-based CHR implementation by Lam and Sulzmann
According to the site referenced by the above-mentioned link, "CCHR is an experimental concurrent implementation of Constraint Handling Rules, designed to exploit concurrency and parallelism explicitly. CCHR is implemented in Haskell, with software transactional memory to manage synchronization of multiple solver threads working on the same problem. Constraint Handling Rules (CHR) is a concurrent committed choice constraint logic programming language to describe transformations (rewritings) among multi-sets of constraints (atomic formulae). CHR naturally support concurrent programming. Conjunction of constraints can be regarded as interacting collections of multiple asynchronous agents or processes. Their interaction is specified via transformation rules which can be applied simultaneously if the transformation rules do not interfere. Hence, one would expect to run CHR faster by executing transformation rules in parallel on a multi-core machine architecture. CCHR exactly allows such concurrency while solving CHR problems and exhibits significant speed up in most problems when executed on multi-core systems."

1.2 Liskell

Liskell is Haskell on the inside but looks like Lisp on the outside

1.3 Perl

Pugs is an implementation of Perl 6, written in Haskell. It aims to implement the full Perl6 specification.

1.4 Python

Haspy is an implementation of Python in Haskell

1.5 Ruby

RType is a Ruby interpreter written in Haskell

1.6 Flapjax

Flapjax is a language for functional reactive programming of AJAX web applications, whose compiler (source) is written in Haskell.

1.7 Scheme

Write Yourself a Scheme in 48 Hours
A small Scheme interpreter
A Scheme in Haskell

1.8 Lisp

A Lisp Interpreter In Haskell
A small lisp interpreter written in Haskell

1.9 Emacs Lisp

The beginnings of an Emacs lisp compiler/interpreter.

1.10 Epigram

Epigram is a prototype dependently typed functional programming language

1.11 Curry

The Münster Curry Compiler
A native code compiler for the declarative multi-paradigm language Curry, written in Haskell

1.12 Bluespec

A compiler for a hardware description language translating a Haskell-like (but with System Verilog syntax these days) language to Verilog.

1.13 Cayenne

A compiler for a Haskell-like language with dependent types.

1.14 Agda

A Cayenne-like programming language and proof assistant.

1.15 PolyP

A polytypic programming language

1.16 Forth

Harrorth, a Forth interpreter

1.17 Eiffel

Dynamic binding in Eiffel
A model of dynamic binding in ECMA Eiffel, in Haskell

1.18 Crouton

Crouton is a small but fairly complete functional programming language for querying and transforming parsed manuscripts, such as the PPCME. It is intended as an alternative to Corpus Search, based on a different philosophy. It is written in (and largely based on) the very nice functional programming language Haskell using the Parsec library

1.19 JavaScript

HJS is a JavaScript parser written in Haskell. Available from HackageDB.

1.20 TCL

Hiccup is a minimalistic TCL interpreter. It tries to be relatively simple, relatively efficient, and mostly correct.

1.21 Smalltalk

HST is a Smalltalk implementation in Haskell. See here for more information

1.22 Disciple

Disciple is an explicitly lazy dialect of Haskell which supports destructive update, computational effects, type directed field projections and some other useful things.

1.23 Timber

Timber is a modern language for building event-driven systems, based around the notion of reactive objects. It is also a purely functional language derived from Haskell, although with a strict evaluation semantics. The Timber compiler currently runs on Linux and MacOS X platforms, but uses gcc as its back-end so it should be easily portable to most POSIX-like environments.

2 Small languages

2.1 Baskell

An interpreter for a small functional programming language. Supports strict and non-strict evaluation, and type inference. Useful for teaching purposes.

2.2 LambdaPi

LambdaPi, An Implementation of a Dependently Typed Lambda Calculus

2.3 Unlambda

An implementation of Unlambda in Haskell

2.4 BF

An implementation of BF in Haskell

2.5 Lambda calculus

4 lambda calculus implementations
With code, by Lennart Augustsson.
An implementation of the untyped lambda calculus

2.6 QML, a functional quantum programming language

QML: A Functional Quantum Programming Language project
It is implemented in Haskell.
For online material on quantum computing in general, see Quantum Computation course held by John Preskill.

2.7 HQL - HHM's Quantified Lambda

Hernan's Quantified Lambda
a small functional language, whose expressions can involve the use of quantifier operators

2.8 Atom

Atom is a small HDL that compiles conditional term rewriting systems down to Verilog RTL.

2.9 AL (Assignment Language)

It is used for teaching purposes in at the Technical University of Vienna.
An interpreter implemented in Haskell is described in ALI - an AL Interpreter implemented in Haskell written by Peter Robinson.

2.10 Whitespace

A language that uses whitespace characters as language elements and ignores all non-whitespace characters

2.11 LIPL

An interpreter for a tiny functional programming language. It features Hindley-Milner style type inference.

3 Debuggers

A declarative debugger for OBJ-like languages
See also Debugging.

This page contains a list of libraries and tools in a certain category. For a comprehensive list of such pages, see Applications and libraries.