Difference between revisions of "Haskell in practice"

From HaskellWiki
Jump to: navigation, search
(Reports on Experiences with Haskell)
 
(54 intermediate revisions by 23 users not shown)
Line 1: Line 1:
  +
[[Category:Applications]]
  +
''This page is obsolete. More up to date content may be found here:''
   
= Haskell in Practice =
+
* [[Haskell in industry]]
  +
* [http://cufp.galois.com/ Commercial Users of Functional Programming]
  +
* [http://hackage.haskell.org Haskell library database]
  +
* [[Libraries_and_tools|Applications written in Haskell]]
  +
* [[Tutorials#Comparisons_to_other_languages|Language comparisons]]
  +
* [http://book.realworldhaskell.org/ Real World Haskell, the book]
  +
== Applications Written in Haskell ==
   
==Applications written in Haskell==
 
  +
Haskell is a general purpose programming language, and many, many
  +
applications have been written in it. The following free Haskell
  +
programs may serve as examples for constructing large applications in
  +
Haskell. Many more examples can be found in the
  +
[[Compilers and interpreters]] and [[Libraries and tools]] pages.
  +
A great many more Haskell projects are documented in the
  +
[http://haskell.org/communities/ community reports] and in the archives of the [[Haskell Weekly News]].
   
The following free Haskell programs may serve as examples for constructing large applications in Haskell.
 
  +
<DL><DT>[http://www.cs.bell-labs.com/~wadler/realworld/index.html "Real World Applications of Functional Programming"]<DD>Wadler's page on the subject mentions several large applications written in Haskell
 
  +
([http://www.cs.bell-labs.com/~wadler/realworld/era.html Equational Reasoning Assistant] (see [[Haskell Equational Reasoning Assistant]]),
<DL><DT>[http://www.cs.bell-labs.com/~wadler/realworld/index.html <STRONG>Real World Applications of Functional Programming</STRONG>]<DD>Includes several large applications written in Haskell
 
  +
[http://www.cs.bell-labs.com/~wadler/realworld/speechrec.html Mitre Speech Recognition System] <!-- Copyright owned by MITRE and under an open-source but not Free license; further, the Yale server containing the source is just gone. -->
([http://www.cs.bell-labs.com/~wadler/realworld/era.html Equational Reasoning Assistant],
+
[http://www.cs.bell-labs.com/~wadler/realworld/natlangproc.html the LOLITA Natural Language Processing System] (abandoned in 2000), etc.)
[http://www.cs.bell-labs.com/~wadler/realworld/speechrec.html Mitre Speech Recognition System],
+
<dt>[http://www.pugscode.org/ Pugs]
[http://www.cs.bell-labs.com/~wadler/realworld/natlangproc.html the LOLITA Natural Language Processing System], ...).
+
<dd>An implementation of Perl6. <!-- Very complex build; the libraries are now up-to-date, but Pugs itself requires some difficult changes. -->
<dt>[http://www.pugscode.org/ Pugs]</dt>
+
<dt>[http://www.geocities.jp/takascience/haskell/monadius_en.html Monadius]
<dd>An implementation of Perl6.
+
<dd>A shoot 'em up game using OpenGL. Takayuki Muranushi also wrote a [http://www.geocities.jp/takascience/index_en.html couple of other games] in Haskell. <!-- Uploaded. -->
<dt>[http://www.geocities.jp/takascience/windows/monadius_e.html Monadius]</dt>
+
<dt>[http://www.haskell.org/docon DoCon], the Algebraic Domain Constructor
<dd>A shoot 'em up game using OpenGL. Takayuki Muranushi also wrote a [http://www.geocities.jp/takascience/index_e.html couple of other games] in Haskell.
 
<dt>[http://www.haskell.org/docon DoCon], the Algebraic Domain Constructor</dt>
 
 
<dd>The DoCon computer algebra system implements a good-sized piece of commutative algebra.
 
<dd>The DoCon computer algebra system implements a good-sized piece of commutative algebra.
 
One of the project aims is to test the efficiency of a real-world CA
 
One of the project aims is to test the efficiency of a real-world CA
system based on pure functionality and "lazy" computation.
+
system based on pure functionality and "lazy" computation. <!-- Nonfree -->
<dt>[http://www.haskell.org/dumatel Dumatel], a prover based on equational reasoning</dt>
+
<dt>[http://www.haskell.org/dumatel Dumatel], a prover based on equational reasoning
<dd>This is a study in combining Computer algebra, Term rewriting and Automatic proofs. The system is presented as a library of Haskell functions.
+
<dd>This is a study in combining Computer algebra, Term rewriting and Automatic proofs. The system is presented as a library of Haskell functions. <!-- Nonfree. -->
<dt>[http://postmaster.cryp.to/ Postmaster]</dt>
+
<dt>[http://postmaster.cryp.to/ Postmaster] and [http://dietadukana.eblog.pl/ Dukan]
<dd>A mail transport agent (MTA) written in Haskell. The primary focus of the project is to provide an MTA that's a lot more flexible than the current implementations, in particular when it comes to implementing junk mail countermeasures.
+
<dd>A mail transport agent (MTA) written in Haskell. The primary focus of the project is to provide an MTA that's a lot more flexible than the current implementations, in particular when it comes to implementing junk mail countermeasures. <!-- Uploaded. -->
<dt>[http://www.flippac.org/projects/flippi/ Flippi]</dt>
+
<dt>[http://www.flippac.org/projects/flippi/ Flippi]
<dd>A simple and lightweight Wiki clone written in plain Haskell 98 using the hierarchical libraries. There is a [http://www.scannedinavian.org/cgi-bin/flippi/flippi running trial copy].</dd>
+
<dd>A simple and lightweight Wiki clone written in plain Haskell 98 using the hierarchical libraries. There is a [http://www.scannedinavian.org/cgi-bin/flippi/flippi running trial copy].</dd> <!-- Currently down. -->
<DT>[http://www.cs.waikato.ac.nz/Research/fm/amuzed.html AMuZed and ZooM]</DT>
+
<DT>[http://www.cs.waikato.ac.nz/Research/fm/amuzed.html AMuZed and ZooM]
 
<DD>
 
<DD>
 
AMuZed is a graphical editing tool for the creation of mu-charts or microcharts. mu-charts consist of the 'well-defined' part of the Statecharts found in UML -- in that they have a semantics and, via the Z translation, a logic too. ZooM is a tool which takes the .muz file output of a created chart from AMuZed and generates a series of .tex files which contain the Z specification for that chart.</DD>
 
AMuZed is a graphical editing tool for the creation of mu-charts or microcharts. mu-charts consist of the 'well-defined' part of the Statecharts found in UML -- in that they have a semantics and, via the Z translation, a logic too. ZooM is a tool which takes the .muz file output of a created chart from AMuZed and generates a series of .tex files which contain the Z specification for that chart.</DD>
 
<dt>[http://www.cs.chalmers.se/~koen/paradox/ Paradox]
 
<dt>[http://www.cs.chalmers.se/~koen/paradox/ Paradox]
 
<dd>A tool that processes first-order logic problems and tries to find finite-domain models for them.
 
<dd>A tool that processes first-order logic problems and tries to find finite-domain models for them.
<DT>[http://www.cs.uu.nl/groups/ST/twiki/bin/view/Center/Software A Partial Evaluator]<DD>
 
 
<dt>[http://freshmeat.net/projects/checkrdf/ CheckRDF]
 
<dt>[http://freshmeat.net/projects/checkrdf/ CheckRDF]
 
<dd>A tool for downloading RDF site summaries and showing news in a text file and in an HTML file.
 
<dd>A tool for downloading RDF site summaries and showing news in a text file and in an HTML file.
<dt>[http://abridgegame.org/darcs/ darcs]<dd>David's Advanced Revision Control System is yet another replacement for CVS. It is written in Haskell, and has been tested on Linux and MacOS X. It has not yet been optimized for speed, so it runs a little slowly on large projects. darcs includes a cgi script, which can be used to view the contents of your repository.
+
<dt>[[Darcs]][http://abridgegame.org/darcs/]<dd>David's Advanced Revision Control System is yet another replacement for CVS. It is written in Haskell, and has been tested on Linux and MacOS X. darcs includes a cgi script, which can be used to view the contents of your repository. <!-- Darcs is adequately maintained; besides, it would be very difficult to Cabalize it in a way as portable as the current hacked-up Autotools setup. -->
<DT>[http://www.cs.bris.ac.uk/~tweed/haskprog.html David Tweeds Haskell Programs]<DD>Currently David offers a LaTeX preprocessor and a C++ prettifier.
+
<DT>[http://www.cs.bris.ac.uk/~tweed/haskprog.html David Tweeds Haskell Programs]<DD>Currently David offers a LaTeX preprocessor.
<dt>[http://www.cs.chalmers.se/~markus/fstStudio/ FstStudio]<dd>An application for construction and running of finite state transducers.
+
<dt>[http://www.cs.chalmers.se/~markus/fstStudio/ FstStudio]<dd>An application for construction and running of finite state transducers. <!-- Uploaded. -->
<dt>[http://www.informatik.uni-bremen.de/~cxl/haskell-in-space/ Haskell in Space]<dd>An asteroids-like game.
+
<dt>[http://www.informatik.uni-bremen.de/~cxl/haskell-in-space/ Haskell in Space]<dd>An asteroids-like game. <!-- Uploaded. -->
<DT>[http://www.ki.informatik.uni-frankfurt.de/~klose/ A Haskell Compiler Front-End ]<DD>This is a stand alone version of a compiler front-end, which was built by Norbert Klose as part of his master's thesis and which is described in detail there.
+
<DT>[http://www.ki.informatik.uni-frankfurt.de/~klose/ A Haskell Compiler Front-End ]<DD>This is a stand alone version of a compiler front-end, which was built by Norbert Klose as part of his master's thesis and which is described in detail there. See also his Lucky parser[http://www.ki.informatik.uni-frankfurt.de/~klose/lucky-manual/deutsch/node12.html] <!-- Lucky seems like it could be brought up to date, but not by me - I don't understand MonadZero and MonadPlus. -->
<dt>[http://lsi.uniovi.es/~labra/LPS/LPS.html LPS: Language Prototyping System]</dt> <dd>A project that uses Haskell to build interpreters from monadic semantic descriptions.</dd>
+
<dt>[http://lsi.uniovi.es/~labra/LPS/LPS.html LPS: Language Prototyping System] <dd>A project that uses Haskell to build interpreters from monadic semantic descriptions.</dd> <!-- No dice. Endless dodgy use of extensions, and more recent GHCs seem to be stricter about deuplicate instances, so building it seems to be nigh-impossible. I've emailed the authors, though. -->
 
<dt>[http://www.cs.utah.edu/flux/alchemy/ Knit]<dd>Knit is a component definition and linking language for systems programming based on the Unit component programming model. Knit lets you turn ordinary C code (e.g., bits of the Linux kernel) into components and link them together to build new programs. Since the freedom to do new things brings with it the freedom to make new errors, Knit provides a simple constraint system to catch component configuration errors. Knit also provides a cross-component inliner and schedules initialization and finalization of components.
 
<dt>[http://www.cs.utah.edu/flux/alchemy/ Knit]<dd>Knit is a component definition and linking language for systems programming based on the Unit component programming model. Knit lets you turn ordinary C code (e.g., bits of the Linux kernel) into components and link them together to build new programs. Since the freedom to do new things brings with it the freedom to make new errors, Knit provides a simple constraint system to catch component configuration errors. Knit also provides a cross-component inliner and schedules initialization and finalization of components.
 
<br>Knit is released under a BSD-style license, is written in Haskell (and a little C) and includes a C parser and pretty-printer. A useful little utility included in the distribution is a tool for renaming symbols in ELF-format object files.
 
<br>Knit is released under a BSD-style license, is written in Haskell (and a little C) and includes a C parser and pretty-printer. A useful little utility included in the distribution is a tool for renaming symbols in ELF-format object files.
 
<br>The current Knit release acts post-compilation: we compile C code as normal and then rename symbols in object files before linking. We are rewriting Knit to act pre-compilation: manipulating the source code before compilation. This will bring the much needed ability to import and export types from modules.
 
<br>The current Knit release acts post-compilation: we compile C code as normal and then rename symbols in object files before linking. We are rewriting Knit to act pre-compilation: manipulating the source code before compilation. This will bring the much needed ability to import and export types from modules.
 
<dt>[http://www.haskell.org/~petersen/haskell/linkchk/ linkchk]<dd>A heart-beat monitor for local network links for Linux.
 
<dt>[http://www.haskell.org/~petersen/haskell/linkchk/ linkchk]<dd>A heart-beat monitor for local network links for Linux.
<DT>[http://www.cs.uu.nl/groups/ST/Software/UU_AG/index.html Micro attribute grammar system]<DD> This is a small attribute grammar system written in Haskell. It has been bootstrapped and is now included in the set of modules that is distributed with Doaitse Swierstra's parser combinator library.
 
  +
<DT>[http://www.cs.uu.nl/wiki/bin/view/HUT/AttributeGrammarSystem Utrecht Attribute Grammar System]<DD> We have used this attribute grammars sytem in the construction of our haskell compilers. It has proven to be an indispendable tool in keeping the various aspects apart.
<dt>[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<dd>A simple action game.
+
<dt>[http://www24.brinkster.com/srineet/para/para.html Paratrooper]<dd>A simple action game; see also his [http://www24.brinkster.com/srineet/plot4/plot4.html Plot4], a clone of ''Connect Four''. <!-- The two are definitely fixable, but license status is unclear. I've emailed the author about it. -->
<DT>[http://www.dtek.chalmers.se/~d95jowi/quakehaskell/index.html Quake Haskell] ;-)
+
<DT>[http://www.dtek.chalmers.se/~d95jowi/quakehaskell/index.html Quake Haskell] (for the source, see [[:Image:Quake.tar.gz]]) <!-- Way too hard to update or package, because of the C engine. But the source is preserved here, so mark this one done. -->
 
<DT>[http://www-i2.informatik.rwth-aachen.de/Forschung/MCS/Truth/ Truth]<DD>
 
<DT>[http://www-i2.informatik.rwth-aachen.de/Forschung/MCS/Truth/ Truth]<DD>
Truth is a platform for the verification of distributed systems.
+
Truth is a platform for the verification of distributed systems. <!-- Nonfree license. -->
<dt>[http://www.reid-consulting-uk.ltd.uk/alastair/publications/acp4is03/index.html TSL] <dd>TSL is a language for describing hierarchies of schedulers and reasoning about what kinds of locks can legally be used at each level and what race conditions those locks can prevent.
+
<dt>[http://web.archive.org/web/20060623041418/http://www.reid-consulting-uk.ltd.uk/alastair/publications/acp4is03/index.html TSL][http://www.reid-consulting-uk.ltd.uk/alastair/publications/acp4is03/index.html] <dd>TSL is a language for describing hierarchies of schedulers and reasoning about what kinds of locks can legally be used at each level and what race conditions those locks can prevent. <!-- Site is down, source not mentioned. -->
<dt>[http://www.kfunigraz.ac.at/imawww/thaller/wolfgang/vop-intro.html VOP - Vision of Persistance]<dd>VOP is a program that parses [http://www.povray.org POV-Ray] scene description files and renders them using OpenGL.
+
<dt>[http://www.kfunigraz.ac.at/imawww/thaller/wolfgang/vop-intro.html VOP - Vision of Persistance]<dd>VOP is a program that parses [http://www.povray.org POV-Ray] scene description files and renders them using OpenGL. <!-- Nonfree. -->
<dt>[http://www.haskell.org/~simonmar/bib.html A Web Server written in Haskell]<dd> It has been extended to produce [http://sourceforge.net/forum/forum.php?forum_id=253134 HWS-WP], the [http://www.mdstud.chalmers.se/~md9ms/hws-wp/ Haskell Web Server With Plugins].
+
<dt>[http://www.haskell.org/~simonmar/bib.html A Web Server written in Haskell]<dd> It has been extended to produce [http://sourceforge.net/forum/forum.php?forum_id=253134 HWS-WP], the [http://www.mdstud.chalmers.se/~md9ms/hws-wp/ Haskell Web Server With Plugins]. <!-- A better version is up on Hackage as 'mohws'. -->
 
<dt>[http://homepages.cwi.nl/~tromp/cl/cl.html Interpreters for lambda calculus and combinatory logic].</dd>
 
<dt>[http://homepages.cwi.nl/~tromp/cl/cl.html Interpreters for lambda calculus and combinatory logic].</dd>
  +
<dt>[[Lambdabot]]<dd>A large IRC bot, dynamically extensible via plugins.
  +
<dt>[[Frag]]<dd>A first person 3D game written in Haskell.
  +
<dt>[https://github.com/yi-editor/yi Yi]<dd> An extensible text editor, reminiscent of vim.
  +
<dt>[http://www.cse.unsw.edu.au/~dons/hmp3.html hmp3]<dd> A curses-based mp3 player.
  +
<dt>[[Hoogle]]<dd>A Haskell API search engine
  +
<dt>[https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies Magic Cookies!]<dd>A commercial Android game using SDL2 multimedia written in the FRP flavour Yampa.
  +
<dt>[http://github.com/ivanperez-keera/haskanoid Haskanoid]<dd>A breakout game with Kinect and Wiimote support, SDL multimedia, written in the FRP DSL Yampa.
  +
<dt>[http://liftedsoftware.com/rHSWiki JSON Class Generator]<dd>A Mac application that allows the user to define classes and enums in an editor and provides the ability to generate Objective-C source code for them, that contain functions for serializing/deserializing to/from JSON.
 
</DL>
 
</DL>
Note that some of the [[implementations Haskell systems]] and many of the [[libraries| tools and libraries]] are written in Haskell as well.
 
  +
  +
See also [[Libraries and tools]] and the [http://www.galois.com/cufp/ Commercial Users of Functional Programming] workshop.
   
 
==Embedded Domain Specific Languages==
 
==Embedded Domain Specific Languages==
   
Haskell has become quite popular for the development of domain specific languages. Instead of implementing an interpreter or compiler in Haskell, Haskell is enriched by libraries for domain specific data types and functions, that turn Haskell into a domain specific language, for example for describing music, pictures, animations or hardware. Even parsing combinators can be understood as domain specific languages. These embedded languages are filed as [/libraries/ tools and libraries].
+
Haskell has become quite popular for the development of domain specific languages. Instead of implementing an interpreter or compiler in Haskell, Haskell is enriched by libraries for domain specific data types and functions, that turn Haskell into a domain specific language, for example for describing music, pictures, animations or hardware. Even parsing combinators can be understood as domain specific languages. These embedded languages are filed as [[Libraries and tools|libraries and tools]].
   
   
 
==Reports on Experiences with Haskell==
 
==Reports on Experiences with Haskell==
   
[http://research.microsoft.com/Users/simonpj/#contracts-icfp Composing contracts: an adventure in financial engineering] by Simon Peyton Jones, Jean-Marc Eber, Julian Seward. ICFP 2000.
+
* [http://research.microsoft.com/Users/simonpj/#contracts-icfp Composing contracts: an adventure in financial engineering] by Simon Peyton Jones, Jean-Marc Eber, Julian Seward. ICFP 2000.
 
<blockquote>
 
<blockquote>
Financial and insurance contracts do not sound like promising territory for functional programming and formal
+
Financial and insurance contracts do not sound like promising territory
semantics, but in fact we have discovered that insights from programming languages bear directly on the complex
+
for functional programming and formal semantics, but in fact we have
subject of describing and valuing a large class of contracts.
+
discovered that insights from programming languages bear directly on the
  +
complex subject of describing and valuing a large class of contracts.
  +
  +
We introduce a combinator library that allows us to describe such
  +
contracts precisely, and a compositional denotational semantics that
  +
says what such contracts are worth. We sketch an implementation of our
  +
combinator library in Haskell. Interestingly, lazy evaluation plays a
  +
crucial role.
   
We introduce a combinator library that allows us to describe such contracts precisely, and a compositional
 
  +
See also [http://web.archive.org/web/20020215005912/http://www.risk.net/riskawards2001/softwareproduct.htm this article in the Risk Magazine],
denotational semantics that says what such contracts are worth. We sketch an implementation of our combinator
 
  +
a journal of the financial engineering industry.
library in Haskell. Interestingly, lazy evaluation plays a crucial role.
 
  +
</blockquote>
   
See also [http://www.risk.net/riskawards2001/softwareproduct.htm this article in the Risk Magazine], a journal of the financial engineering industry.
 
  +
* [http://www.cs.yale.edu/publications/techreports/tr1049.pdf Haskell vs. Ada vs. C++ vs. Awk vs. ..., An Experiment in Software Prototyping Productivity] by Paul Hudak and Mark P. Jones, 16 pages.<br> Description of the results of an experiment in which several conventional programming languages, together with the functional language Haskell, were used to prototype a Naval Surface Warfare Center requirement for Geometric Region Servers. The resulting programs and development metrics were reviewed by a committee chosen by the US Navy. <p> The results indicate that the Haskell prototype took significantly less time to develop and was considerably more concise and easier to understand than the corresponding prototypes written in several different imperative languages, including Ada and C++.
   
[http://haskell.org/papers/NSWC/jfp.ps <STRONG>Haskell vs. Ada vs. C++ vs. Awk vs. ..., An Experiment in Software Prototyping Productivity</STRONG>] by Paul Hudak and Mark P. Jones, 16
 
  +
* [ftp://ftp.wins.uva.nl/pub/computersystems/functional/reports/JFP_pseudoknotI.ps.Z Benchmarking implementations of functional languages with ''pseudoknot'', a Float-Intensive benchmark] by P. H. Hartel, M. Feeley, M. Alt, L. Augustsson, P. Baumann, M. Beemster, E. Chailloux,C. H. Flood, W. Grieskamp, J. H. G. van Groningen, K. Hammond, B. Hausman, M. Y. Ivory, R. E. Jones, J. Kamperman, P. Lee, X. Leroy, R. D. Lins, S. Loosemore, N. R&ouml;jemo, M. Serrano, J.-P. Talpin, J. Thackray, S. Thomas, P. Walters, P. Weis, and P. Wentworth. ''J. Functional Programming'', 6(4):621--655, Jul 1996.
pages.<BR>
 
Description of the results of an experiment in which several
 
conventional programming languages, together with the functional
 
language Haskell, were used to prototype a Naval Surface Warfare
 
Center requirement for Geometric Region Servers.
 
The resulting programs and development metrics were reviewed by a
 
committee chosen by the US Navy.
 
The results indicate that the Haskell prototype took significantly
 
less time to develop and was considerably more concise and easier to
 
understand than the corresponding prototypes written in several
 
different imperative languages, including Ada and C++.
 
   
[ftp://ftp.wins.uva.nl/pub/computersystems/functional/reports/JFP_pseudoknotI.ps.Z <STRONG>Benchmarking implementations of functional languages with ``pseudoknot'', a Float-Intensive benchmark</STRONG>] by P. H. Hartel, M. Feeley, M. Alt, L. Augustsson, P. Baumann, M. Beemster, E. Chailloux,C. H. Flood, W. Grieskamp, J. H. G. van Groningen, K. Hammond, B. Hausman, M. Y. Ivory, R. E. Jones, J. Kamperman, P. Lee, X. Leroy, R. D. Lins, S. Loosemore, N. R&ouml;jemo, M. Serrano, J.-P. Talpin, J. Thackray, S. Thomas, P. Walters, P. Weis, and P. Wentworth.<EM>J. Functional Programming</EM>, 6(4):621--655, Jul 1996.
 
  +
* [http://shootout.alioth.debian.org/ The Great Computer Language Shootout]<br>Comparative benchmarks of a number of different languages and compilers, including Haskell with GHC. GHC has often lead the pack, with frequent 1st places in 2006; as of February 2008, it ranks somewhere around 6th or 7th place, with the closely related language Clean ~3 places up.
  +
* Colin Runciman and David Wakeling (ed.): <EM>Applications of Functional Programming</EM>, UCL Press, 1995, ISBN 1-85728-377-5 HB.<br> From the cover: <blockquote> This book is unique in showcasing real, non-trivial applications of functional programming using the Haskell language. It presents state-of-the-art work from the FLARE project and will be an invaluable resource for advanced study, research and implementation. </blockquote>
   
[http://shootout.alioth.debian.org/great/ The Great Computer Language Shootout]<br>Comparative benchmarks of a number of different languages and compilers, including Haskell with ghc.
 
  +
* [http://www.osl.iu.edu/publications/prints/2003/comparing_generic_programming03.pdf A Comparative Study of Language Support for Generic Programming] Ronald Garcia, Jaakko Jrvi, Andrew Lumsdaine, Jeremy G. Siek, and Jeremiah Willcock. In Proceedings of the 2003 ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA'03), October 2003. <br> An interesting comparison of generic programming support across languages, including: Haskell, SML, C++, Java, C#. Haskell supports all constructs described in the paper -- the only language to do so.
*Colin Runciman and David Wakeling (ed.): <EM>Applications of Functional Programming</EM>, UCL Press, 1995, ISBN 1-85728-377-5 HB.<BR>
 
From the cover:
 
<BLOCKQUOTE>
 
This book is unique in showcasing real, non-trivial applications of functional programming using the Haskell language. It presents state-of-the-art work from the FLARE project and will be an invaluable resource for advanced study, research and implementation.
 
</BLOCKQUOTE>
 

Latest revision as of 01:06, 29 October 2016

This page is obsolete. More up to date content may be found here:

Applications Written in Haskell

Haskell is a general purpose programming language, and many, many applications have been written in it. The following free Haskell programs may serve as examples for constructing large applications in Haskell. Many more examples can be found in the Compilers and interpreters and Libraries and tools pages. A great many more Haskell projects are documented in the community reports and in the archives of the Haskell Weekly News.

"Real World Applications of Functional Programming"
Wadler's page on the subject mentions several large applications written in Haskell (Equational Reasoning Assistant (see Haskell Equational Reasoning Assistant), Mitre Speech Recognition System the LOLITA Natural Language Processing System (abandoned in 2000), etc.)
Pugs
An implementation of Perl6.
Monadius
A shoot 'em up game using OpenGL. Takayuki Muranushi also wrote a couple of other games in Haskell.
DoCon, the Algebraic Domain Constructor
The DoCon computer algebra system implements a good-sized piece of commutative algebra. One of the project aims is to test the efficiency of a real-world CA system based on pure functionality and "lazy" computation.
Dumatel, a prover based on equational reasoning
This is a study in combining Computer algebra, Term rewriting and Automatic proofs. The system is presented as a library of Haskell functions.
Postmaster and Dukan
A mail transport agent (MTA) written in Haskell. The primary focus of the project is to provide an MTA that's a lot more flexible than the current implementations, in particular when it comes to implementing junk mail countermeasures.
Flippi
A simple and lightweight Wiki clone written in plain Haskell 98 using the hierarchical libraries. There is a running trial copy.
AMuZed and ZooM
AMuZed is a graphical editing tool for the creation of mu-charts or microcharts. mu-charts consist of the 'well-defined' part of the Statecharts found in UML -- in that they have a semantics and, via the Z translation, a logic too. ZooM is a tool which takes the .muz file output of a created chart from AMuZed and generates a series of .tex files which contain the Z specification for that chart.
Paradox
A tool that processes first-order logic problems and tries to find finite-domain models for them.
CheckRDF
A tool for downloading RDF site summaries and showing news in a text file and in an HTML file.
Darcs[1]
David's Advanced Revision Control System is yet another replacement for CVS. It is written in Haskell, and has been tested on Linux and MacOS X. darcs includes a cgi script, which can be used to view the contents of your repository.
David Tweeds Haskell Programs
Currently David offers a LaTeX preprocessor.
FstStudio
An application for construction and running of finite state transducers.
Haskell in Space
An asteroids-like game.
A Haskell Compiler Front-End
This is a stand alone version of a compiler front-end, which was built by Norbert Klose as part of his master's thesis and which is described in detail there. See also his Lucky parser[2]
LPS: Language Prototyping System
A project that uses Haskell to build interpreters from monadic semantic descriptions.
Knit
Knit is a component definition and linking language for systems programming based on the Unit component programming model. Knit lets you turn ordinary C code (e.g., bits of the Linux kernel) into components and link them together to build new programs. Since the freedom to do new things brings with it the freedom to make new errors, Knit provides a simple constraint system to catch component configuration errors. Knit also provides a cross-component inliner and schedules initialization and finalization of components.
Knit is released under a BSD-style license, is written in Haskell (and a little C) and includes a C parser and pretty-printer. A useful little utility included in the distribution is a tool for renaming symbols in ELF-format object files.
The current Knit release acts post-compilation: we compile C code as normal and then rename symbols in object files before linking. We are rewriting Knit to act pre-compilation: manipulating the source code before compilation. This will bring the much needed ability to import and export types from modules.
linkchk
A heart-beat monitor for local network links for Linux.
Utrecht Attribute Grammar System
We have used this attribute grammars sytem in the construction of our haskell compilers. It has proven to be an indispendable tool in keeping the various aspects apart.
Paratrooper
A simple action game; see also his Plot4, a clone of Connect Four.
Quake Haskell (for the source, see Image:Quake.tar.gz)
Truth
Truth is a platform for the verification of distributed systems.
TSL[3]
TSL is a language for describing hierarchies of schedulers and reasoning about what kinds of locks can legally be used at each level and what race conditions those locks can prevent.
VOP - Vision of Persistance
VOP is a program that parses POV-Ray scene description files and renders them using OpenGL.
A Web Server written in Haskell
It has been extended to produce HWS-WP, the Haskell Web Server With Plugins.
Interpreters for lambda calculus and combinatory logic.
Lambdabot
A large IRC bot, dynamically extensible via plugins.
Frag
A first person 3D game written in Haskell.
Yi
An extensible text editor, reminiscent of vim.
hmp3
A curses-based mp3 player.
Hoogle
A Haskell API search engine
Magic Cookies!
A commercial Android game using SDL2 multimedia written in the FRP flavour Yampa.
Haskanoid
A breakout game with Kinect and Wiimote support, SDL multimedia, written in the FRP DSL Yampa.
JSON Class Generator
A Mac application that allows the user to define classes and enums in an editor and provides the ability to generate Objective-C source code for them, that contain functions for serializing/deserializing to/from JSON.

See also Libraries and tools and the Commercial Users of Functional Programming workshop.

Embedded Domain Specific Languages

Haskell has become quite popular for the development of domain specific languages. Instead of implementing an interpreter or compiler in Haskell, Haskell is enriched by libraries for domain specific data types and functions, that turn Haskell into a domain specific language, for example for describing music, pictures, animations or hardware. Even parsing combinators can be understood as domain specific languages. These embedded languages are filed as libraries and tools.


Reports on Experiences with Haskell

Financial and insurance contracts do not sound like promising territory for functional programming and formal semantics, but in fact we have discovered that insights from programming languages bear directly on the complex subject of describing and valuing a large class of contracts.

We introduce a combinator library that allows us to describe such contracts precisely, and a compositional denotational semantics that says what such contracts are worth. We sketch an implementation of our combinator library in Haskell. Interestingly, lazy evaluation plays a crucial role.

See also this article in the Risk Magazine, a journal of the financial engineering industry.

  • Haskell vs. Ada vs. C++ vs. Awk vs. ..., An Experiment in Software Prototyping Productivity by Paul Hudak and Mark P. Jones, 16 pages.
    Description of the results of an experiment in which several conventional programming languages, together with the functional language Haskell, were used to prototype a Naval Surface Warfare Center requirement for Geometric Region Servers. The resulting programs and development metrics were reviewed by a committee chosen by the US Navy.

    The results indicate that the Haskell prototype took significantly less time to develop and was considerably more concise and easier to understand than the corresponding prototypes written in several different imperative languages, including Ada and C++.

  • Benchmarking implementations of functional languages with pseudoknot, a Float-Intensive benchmark by P. H. Hartel, M. Feeley, M. Alt, L. Augustsson, P. Baumann, M. Beemster, E. Chailloux,C. H. Flood, W. Grieskamp, J. H. G. van Groningen, K. Hammond, B. Hausman, M. Y. Ivory, R. E. Jones, J. Kamperman, P. Lee, X. Leroy, R. D. Lins, S. Loosemore, N. Röjemo, M. Serrano, J.-P. Talpin, J. Thackray, S. Thomas, P. Walters, P. Weis, and P. Wentworth. J. Functional Programming, 6(4):621--655, Jul 1996.
  • The Great Computer Language Shootout
    Comparative benchmarks of a number of different languages and compilers, including Haskell with GHC. GHC has often lead the pack, with frequent 1st places in 2006; as of February 2008, it ranks somewhere around 6th or 7th place, with the closely related language Clean ~3 places up.
  • Colin Runciman and David Wakeling (ed.): Applications of Functional Programming, UCL Press, 1995, ISBN 1-85728-377-5 HB.
    From the cover:
    This book is unique in showcasing real, non-trivial applications of functional programming using the Haskell language. It presents state-of-the-art work from the FLARE project and will be an invaluable resource for advanced study, research and implementation.
  • A Comparative Study of Language Support for Generic Programming Ronald Garcia, Jaakko Jrvi, Andrew Lumsdaine, Jeremy G. Siek, and Jeremiah Willcock. In Proceedings of the 2003 ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA'03), October 2003.
    An interesting comparison of generic programming support across languages, including: Haskell, SML, C++, Java, C#. Haskell supports all constructs described in the paper -- the only language to do so.