Difference between revisions of "Applications and libraries/Compilers and interpreters"

From HaskellWiki
Jump to navigation Jump to search
(more compilers)
(→‎Small languages: Added PureScript)
(45 intermediate revisions by 14 users not shown)
Line 1: Line 1:
 
Haskell, with its support for pattern matching on data structures,
 
Haskell, with its support for pattern matching on data structures,
 
generic structure traversals, and expressive type system, is popular for
 
generic structure traversals, and expressive type system, is popular for
implementing compilers and interpreters. Here's a selection of languages
+
implementing compilers and interpreters. Here's a selection of compilers
implemented in Haskell.
+
and interpreters implemented in Haskell.
   
=Large languages=
+
==Large languages==
   
==Haskell==
+
===Haskell===
   
 
;[http://haskell.org/ghc GHC]
 
;[http://haskell.org/ghc GHC]
Line 19: Line 19:
 
;[http://haskell.org/nhc98 nhc98]
 
;[http://haskell.org/nhc98 nhc98]
 
:A compiler for Haskell 98, written in Haskell
 
:A compiler for Haskell 98, written in Haskell
  +
  +
;[http://www.cs.uu.nl/groups/ST/Ehc/WebHome Ehc]
  +
: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.
  +
  +
;[http://www.cs.uu.nl/wiki/UHC UHC]
  +
:UHC is the Utrecht Haskell Compiler. UHC supports almost all Haskell 98 features plus experimental extensions. The compiler runs under Mac OS X, Windows (Cygwin), and various Unix flavors.
   
 
;[http://www.csg.lcs.mit.edu/projects/languages/ph.shtml pH]
 
;[http://www.csg.lcs.mit.edu/projects/languages/ph.shtml pH]
 
:A parallel version of Haskell from MIT.
 
:A parallel version of Haskell from MIT.
   
  +
===Helium===
 
  +
====Helium====
  +
 
;[http://www.cs.uu.nl/helium/ Helium]
 
;[http://www.cs.uu.nl/helium/ Helium]
 
:A Haskell subset for educational purposes
 
:A Haskell subset for educational purposes
   
  +
===Generic Haskell===
 
  +
====Generic Haskell====
  +
 
;[http://generic-haskell.org/ Generic Haskell]
 
;[http://generic-haskell.org/ Generic Haskell]
 
:An extension of Haskell that supports generic programming
 
:An extension of Haskell that supports generic programming
   
  +
===Data Field Haskell===
 
  +
====Data Field Haskell====
  +
 
;[http://www.mrtc.mdh.se/projects/DFH/ Data Field Haskell]
 
;[http://www.mrtc.mdh.se/projects/DFH/ Data Field Haskell]
 
:A dialect of the functional programming language Haskell that provides an instance of data fields
 
:A dialect of the functional programming language Haskell that provides an instance of data fields
   
  +
===Eden===
 
  +
====Eden====
  +
 
;[http://www.mathematik.uni-marburg.de/~eden/ Eden]
 
;[http://www.mathematik.uni-marburg.de/~eden/ Eden]
 
:A Haskell dialect for parallel programming
 
:A Haskell dialect for parallel programming
   
  +
===Chameleon===
 
  +
====Chameleon====
;[http://www.comp.nus.edu.sg/~sulzmann/chameleon/ Chameleon]
 
  +
  +
;[http://taichi.ddns.comp.nus.edu.sg/taichiwiki/ChameleonHomePage Chameleon]
 
:A Haskell-style language which implements the ideas described in a ``A Theory of Overloading``
 
:A Haskell-style language which implements the ideas described in a ``A Theory of Overloading``
   
  +
==Perl==
 
  +
====CHR (Constraint Handling Rules)====
  +
  +
;[http://www.cs.mu.oz.au/~gjd/haskellchr/ 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."
  +
  +
;[http://www.cs.kuleuven.be/~dtai/projects/CHR/systems/stmchr-0.1.tar.gz STM-based CHR implementation, by Michael Stahl] (gzipped TAR file)
  +
  +
;[http://taichi.ddns.comp.nus.edu.sg/taichiwiki/CCHR 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."
  +
  +
  +
=== Elm ===
  +
  +
;[http://elm-lang.org/ Elm]
  +
:The Elm programming language aims to make web development more pleasant. Elm is a type-safe, functional reactive language that compiles to HTML, CSS, and JavaScript.
  +
  +
  +
===BASIC===
  +
  +
;[http://hackage.haskell.org/package/BASIC BASIC]
  +
:A simplified version of the original BASIC embedded in Haskell.
  +
  +
  +
===Liskell===
  +
  +
;[http://web.archive.org/web/20120609122549/http://www.liskell.org/ Liskell]
  +
:Liskell is Haskell on the inside but looks like Lisp on the outside
  +
  +
===Perl===
   
 
;[http://pugscode.org Pugs]
 
;[http://pugscode.org Pugs]
 
:Pugs is an implementation of Perl 6, written in Haskell. It aims to implement the full Perl6 specification.
 
:Pugs is an implementation of Perl 6, written in Haskell. It aims to implement the full Perl6 specification.
   
  +
==Ruby==
 
  +
===Python===
  +
  +
;[http://hackage.haskell.org/package/berp-0.0.1 Berp]
  +
:Berp is an implementation of Python 3 in Haskell.
  +
  +
;[http://code.google.com/p/haspy/ haspy]
  +
:Haspy is an implementation of Python in Haskell
  +
  +
  +
===Ruby===
   
 
;[http://raa.ruby-lang.org/project/rtype/ RType]
 
;[http://raa.ruby-lang.org/project/rtype/ RType]
 
:RType is a Ruby interpreter written in Haskell
 
:RType is a Ruby interpreter written in Haskell
   
  +
==Scheme==
 
  +
===Flapjax===
  +
;[http://www.flapjax-lang.org/ Flapjax]
  +
:Flapjax is a language for functional reactive programming of AJAX web applications, whose compiler ([http://www.flapjax-lang.org/download/flapjax-source.tar.gz source]) is written in Haskell.
  +
  +
  +
===Scheme===
   
 
;[http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html Write Yourself a Scheme in 48 Hours]
 
;[http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html Write Yourself a Scheme in 48 Hours]
 
:A small Scheme interpreter
 
:A small Scheme interpreter
   
  +
;[http://www.korgwal.com/haskeem/ A Scheme in Haskell]
==Lisp==
 
  +
  +
  +
===Lisp===
   
 
;[http://www.defmacro.org/ramblings/lisp-in-haskell.html A Lisp Interpreter In Haskell]
 
;[http://www.defmacro.org/ramblings/lisp-in-haskell.html A Lisp Interpreter In Haskell]
 
:A small lisp interpreter written in Haskell
 
:A small lisp interpreter written in Haskell
   
  +
== Emacs Lisp ==
 
  +
=== Emacs Lisp ===
  +
 
;[http://www.codersbase.com/index.php/helisp Helisp]
 
;[http://www.codersbase.com/index.php/helisp Helisp]
 
:The beginnings of an Emacs lisp compiler/interpreter.
 
:The beginnings of an Emacs lisp compiler/interpreter.
   
  +
==Epigram==
 
  +
===Epigram===
   
 
;[http://www.e-pig.org/ Epigram]
 
;[http://www.e-pig.org/ Epigram]
 
:Epigram is a prototype dependently typed functional programming language
 
:Epigram is a prototype dependently typed functional programming language
   
  +
==Curry==
 
  +
===Curry===
   
 
;[http://danae.uni-muenster.de/~lux/curry/ The Münster Curry Compiler]
 
;[http://danae.uni-muenster.de/~lux/curry/ The Münster Curry Compiler]
 
:A native code compiler for the declarative multi-paradigm language Curry, written in Haskell
 
:A native code compiler for the declarative multi-paradigm language Curry, written in Haskell
   
  +
==Bluespec==
 
  +
===Bluespec===
 
;[http://www.bluespec.com Bluespec]
 
;[http://www.bluespec.com Bluespec]
 
:A compiler for a hardware description language translating a Haskell-like (but with System Verilog syntax these days) language to Verilog.
 
:A compiler for a hardware description language translating a Haskell-like (but with System Verilog syntax these days) language to Verilog.
   
==Cayenne==
 
;[http://www.depedent-types.org/ Cayenne]
 
:A compiler for a Haskell-like language with depedent types.
 
   
==Agda==
+
===Cayenne===
  +
;[http://www.cs.chalmers.se/~catarina/agda/ Agda]
 
  +
;[http://www.augustsson.net/Darcs/Cayenne/html/ Cayenne]
  +
:A compiler for a Haskell-like language with dependent types.
  +
  +
  +
===Agda===
  +
  +
;[http://wiki.portal.chalmers.se/agda/pmwiki.php Agda]
 
:A Cayenne-like programming language and proof assistant.
 
:A Cayenne-like programming language and proof assistant.
   
  +
==PolyP==
 
  +
===PolyP===
  +
 
;[http://www.cs.chalmers.se/~patrikj/poly/polyp/ PolyP]
 
;[http://www.cs.chalmers.se/~patrikj/poly/polyp/ PolyP]
 
:A polytypic programming language
 
:A polytypic programming language
   
  +
==Forth==
 
  +
===Forth===
   
 
;[http://feather.perl6.nl/~nothingmuch/harrorth/ Harrorth]
 
;[http://feather.perl6.nl/~nothingmuch/harrorth/ Harrorth]
 
:Harrorth, a Forth interpreter
 
:Harrorth, a Forth interpreter
   
=Small languages=
 
   
==Baskell==
+
===Eiffel===
  +
  +
;[http://eiffelsoftware.origo.ethz.ch/index.php/DynBindModelHaskell Dynamic binding in Eiffel]
  +
:A model of dynamic binding in ECMA Eiffel, in Haskell
  +
  +
  +
===Crouton===
  +
  +
;[http://crouton.sourceforge.net/ 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
  +
  +
  +
=== JavaScript ===
  +
  +
;[http://www.haskell.org/haskellwiki/Libraries_and_tools/HJS HJS]
  +
:HJS is a JavaScript parser written in Haskell. Available from HackageDB.
  +
  +
  +
===TCL===
  +
  +
;[http://code.google.com/p/hiccup/ Hiccup]
  +
:Hiccup is a minimalistic TCL interpreter. It tries to be relatively simple, relatively efficient, and mostly correct.
  +
  +
  +
===Smalltalk===
  +
  +
;[http://code.google.com/p/hst/ hst]
  +
:HST is a Smalltalk implementation in Haskell. [http://lstephen.wordpress.com/2007/07/23/completing-the-spike/ See here for more information]
  +
  +
  +
=== Disciple ===
  +
  +
;[[DDC]]
  +
:Disciple is an explicitly lazy dialect of Haskell which supports destructive update, computational effects, type directed field projections and some other useful things.
  +
  +
  +
=== Timber ===
  +
  +
;[http://timber-lang.org/Timber 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.
  +
  +
=== Ivory ===
  +
  +
;[http://ivorylang.org/ Ivory]
  +
: The Ivory Language is an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell. [https://github.com/GaloisInc/ivory Github]
  +
  +
==Small languages==
  +
  +
===PureScript===
  +
;[http://www.purescript.org/ PureScript]
  +
:A small strongly typed programming language that compiles to JavaScript
  +
  +
===Baskell===
 
;[http://www.cs.mu.oz.au/~bjpop/code.html Baskell]
 
;[http://www.cs.mu.oz.au/~bjpop/code.html Baskell]
 
:An interpreter for a small functional programming language. Supports strict and non-strict evaluation, and type inference. Useful for teaching purposes.
 
:An interpreter for a small functional programming language. Supports strict and non-strict evaluation, and type inference. Useful for teaching purposes.
   
==Unlambda==
+
===LambdaPi===
  +
  +
;[http://www.informatik.uni-bonn.de/~loeh/LambdaPi.html LambdaPi]
  +
:LambdaPi, An Implementation of a Dependently Typed Lambda Calculus
  +
  +
===Unlambda===
   
 
;[http://www.cse.unsw.edu.au/~dons/code/lambdabot/scripts/Unlambda.hs Unlambda.hs]
 
;[http://www.cse.unsw.edu.au/~dons/code/lambdabot/scripts/Unlambda.hs Unlambda.hs]
:An implementation of unlambda in Haskell
+
:An implementation of Unlambda in Haskell
   
==BF==
+
===BF===
   
 
;[http://www.cse.unsw.edu.au/~dons/code/lambdabot/scripts/BF.hs BF.hs]
 
;[http://www.cse.unsw.edu.au/~dons/code/lambdabot/scripts/BF.hs BF.hs]
Line 115: Line 247:
   
   
==Lambda calculus==
+
===Lambda calculus===
   
 
;[http://programming.reddit.com/goto?id=qnir 4 lambda calculus implementations]
 
;[http://programming.reddit.com/goto?id=qnir 4 lambda calculus implementations]
Line 122: Line 254:
 
;[http://www.cse.unsw.edu.au/~dons/code/lambdabot/Plugin/Lambda/ LMEngine]
 
;[http://www.cse.unsw.edu.au/~dons/code/lambdabot/Plugin/Lambda/ LMEngine]
 
:An implementation of the untyped lambda calculus
 
:An implementation of the untyped lambda calculus
  +
  +
===QML, a functional quantum programming language===
  +
  +
;[http://sneezy.cs.nott.ac.uk/QML/ QML: A Functional Quantum Programming Language] project
  +
:It is implemented in Haskell.
  +
  +
:For online material on quantum computing in general, see [http://www.theory.caltech.edu/people/preskill/ph229/ Quantum Computation] course held by [http://www.theory.caltech.edu/people/preskill/index.html John Preskill].
  +
  +
===HQL - HHM's Quantified Lambda===
  +
  +
;[http://www.archive.moraldo.com.ar/index.php/Articles/HQLlanguage Hernan's Quantified Lambda]
  +
:a small functional language, whose expressions can involve the use of quantifier operators
  +
  +
===Atom===
  +
;[http://funhdl.org/wiki/doku.php/atom Atom]
  +
:Atom is a small HDL that compiles conditional term rewriting systems down to Verilog RTL.
  +
  +
===Feldspar ===
  +
  +
;[http://hackage.haskell.org/package/feldspar-language Feldspar]
  +
:Feldspar (Functional Embedded Language for DSP and PARallelism) is an embedded DSL for describing digital signal processing algorithms developed at Ericsson.
  +
  +
===AL (Assignment Language)===
  +
  +
:It is used for teaching purposes in at the Technical University of Vienna.
  +
:An interpreter implemented in Haskell is described in [http://www.logic.at/staff/robinson/ali.ps ALI - an AL Interpreter implemented in Haskell] written by Peter Robinson.
  +
  +
=== Whitespace ===
  +
;[http://compsoc.dur.ac.uk/whitespace/index.php Whitespace]
  +
:A language that uses whitespace characters as language elements and ignores all non-whitespace characters
  +
  +
=== LIPL ===
  +
;[http://www.lipl.googlepages.com/index.html LIPL]
  +
:An interpreter for a tiny functional programming language. It features Hindley-Milner style type inference.
  +
  +
=== Ministg ===
  +
;[http://www.haskell.org/haskellwiki/Ministg Ministg]
  +
:An interpreter for a high-level, small-step, operational semantics for the STG machine. Features execution tracing, rendered in HTML. Useful for studying the behaviour of the STG machine and experimenting with extensions to the machine. Also useful for studying program language implementation.
  +
  +
=== Constantinople ===
  +
;[http://zzo38computer.cjb.net/prog/Constantinople.zip Constantinople]
  +
:A compiler for the Constantinople esolang. There are two datatypes, the list, and the bit, which can either be 0 or 1. Lists are infinite and lazily evaluated.
  +
  +
== Embedded languages ==
  +
  +
=== ForSyDe ===
  +
The ForSyDe (Formal System Design) methodology has been developed with the objective to move system-on-chip design to a higher level of abstraction. ForSyDe is implemented as a Haskell-embedded behavioral DSL.
  +
  +
== Debuggers ==
  +
  +
;[http://www.dsic.upv.es/users/elp/debussy Debussy]
  +
:A declarative debugger for OBJ-like languages
  +
  +
;See also [[Debugging]].
   
 
{{LibrariesPage}}
 
{{LibrariesPage}}

Revision as of 20:01, 21 August 2015

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.

Large languages

Haskell

GHC
GHC, The Glasgow Haskell Compiler, is written in Haskell
Yhc
Yhc, The York Haskell Compiler, is written in Haskell
Jhc
Jhc is a Haskell compiler which aims to produce the most efficient programs possible via whole program analysis
nhc98
A compiler for Haskell 98, written in Haskell
Ehc
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.
UHC
UHC is the Utrecht Haskell Compiler. UHC supports almost all Haskell 98 features plus experimental extensions. The compiler runs under Mac OS X, Windows (Cygwin), and various Unix flavors.
pH
A parallel version of Haskell from MIT.


Helium

Helium
A Haskell subset for educational purposes


Generic Haskell

Generic Haskell
An extension of Haskell that supports generic programming


Data Field Haskell

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


Eden

Eden
A Haskell dialect for parallel programming


Chameleon

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


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


Elm

Elm
The Elm programming language aims to make web development more pleasant. Elm is a type-safe, functional reactive language that compiles to HTML, CSS, and JavaScript.


BASIC

BASIC
A simplified version of the original BASIC embedded in Haskell.


Liskell

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

Perl

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


Python

Berp
Berp is an implementation of Python 3 in Haskell.
haspy
Haspy is an implementation of Python in Haskell


Ruby

RType
RType is a Ruby interpreter written in Haskell


Flapjax

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


Scheme

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


Lisp

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


Emacs Lisp

Helisp
The beginnings of an Emacs lisp compiler/interpreter.


Epigram

Epigram
Epigram is a prototype dependently typed functional programming language


Curry

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


Bluespec

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


Cayenne

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


Agda

Agda
A Cayenne-like programming language and proof assistant.


PolyP

PolyP
A polytypic programming language


Forth

Harrorth
Harrorth, a Forth interpreter


Eiffel

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


Crouton

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


JavaScript

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


TCL

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


Smalltalk

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


Disciple

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


Timber

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.

Ivory

Ivory
The Ivory Language is an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell. Github

Small languages

PureScript

PureScript
A small strongly typed programming language that compiles to JavaScript

Baskell

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

LambdaPi

LambdaPi
LambdaPi, An Implementation of a Dependently Typed Lambda Calculus

Unlambda

Unlambda.hs
An implementation of Unlambda in Haskell

BF

BF.hs
An implementation of BF in Haskell


Lambda calculus

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

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.

HQL - HHM's Quantified Lambda

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

Atom

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

Feldspar

Feldspar
Feldspar (Functional Embedded Language for DSP and PARallelism) is an embedded DSL for describing digital signal processing algorithms developed at Ericsson.

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.

Whitespace

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

LIPL

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

Ministg

Ministg
An interpreter for a high-level, small-step, operational semantics for the STG machine. Features execution tracing, rendered in HTML. Useful for studying the behaviour of the STG machine and experimenting with extensions to the machine. Also useful for studying program language implementation.

Constantinople

Constantinople
A compiler for the Constantinople esolang. There are two datatypes, the list, and the bit, which can either be 0 or 1. Lists are infinite and lazily evaluated.

Embedded languages

ForSyDe

The ForSyDe (Formal System Design) methodology has been developed with the objective to move system-on-chip design to a higher level of abstraction. ForSyDe is implemented as a Haskell-embedded behavioral DSL.

Debuggers

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