https://wiki.haskell.org/api.php?action=feedcontributions&user=Ruiz&feedformat=atomHaskellWiki - User contributions [en]2019-11-16T00:09:12ZUser contributionsMediaWiki 1.27.4https://wiki.haskell.org/index.php?title=Hmatrix_on_Mac_OS_X&diff=17138Hmatrix on Mac OS X2007-12-03T13:11:14Z<p>Ruiz: instructions for the new version</p>
<hr />
<div>[[Category:How to]]<br />
Here are some notes on getting [http://dis.um.es/~alberto/GSLHaskell/ GSLHaskell] running under [[Mac OS X]] 10.4 using [http://www.macports.org/ MacPorts] or [http://finkproject.org/ fink]. These notes may be incomplete, and the details may change slightly in the future.<br />
<br />
Please update this page with anything you discover along the way.<br />
<br />
== Installing GHC using MacPorts ==<br />
<br />
First, you will want to install GHC using MacPorts, not the standalone installers. Assuming that you have uninstalled any other versions of ghc, type:<br />
<br />
sudo port install ghc<br />
<br />
This may take several hours to bootstrap on a slow machine.<br />
<br />
== Required libraries ==<br />
<br />
GSLHaskell requires working versions of GSL, BLAS and LAPACK. You can get GSL and BLAS from DarwinPorts:<br />
<br />
sudo port install gsl<br />
<br />
The accelerated version of LAPACK bundled with MacOS X 10.4 appears to link with GSLHaskell, though I haven't tested it extensively.<br />
<br />
== Installing GSLHaskell ==<br />
<br />
The [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmatrix most recent version] of GSLHaskell is available on [http://hackage.haskell.org/ HackageDB] with the name ''hmatrix''. You can also download it from the darcs repository as follows:<br />
<br />
darcs get http://perception.inf.um.es/~aruiz/darcs/hmatrix --partial<br />
<br />
Next, edit hmatrix.cabal to refer to the appropriate versions of BLAS and LAPACK:<br />
<br />
extra-libraries: gsl gslcblas LAPACK<br />
<br />
To build and install the package, type:<br />
<br />
runhaskell Setup.lhs configure<br />
runhaskell Setup.lhs build<br />
sudo runhaskell Setup.lhs install<br />
<br />
== Using GSLHaskell ==<br />
<br />
These instructions are awkward, and can probably be improved with better knowledge of GHC and/or Cabal.<br />
<br />
To load GSLHaskell using GHCI, you need to add two directories to your LD_LIBRARY_PATH:<br />
<br />
export LD_LIBRARY_PATH=/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/:/opt/local/lib<br />
<br />
To build an example program using GHC, type:<br />
<br />
cd examples<br />
ghc --make -optl-L/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/ plot.hs<br />
<br />
== Plotting with gnuplot and Aquaterm ==<br />
<br />
Install gnuplot using MacPorts:<br />
<br />
sudo port install gnuplot<br />
<br />
If Aquaterm fails to compile, upgrade to the latest version of XCode. Tell gnuplot what terminal to use:<br />
<br />
export GNUTERM=aqua<br />
<br />
You should now be able to build and run examples/plot.hs, and see three nicely anti-aliased plots. If you're using an xterm, you can also choose to leave GNUTERM unset to use gnuplot's built-in X11 support, which is uglier, but apparently allows rotation of 3D plots using the mouse.<br />
<br />
== Using fink ==<br />
<br />
With minor changes the instructions work for fink. (I have already had the ghc and ghc-bin packages) In short:<br />
<br />
fink install gsl<br />
fink install atlas<br />
fink install darcs<br />
darcs get http://perception.inf.um.es/~aruiz/darcs/hmatrix --partial<br />
(fink instal gnuplot)<br />
<br />
runhaskell Setup.lhs configure<br />
runhaskell Setup.lhs build<br />
su<br />
runhaskell Setup.lhs install<br />
exit <br />
cd examples<br />
export LD_LIBRARY_PATH=/sw/lib/<br />
runhaskell tests<br />
OK, passed 100 tests.<br />
OK, passed 100 tests.<br />
etc.</div>Ruizhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Mathematics&diff=16362Applications and libraries/Mathematics2007-10-28T11:05:29Z<p>Ruiz: update url</p>
<hr />
<div>== Applications ==<br />
<br />
=== Physics ===<br />
<br />
;[http://ab-initio.mit.edu/meep/ Meep]<br />
:Meep (or MEEP) is a free finite-difference time-domain (FDTD) simulation software package developed at MIT to model electromagnetic systems.<br />
<br />
;[[Numeric Quest]]<br />
:Jan Skibinski's [[Numeric Quest]] library provides modules that are useful for Quantum Mechanics, among other things.<br />
<br />
== Libraries ==<br />
<br />
=== Linear algebra ===<br />
<br />
;[http://alberrto.googlepages.com/gslhaskell GSLHaskell]<br />
:High level functional interface to standard linear algebra computations and other numerical algorithms based on the GNU Scientific Library and LAPACK. Includes numerical differentiation, integration, Fourier transforms, polynomial root-finding, and support for gnuplot. [[GSLHaskell on MacOS X|MacOS X]].<br />
<br />
;[http://www.cs.utah.edu/~hal/HBlas/index.html Wrapper to CLAPACK]<br />
<br />
;[http://haskelldsp.sourceforge.net/ Digital Signal Processing]<br />
:Modules for matrix manipulation, Fourier transform, interpolation, spectral estimation, and frequency estimation.<br />
<br />
;[http://article.gmane.org/gmane.comp.lang.haskell.general/13561 Index-aware linear algebra]<br />
:Frederik Eaton's library for statically checked matrix manipulation in Haskell<br />
<br />
;[[Numeric Quest]]<br />
:Jan Skibinski's [[Numeric Quest]] library provides several modules that are useful for linear algebra in general, among other things.<br />
<br />
<br />
See also: [[Linear algebra|Design discussions]]<br />
<br />
=== [[Physical units]] ===<br />
<br />
;[[Dimensionalized numbers]]<br />
: Working with physical units like second, meter and so on in a type-safe manner.<br />
<br />
;[http://darcs.haskell.org/numericprelude/src/Number/SI.hs NumericPrelude: Physical units]<br />
: Numeric values with dynamically checked units.<br />
<br />
;[[CalDims]]<br />
:This is not simply a library providing a new type of <hask>Num</hask> class, but stand-alone calculation tool that supports user defined functions and units (basic and derrived), so it can provide dimension-save calculation (not embedded but via shell). Calculations can be modified/saved via shell. It uses rational numbers to avoid rounding errors where possible.<br />
<br />
;[http://code.google.com/p/dimensional/ Dimensional]<br />
: Library providing data types for performing arithmetic with physical quantities and units. Information about the physical dimensions of the quantities/units is embedded in their types and the validity of operations is verified by the type checker at compile time. The boxing and unboxing of numerical values as quantities is done by multiplication and division of units.<br />
<br />
=== Number representations ===<br />
<br />
==== Decimal numbers ====<br />
<br />
;[http://www.n-heptane.com/nhlab/repos/Decimal Decimal arithmetic library]<br />
:An implementation of real decimal arithmetic, for cases where the binary floating point is not acceptable (for example, money).<br />
<br />
==== Real and rational numbers ====<br />
<br />
There are several levels of [[Exact real arithmetic|handling real numbers]] and according libraries.<br />
<br />
===== Arbitrary precision =====<br />
<br />
* Numbers have fixed precision<br />
* Rounding errors accumulate<br />
* Sharing is easy, i.e. in <hask>sqrt pi + sin pi</hask>, <hask>pi</hask> is computed only once<br />
* Fast, because the routines can make use of the fast implementation of <hask>Integer</hask> operations<br />
<br />
;[[Numeric Quest]]<br />
:Jan Skibinski's [[Numeric Quest]] library provides, among other things, a type for arbitrary precision rational numbers with transcendental functions.<br />
<br />
;[http://cvs.haskell.org/darcs/numericprelude/src/Number/FixedPoint.hs FixedPoint.hs]<br />
:part of NumericPrelude project<br />
<br />
===== Dynamic precision =====<br />
<br />
* You tell the precision, an expression shall be computed to and the computer finds out, how precise to compute the input values.<br />
* Rounding errors do not accumulate<br />
* Sharing of temporary results is difficult, that is in <hask>sqrt pi + sin pi</hask>, <hask>pi</hask> will certainly be computed twice, each time with the required precision.<br />
* Almost as fast as arbitrary precision computation<br />
<br />
;[http://www.cs.man.ac.uk/arch/dlester/exact.html ERA] is an implementation (in Haskell 1.2) by David Lester.<br />
: It is quite fast, possibly the fastest Haskell implementation. At 220 lines it is also the shortest. Probably the shortest implementation of exact real arithmetic in any language.<br />
: The provided number type <hask>CReal</hask> is instance of the Haskell 98 numeric type classes and thus can be used whereever you used Float or Double before and encountered some numerical difficulties.<br />
:Here is a mirror: http://darcs.augustsson.net/Darcs/CReal/<br />
<br />
;[http://www.doc.ic.ac.uk/~ae/exact-computation/#bm:implementations IC-Reals] is an implementation by Abbas Edalat, Marko Krznar&#263; and Peter J. Potts.<br />
:This implementation uses linear fractional transformations.<br />
<br />
;[http://r6.ca/ Few Digits] by Russell O'Connor.<br />
:This is a prototype of the implementation he intendeds to write in [http://coq.inria.fr/ Coq]. Once the Coq implementation is complete, the Haskell code could be extracted producing an implementation that would be proved correct.<br />
<!--<br />
Example:<br />
*Data.Real.CReal> answer 1000 (exp 1 + sqrt 2)<br />
--><br />
<br />
;COMP is an implementation by Yann Kieffer.<br />
:The work is in beta and relies on new primitive operations on Integers which will be implemented in GHC. The library isn't available yet.<br />
<br />
===== Dynamic precision by lazy evaluation =====<br />
<br />
The real numbers are represented by an infinite datastructure, which allows you to increase precision successively by evaluating the data structure successively. All of the implementations below use some kind of digit stream as number representation.<br />
Sharing of results is simple.<br />
The implementations are either fast on simple expressions, because they use large blocks/bases, or they are fast on complex expressions, because they consume as little as possible input digits in order to emit the required output digits.<br />
<br />
;[http://medialab.freaknet.org/bignum/ BigFloat] is an implementation by Martin Guy.<br />
:It works with streams of decimal digits (strictly in the range from 0 to 9) and a separate sign. The produced digits are always correct. Output is postponed until the code is certain what the next digit is. This sometimes means that [http://medialab.freaknet.org/bignum/dudeney.html no more data is output].<br />
<br />
;In [http://users.info.unicaen.fr/~karczma/arpap/lazypi.ps.gz "The Most Unreliable Technique in the World to compute pi"] Jerzy Karczmarczuk develops some functions for computing pi lazily.<br />
<br />
;[http://darcs.haskell.org/numericprelude/src/Number/Positional.hs NumericPrelude: positional numbers]<br />
:Represents a real number as pair <hask>(exponent,[digit])</hask>, where the digits are <hask>Int</hask>s in the open range <hask>(-basis,basis)</hask>. There is no need for an extra sign item in the number data structure. The <hask>basis</hask> can range from <hask>10</hask> to <hask>1000</hask>. (Binary representations can be derived from the hexadecimal representation.) Showing the numbers in traditional format (non-negative digits) fails for fractions ending with a run of zeros. However the internal representation with negative digits can always be shown and is probably more useful for further processing. An interface for the numeric type hierarchy of the NumericPrelude project is provided.<br />
:It features<br />
:* basis conversion<br />
:* basic arithmetic: addition, subtraction, multiplication, division<br />
:* algebraic arithmetic: square root, other roots (no general polynomial roots)<br />
:* transcendental arithmetic: pi, exponential, logarithm, trigonometric and inverse trigonometric functions<br />
<br />
=== Type class hierarchies ===<br />
<br />
There are several approaches to improve the [[Mathematical prelude discussion|numeric type class hierarchy]].<br />
<br />
;Dylan Thurston and Henning Thielemann's [http://cvs.haskell.org/darcs/numericprelude/ Numeric Prelude]<br />
:Experimental revised framework for numeric type classes. Needs hiding of Prelude, overriding hidden functions like fromInteger and multi-parameter type classes. Probably restricted to GHC.<br />
<br />
;Jerzy Karczmarczuk's [http://www.haskell.org/pipermail/haskell-cafe/2001-February/001510.html approach]<br />
<br />
;Serge D. Mechveliani's [ftp://ftp.botik.ru/pub/local/Mechveliani/basAlgPropos/ Basic Algebra proposal]<br />
<br />
;Andrew Frank's [http://www.haskell.org/pipermail/haskell-cafe/2006-April/015326.html approach]<br />
:The proposal: ftp://ftp.geoinfo.tuwien.ac.at/frank/numbersPrelude_v1.pdf<br />
<br />
;Haskell Prime: [http://hackage.haskell.org/trac/haskell-prime/ticket/112 Ongoing efforts for the language revision]<br />
<br />
=== Discrete mathematics ===<br />
<br />
;[http://andrew.bromage.org/darcs/numbertheory/ Number Theory Library]<br />
:Andrew Bromage's Haskell number theory library, providing operations on primes, fibonacci sequences and combinatorics.<br />
<br />
;[http://users.skynet.be/jyp/HGAL/ HGAL]<br />
:An haskell implementation of Brendan McKay's algorithm for graph canonic labeling and automorphism group. (aka Nauty)<br />
<br />
;[http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521849306 Computational Oriented Matroids]<br />
:is a book by [http://wwwopt.mathematik.tu-darmstadt.de/~bokowski/ Jürgen G. Bokowski], where he develops Haskell code for Matroid computations.<br />
<br />
See also [[Libraries and tools/Cryptography]]<br />
<br />
=== Computer Algebra ===<br />
<br />
;[http://haskell.org/docon/ DoCon] - Algebraic Domain Constructor<br />
:A library for Algebra, turns GHCi into a kind of Computer Algebra System<br />
<br />
;[http://www.info.unicaen.fr/~karczma/arpap/ Papers by Jerzy Karczmarczuk]<br />
:Some interesting uses of Haskell in mathematics, including [[functional differentiation]], power series, continued fractions.<br />
<br />
=== Statistics ===<br />
;[http://www.sftank.net/?q=node/10 hstats]<br />
: Statistical Computing with Haskell<br />
<br />
=== Miscellaneous libraries ===<br />
<br />
;[http://www.robtougher.com/HaskellMath/ HaskellMath]<br />
:The HaskellMath library is a sandbox for experimenting with mathematics algorithms. So far I've implemented a few quantitative finance models (Black Scholes, Binomial Trees, etc) and basic linear algebra functions. Next I might work on either computer algebra or linear programming. All comments welcome!<br />
<br />
;[http://www.polyomino.f2s.com/david/haskell/codeindex.html Haskell for Maths]<br />
:David Amos' [http://www.polyomino.f2s.com/david/haskell/main.html collection of math libraries] in Haskell - including number theory, commutative algebra, combinatorics, permutation groups and more.<br />
<br />
;[http://darcs.haskell.org/htam/ Various math stuff by Henning Thielemann]<br />
:This is some unsorted mathematical stuff including: GNUPlot wrapper, portable grey map (PGM) image reader and writer, simplest numerical integration, differentiation, zero finding, interpolation, solution of differential equations, combinatorics, some solutions of math riddles, computation of fractal dimensions of iterated function systems (IFS)<br />
<br />
;[[Numeric Quest]]<br />
:Jan Skibinski wrote a collection of Haskell modules that are useful for Mathematics in general, and Quantum Mechanics in particular.<br />
<br />
:Some of the modules are hosted on [http://darcs.haskell.org/numeric-quest/ haskell.org]. They include modules for:<br />
:* Rational numbers with transcendental functions<br />
:* Roots of polynomials<br />
:* Eigensystems<br />
:* Tensors<br />
:* Dirac quantum mechanics<br />
<br />
:Other modules in Numeric Quest are currently only available via the [http://web.archive.org/web/20010605003250/http://www.numeric-quest.com/haskell/ Internet Archive]. They include, among many other things:<br />
:* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ State vector evolution]<br />
:* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ Short study of fuzzy oscillator]<br />
<br />
:See the [[Numeric Quest]] page for more information.<br />
<br />
;[http://www.dinkla.net/fp/cglib.html Geometric Algorithms]<br />
:A small Haskell library, containing algorithms for two-dimensional convex hulls, triangulations of polygons, Voronoi-diagrams and Delaunay-triangulations, the QEDS data structure, kd-trees and range-trees.<br />
<br />
;[http://repetae.net/john/recent/out/HsASA.html Adaptive Simulated Annealing]<br />
:A Haskell interface to Lester Ingber's adaptive simulating annealing code.<br />
<br />
;[http://www.solcon.nl/mklooster/repos/hmm/ Hmm: Haskell Metamath]<br />
:Hmm is a small Haskell library to parse and verify Metamath databases.<br />
<br />
;[http://eecs.oregonstate.edu/~erwig/pfp/ Probabilistic Functional Programming]<br />
:The PFP library is a collection of modules for Haskell that facilitates probabilistic functional programming, that is, programming with stochastic values. The probabilistic functional programming approach is based on a data type for representing distributions. A distribution represent the outcome of a probabilistic event as a collection of all possible values, tagged with their likelihood. A nice aspect of this system is that simulations can be specified independently from their method of execution. That is, we can either fully simulate or randomize any simulation without altering the code which defines it.<br />
:Get Darcs repository: <code> darcs get http://darcs.haskell.org/probability/ </code><br />
<br />
;[[Sinc function]]<br />
<br />
;[[Gamma and Beta function]]<br />
<br />
;[http://repetae.net/john/recent/out/Boolean.html Boolean]<br />
:A general boolean algebra class and some instances for Haskell.<br />
<br />
;[http://darcs.haskell.org/~lemmih/hode/ HODE]<br />
:HODE is a binding to the Open Dynamics Engine. ODE is an open source, high performance library for simulating rigid body dynamics.<br />
<br />
;[http://sourceforge.net/projects/ranged-sets Ranged Sets]<br />
:A ranged set is a list of non-overlapping ranges. The ranges have upper and lower boundaries, and a boundary divides the base type into values above and below. No value can ever sit on a boundary. So you can have the set <math>(2.0, 3.0] \cup (5.3, 6)</math>.<br />
<br />
;[http://code.google.com/p/hhydra/ hhydra]<br />
:Hhydra is a tool to compute Goodstein successions and hydra puzzles described by Bernard Hodgson in his article 'Herculean or Sisyphean tasks?' published in No 51 March 2004 of the Newsletter of the European Mathematical Society.<br />
<br />
[[Category:Mathematics]]<br />
{{LibrariesPage}}</div>Ruizhttps://wiki.haskell.org/index.php?title=Applications_and_libraries/Mathematics&diff=5415Applications and libraries/Mathematics2006-08-15T12:26:09Z<p>Ruiz: added alternative GSLHaskell download site</p>
<hr />
<div>{{unknown copyright}}<br />
{{LibrariesPage}}<br />
<br />
== Libraries for numerical algorithms and mathematics ==<br />
<br />
=== Linear algebra ===<br />
<br />
;[http://dis.um.es/~alberto/GSLHaskell GSLHaskell]<br />
:High level functional interface to standard linear algebra computations and other numerical algorithms based on the GNU Scientific Library. [http://alberrto.googlepages.com/gslhaskell Alternative download site].<br />
<br />
;[http://www.isi.edu/~hdaume/HBlas/ Wrapper to CLAPACK]<br />
<br />
;[http://haskelldsp.sourceforge.net/ Digital Signal Processing]<br />
:Modules for matrix manipulation, digital signal processing, spectral estimation, and frequency estimation.<br />
<br />
;[http://article.gmane.org/gmane.comp.lang.haskell.general/13561 Index-aware linear algebra]<br />
:Frederik Eaton's library for statically checked matrix manipulation in Haskell<br />
<br />
;Indexless linear algebra algorithms by Jan Skibinski, see below<br />
<br />
<br />
=== Number representations ===<br />
<br />
;[http://www.n-heptane.com/nhlab/repos/Decimal Decimal arithmetic library]<br />
:An implementation of real decimal arithmetic, for cases where the binary floating point is not acceptable (for example, money).<br />
<br />
;[[Exact real arithmetic]]<br />
:is an interesting area: it is a deep connection between numeric methods and deep theoretic fondations of algorithms (and mathematics). Its topic: ''computable real number''s raise a lot of interesting questions rooted in mathematical analysis, arithmetic, but also [http://en.wikipedia.org/wiki/Computability_theory computability theory] (see numbers-as-programs approaches). Computable reals can be achieved by many approaches -- it is not one single theory.<br />
<br />
<br />
=== other ===<br />
<br />
;[http://www.dinkla.net/fp/cglib.html Geometric Algorithms]<br />
:A small Haskell library, containing algorithms for two-dimensional convex hulls, triangulations of polygons, Voronoi-diagrams and Delaunay-triangulations, the QEDS data structure, kd-trees and range-trees.<br />
<br />
;[http://www.info.unicaen.fr/~karczma/arpap/ Papers by Jerzy Karczmarczuk]<br />
:Some interesting uses of Haskell in mathematics, including functional differentiation, power series, continued fractions.<br />
<br />
;[http://haskell.org/docon/ DoCon] - Algebraic Domain Constructor<br />
:A Computer Algebra System<br />
<br />
;[http://www.robtougher.com/HaskellMath/ HaskellMath]<br />
:The HaskellMath library is a sandbox for experimenting with mathematics algorithms. So far I've implemented a few quantitative finance models (Black Scholes, Binomial Trees, etc) and basic linear algebra functions. Next I might work on either computer algebra or linear programming. All comments welcome!<br />
<br />
;[http://darcs.haskell.org/htam/ Various math stuff by Henning Thielemann]<br />
:This is some unsorted mathematical stuff including: GNUPlot wrapper, portable grey map (PGM) image reader and writer, simplest numerical integration, differentiation, zero finding, interpolation, solution of differential equations, combinatorics, some solutions of math riddles, computation of fractal dimensions of iterated function systems (IFS)<br />
<br />
;[http://cvs.haskell.org/darcs/numericprelude/ Numeric Prelude]<br />
:Experimental revised framework for numeric type classes. Needs hiding of Prelude, overriding hidden functions like fromInteger and multi-parameter type classes. Probably restricted to GHC.<br />
<br />
;[http://repetae.net/john/recent/out/HsASA.html Adaptive Simulated Annealing]<br />
:A Haskell interface to Lester Ingber's adaptive simulating annealing code.<br />
<br />
;[http://andrew.bromage.org/darcs/numbertheory/ Number Theory Library]<br />
:Andrew Bromage's Haskell number theory library, providing operations on primes, fibonacci sequences and combinatorics.<br />
<br />
;[http://www.solcon.nl/mklooster/repos/hmm/ Hmm: Haskell Metamath]<br />
:Hmm is a small Haskell library to parse and verify Metamath databases.<br />
<br />
;[http://eecs.oregonstate.edu/~erwig/pfp/ Probabilistic Functional Programming]<br />
:The PFP library is a collection of modules for Haskell that facilitates probabilistic functional programming, that is, programming with stochastic values. The probabilistic functional programming approach is based on a data type for representing distributions. A distribution represent the outcome of a probabilistic event as a collection of all possible values, tagged with their likelihood. A nice aspect of this system is that simulations can be specified independently from their method of execution. That is, we can either fully simulate or randomize any simulation without altering the code which defines it.<br />
<br />
;[[Sinc function]]<br />
<br />
;[http://repetae.net/john/recent/out/Boolean.html Boolean]<br />
:A general boolean algebra class and some instances for Haskell.<br />
<br />
;[http://darcs.haskell.org/~lemmih/hode/ HODE]<br />
:HODE is a binding to the Open Dynamics Engine. ODE is an open source, high performance library for simulating rigid body dynamics.<br />
<br />
;[http://cvs.haskell.org/darcs/numeric-quest/ Mirror of the following numeric modules by Jan Skibinski]<br />
:<br />
*[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/fractions.html Numerics with fractions]<em>(via Internet Archive since 10/06/2003).</em><br />
*[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Roots.html Roots of polynomials]<em>(via Internet Archive since 10/06/2003).</em> It implements the well known Laguerre's method for finding complex roots of polynomials.<br />
*[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Orthogonals.html Indexless linear algebra algorithms]<em>(via Internet Archive since 10/06/2003).</em> Orthogonalization, solution of linear equations, eigenvalues and eigenvectors.<br />
* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ State vector evolution]<em>(via Internet Archive since 10/06/2003)</em><br />
* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ Short study of fuzzy oscillator]<em>(via Internet Archive since 10/06/2003)</em><br />
* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Tensor.html N-dimensional tensors]<em>(via Internet Archive since 10/06/2003)</em><br />
<br />
;[http://users.skynet.be/jyp/HGAL/ HGAL]<br />
:An haskell implementation of Brendan McKay's algorithm for graph canonic labeling and automorphism group. (aka Nauty)</div>Ruizhttps://wiki.haskell.org/index.php?title=Talk:History_of_Haskell/Version_1&diff=4811Talk:History of Haskell/Version 12006-07-16T11:53:35Z<p>Ruiz: comment on Fermat's Last Theorem example</p>
<hr />
<div>== Comments on "The History of Haskell" (draft) ==<br />
<br />
Please use the Wiki to add your comments here. Include your name and the date. You can do this with four tildes, like this: <nowiki>~~~~</nowiki>.<br />
<br />
To edit the page, you need to log in: click the login link at the bottom of the window. If you don't already have an account, the login page lets you create one in 30 seconds. See [[HaskellWiki:Contributing]].<br />
<br />
-----------------<br />
<br />
== Administration ==<br />
<br />
[[User:Simonpj|Simonpj]] 18:51, 14 July 2006 (UTC) Simon PJ. Here is an example comment<br />
<br />
[[User:BerniePope|BerniePope]] I hope you don't mind, but I've taken the liberty of breaking this up into sections, so that it is easier to find out what has been said already. This seems to be especially useful for typos etc. Please feel free to add other sections if you think they are necessary. I've also made the page numbers bold, and put them into page order (where possible).<br />
<br />
== Title suggestions ==<br />
<br />
[[User:JaredUpdike|JaredUpdike]] 20:38, 14 July 2006 (UTC) Other ideas for a title: ''The History of Haskell: Unsuccessfully Avoiding Success'' or something using the motto "Avoid success at all costs." Or perhaps ''Success Considered Harmful, or, A History of Haskell'' or ''Doomed to Succeed'' quoting Hoare (although this sounds somewhat self-congratulatory).<br />
<br />
[[User:GaneshSittampalam|GaneshSittampalam]] 09:19, 15 July 2006 (UTC) I really like the "eager to be lazy" title.<br />
<br />
== Typos, spelling, grammar, formatting and expression ==<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Typo: '''page 2''', column 2, "Rod Bustall" should be "Rod Burstall".<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Spelling: '''page 3''', column 1, "confernce".<br />
<br />
On '''page 4''' after the list of goals, it seems that the following sentence ("We agreed to base it on an existing language,<br />
namely OL.") should be preceeded by a line break (it now starts on the same line as the sixth goal).<br />
<br />
[[User:JaredUpdike|JaredUpdike]] 22:00, 14 July 2006 (UTC) '''page 9''' Section 3.8, last paragraph, syntax error: should be "Miranda is still in use today: it '''is''' still taught in some institutions", missing word. (Sec 4.2 ''This tradition was honed by Moses Schonfinkel and Haskell Curry, and came to be called currying.'' I half expected a joke following this, saying ''[it was] called currying, luckily, and not '''schonfinkeling'''.'') Same section, typo: ''is a list of lists'' should be ''in a list of lists.''<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Expression. '''page 9'''. It says "Haskell did not adopt Miranda's abstract data types, using '''its''' module system instead." It is not clear whose module system it is using. Perhaps it should read "using '''a''' module system instead." ?<br />
<br />
[[User:BerniePope|BerniePope]] 15:56, 15 July 2006 (UTC) Tense. '''page 12'''. Section 5.1, algebraic data types. It says "In general, every algebraic data type specified...", should that be "specifies" ? or perhaps even better "In general, algebraic data types specify" ?<br />
<br />
[[User:Ruiz|Ruiz]] 12:04, 16 July 2006 (UTC) Comment. '''page 12'''. If I am not mistaken, the Fermat's Last Theorem example only generates (1,1,z) triplets.<br />
<br />
[[User:BerniePope|BerniePope]] 16:15, 15 July 2006 (UTC) Tense. '''page 13'''. Section 5.3 Abstract types. It says "This had the advantage ...". Perhaps it should be: "This has the advantage", since Miranda still exists, and the advantage still holds. Later in the same paragraph the expression about adopting the feature in Haskell is a bit awkward. Perhaps it could read: "It is not clear how to adapt Miranda's method of defining abstract data types to type classes, and that is one reason we chose a different solution." ?<br />
<br />
[[User:BerniePope|BerniePope]] 16:27, 15 July 2006 (UTC) Typo. Section 5.6, '''page 14''' and in Bibliography. Godel's name in citation missing the 'o'.<br />
<br />
[[User:BerniePope|BerniePope]] 05:41, 16 July 2006 (UTC) Comment. '''page 15''', column 1. "practical comprehensibility" is a bit of a mouthful. Perhaps "pragmatism" would suffice?<br />
<br />
[[User:BerniePope|BerniePope]] 06:11, 16 July 2006 (UTC) Typo (possibly). '''page 16'''. Section 6.4, multi-parameter type classes. "They gave the following example: second.". Should the "second" be there?<br />
<br />
[[User:BerniePope|BerniePope]] 06:56, 16 July 2006 (UTC) Typo, '''page 16'''. The code "n = (x + y)", perhaps drop the redundant parens?<br />
<br />
[[User:BerniePope|BerniePope]] 07:19, 16 July 2006 (UTC) '''page 17'''. Choice of identifier. In the code "f (MkT x f) = f x". Perhaps the inner or outer "f" should be renamed? Also, is there a more compelling example than this one?<br />
<br />
[[User:BerniePope|BerniePope]] 07:16, 16 July 2006 (UTC) Typo. '''page 17'''. "patter-matching" -> "pattern-matching".<br />
<br />
[[User:BerniePope|BerniePope]] 07:26, 16 July 2006 (UTC) Expression. '''page 17'''. Perhaps drop "rather than explicitly". This is implied by the previous "happens implicitly".<br />
<br />
[[User:BerniePope|BerniePope]] 07:38, 16 July 2006 (UTC) Typo. '''page 18'''. In lexically scoped type variables, it says the type of xcons is "forall a. a -> a". Do you mean: "forall a . [a] -> [a]"?<br />
<br />
[[User:BerniePope|BerniePope]] 08:39, 16 July 2006 (UTC) Typesetting. '''page 22'''. Sometimes the "IO monad" is written where "IO" is in typewriter font, and other times it is in times roman, and other times it is written "I/O". This may be an intentional distinction, but maybe the notation can be unified?<br />
<br />
[[User:JaredUpdike|JaredUpdike]] 04:27, 15 July 2006 (UTC) '''page 25'''. Section 9.2 misspelling "existance" should be "existence" third to last paragraph. Sec. 9.5 , '''page 27''', second to last paragraph. ''test bad'' should be ''test bed''.<br />
<br />
[[User:Weihu|Weihu]] 21:35, 15 July 2006 (UTC) Typo: '''page 31''', column 2, "a central them" should be "a central theme".<br />
<br />
[[User:GaneshSittampalam|GaneshSittampalam]] 09:18, 15 July 2006 (UTC) Section 11.2.3 '''page 34''' typo "unsagePerformIO".<br />
<br />
Typo on '''page 39''': Another example is that Linspire’s ''toold'' must handle legacy data formats. --[[User:NeilMitchell|Neil Mitchell]] 15:23, 14 July 2006 (UTC)<br />
<br />
== General comments ==<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Comment. '''page 7'''. Section 3.3, third paragraph. Rather than talk about "div" (are the first quote marks backwards?), perhaps you could say - "for example, Miranda's type system allows floating point values to be given to functions which are only defined on the integer subset of num, thus turning a static error into a dynamic one."<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Comment. '''page 10'''. Section 4.1, layout. It says "The rules are simple ...". I think this is a contentious issue. Recent discussions on the Haskell Prime mailing list [http://www.haskell.org//pipermail/haskell-prime/2006-March/000898.html] suggested a contrary view. How many Haskellers actually know the rules? Perhaps it would be more accurate to say that experience shows it is not hard to adopt a style of programming which stays within the rules.<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Comment. Footnote 2 on '''page 10''' says the Scheme authors took a more Draconian approach with respect to operators, though it doesn't actually say what that means. On the off chance that someone reading the paper doesn't know Scheme, it might be worth elaborating on that point.<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Comment. '''page 12'''. Section 4.4. Near the end of the section you give an example of "where" being attached to a declaration. I think the example function "f" is rather obscure, perhaps there is a better example? Maybe one from the Prelude? Also, there seems to be another point you could make here. Due to laziness we get some more freedom in the way that we write where clauses. For instance, the thing being defined in the where clause may only be well defined in a subset of the alternatives. But that doesn't matter because we will only evaluate the thing if and when it is needed, not before.<br />
<br />
[[User:BerniePope|BerniePope]] 15:42, 15 July 2006 (UTC) Comment. '''page 12'''. Section 4.5, list comprehensions. Perhaps it is worth noting the Haskell does not have the diagonalisation operator like Miranda. It may also be worth remarking on why this is so. Surely it was considered.<br />
<br />
[[User:BerniePope|BerniePope]] 16:05, 15 July 2006 (UTC) Comment. '''page 13'''. Section 5.3 Abstract types. It says that the type has one constructor. Is it really necessary to limit the type to just one constructor? Surely it is enough that the constructors of the type are not exported, regardless of how many there are?<br />
<br />
[[User:BerniePope|BerniePope]] 05:28, 16 July 2006 (UTC) Comment. '''page 14'''. Section 6.1, Type classes. Perhaps it should mention that '''eqInt''' is primitive equality on integers, maybe as a comment in the code.<br />
<br />
[[User:BerniePope|BerniePope]] 05:54, 16 July 2006 (UTC) Comment. '''page 15'''. Section 6.2 Monomorphism restriction. This marks one of the most unusual aspects of the language, especially in the Language Report. In particular, it is motivated by operational semantics --- sharing --- but the rest of the Report is largely silent on the issue. I think the Report says something to the effect of "programmers expect sharing to be preserved", but there is not much else in the Report to back this statement up. Perhaps you could tie this back to the discussion in Section 3.4 (Haskell has no formal semantics). Also, I think it would be reasonable to say "GHC provides a flag to suppress the restriction", without actually naming the flag.<br />
<br />
[[User:BerniePope|BerniePope]] 06:02, 16 July 2006 (UTC) Comment. '''page 15'''. Section 6.2 Higher kinded polymorphism. It says "Here, the type variable m has kind *->*". It seems like the reader is already supposed to know what a kind is at this point. Perhaps the section could provide a little introduction to the concept of kinds first. Another thing about kinds is that they are sort of shadowy figures that seem to lurk in the background of Haskell. For instance they have no syntactic counterpart in Haskell 98. It can be quite daunting for beginners when they get a kind error.<br />
<br />
[[User:BerniePope|BerniePope]] 07:30, 16 July 2006 (UTC) Comment. '''page 17'''. Section 6.6 Implicit parameters. Perhaps contrast this approach to a Reader monad?<br />
<br />
[[User:BerniePope|BerniePope]] 07:44, 16 July 2006 (UTC) Comment. '''page 18'''. Arrows. It doesn't really say what arrows are, except that they are like monads, but more general. Perhaps this could be elaborated, maybe with some mention of the intuition that arrows generalise things which are somehow composable? Perhaps an example of an arrow which cannot be done with a monad?<br />
<br />
[[User:BerniePope|BerniePope]] 08:14, 16 July 2006 (UTC) Comment. '''page 20'''. Section 7.2 Monads. It says that "Checking that the laws hold provides a reassuring sanity check when defining a new monad." Perhaps you could elaborate on exactly what we are checking, and subsequently reassured about. It says earlier that the laws show associativity and identity, but is there are more "programmer oriented" view of what this means? <br />
<br />
[[User:BerniePope|BerniePope]] 08:22, 16 July 2006 (UTC) Comment. '''page 20'''. Section 7.2 Monads. It says monads were helpful in structuring programs, including "the Haskell compiler itself". This sounds like there was a single Haskell compiler. Perhaps it should be "exisiting Haskell compilers"?<br />
<br />
[[User:BerniePope|BerniePope]] 08:22, 16 July 2006 (UTC) Comment. '''page 20'''. Section 7.2 Monads. One of the ongoing issues with monads is combining them together. Perhaps you could mention some of the attempts at doing this, such as monad transformers. <br />
<br />
[[User:Hoan|Hoan]] 12:45, 15 July 2006 (UTC) On '''page 33''' it says that Ruby on Rails is a continuation based framework. I think thats wrong. PS. Its a riveting read.<br />
<br />
[[User:BerniePope|BerniePope]] 07:57, 16 July 2006 (UTC) Overall. Names of people. I've noticed that sometimes people are referred to by their whole name, whilst others are referred to by just their family name. Perhaps there is an underlying method here, but it wasn't clear to me. Perhaps it is that the first reference gets a full name, and subsequent ones are just the family name? Is that always the case?</div>Ruizhttps://wiki.haskell.org/index.php?title=Summer_of_Code/Project_suggestions&diff=3859Summer of Code/Project suggestions2006-04-25T15:33:12Z<p>Ruiz: added proposal: GSL binding</p>
<hr />
<div>Haskell projects for Google's Summer of Code.<br />
<br />
This page is for [[Summer of Code: People | mentors]] to add their ideas and to say which projects they'd be happy to supervise. It's also ok for other people to add their own ideas that are not yet claimed by a mentor. If you do this, could you please notify an admin person so that they can try and find a mentor for that project idea, because in the end we can only deal with project ideas that do have people prepared to mentor them. <br />
<br />
Students should not claim projects here, they must use the normal Google Summer of Code application process. See the [http://code.google.com/soc/studentfaq.html student FAQ] for details.<br />
<br />
== Cabal ==<br />
<br />
=== Cabal-get/HackageDB ===<br />
Cabal-get is an automatic installer for Cabal libraries.<br />
The goal is to distribute the program with [http://haskell.org/cabal Cabal], but to achieve this we need to cut almost all of its dependencies. This project should be fairly easy (the code base of cabal-get is only 1K loc).<br />
<br />
Mentor: Lemmih (lemmih@gmail.com)<br />
<br />
=== Distributed compilation ===<br />
<br />
A-la distcc, the distributed compilation of Haskell modules.<br />
<br />
== GHC ==<br />
<br />
=== GhcPlugins ===<br />
Write a new plugin system using the new ghc-api. Enough of the groundwork has been laid out now that someone with a few months and some background could finish up the work.<br />
<br />
GhcPlugins will replace the plugin system currently used in [http://haskell.org/hide hIDE].<br />
<br />
Mentor: Lemmih (lemmih@gmail.com)<br />
<br />
=== Implement various debugging tools in GHC ===<br />
* Dynamic breakpoints.<br />
* Generic object viewer.<br />
* Simple CCS for providing stack traces on exceptions and breakpoints.<br />
<br />
Mentor: Lemmih (lemmih@gmail.com)<br />
<br />
=== Handle recursive modules in GHC ===<br />
<br />
=== Incremental Garbage Collector for GHC ===<br />
<br />
Implementing the incremental garbage collection algorithm described in the paper [http://research.microsoft.com/~simonpj/Papers/inc-gc.htm Non-stop Haskell] in GHC.<br />
<br />
=== Parsers for various programming languages ===<br />
<br />
Populate the [http://haskell.org/ghc/docs/latest/html/libraries/index.html Language] hierarchy of modules with new parsers for many languages, at the moment it does only contain Language.Haskell.<br />
<br />
Mentor: Shae Matijs Erisson (shapr@scannedinavian.com)<br />
<br />
=== Data.ByteString ===<br />
<br />
==== Port the Clean high performance string code ====<br />
<br />
Clean does very well for low level string benchmarks. Find out what<br />
they do, and port it to [http://www.cse.unsw.edu.au/~dons/fps.html Data.ByteString]<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
==== Storable a => Vector a ====<br />
<br />
Extend the [http://www.cse.unsw.edu.au/~dons/fps.html Data.ByteString]<br />
interface to arbitrary (Storable a) arrays. Data.ByteString provides a<br />
high performance api to arrays of bytes. Generalise this to arbitrary<br />
vectors of Storable a values, winning fame and glory in the process.<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
==== Unicode layer over Data.ByteString ====<br />
<br />
Extend the [http://www.cse.unsw.edu.au/~dons/fps.html Data.ByteString]<br />
interface to support Unicode.<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
==== Port Alex to Data.ByteString ====<br />
<br />
Port the [[Alex]] lexer generator to run with mmap'd Data.ByteStrings<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
=== Improve performance of numerical code ===<br />
<br />
GHC's performance for double and float intensive code is not as good as<br />
it could be. Find out why and improve it. Requires GHC backend hacking.<br />
Must be very Haskell literate or have knowledge of code generators.<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
== Graphics ==<br />
<br />
=== Fix HsSDL (Haskell [http://libsdl.org libSDL] bindings) on Windows and MacOS ===<br />
<br />
=== Gtk / Graphics / GNOME related projects ===<br />
<br />
I'd be happy to accept projects in this area. Last year I was unofficial mentor to Paolo who did the [http://www.cairographics.org/ cairo] bindings. (Feel free to add more ideas here or I might do as I think of them.)<br />
<br />
Mentor: Duncan Coutts<br />
<br />
It would be cool to see a library using ideas from [http://www.sandr.dds.nl/FunctionalForms/index.html FunctionalForms] in Gtk2Hs.<br />
<br />
=== Darcs GUI ===<br />
<br />
Design and implement a GUI front-end using wxhaskell for Darcs.<br />
<br />
Mentor: No-one.<br />
<br />
=== Embed ghci/ghci-api in ion ===<br />
<br />
[http://modeemi.cs.tut.fi/~tuomov/ion/ ion] is a cool window manager<br />
written by Tuomo Valkonen, a Haskell hacker. It is currently extensible<br />
in [http://www.lua.org/ lua], but a very interesting project would be to work out how to<br />
dynamically extend it in Haskell, perhaps using ideas from<br />
[http://www.cse.unsw.edu.au/~dons/yi.html Yi].<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
== Web development ==<br />
<br />
=== Continuation based DSL on top of HAppS ===<br />
<br />
Do you have a vision how to do better than WASH? Integrate continuation based interaction with client or use something like Functional Forms for the interaction. How to best to interact with XML etc. Other HAppS related projects<br />
also possible.<br />
<br />
Mentor: Einar Karttunen (musasabi, ekarttun@cs.helsinki.fi)<br />
<br />
== Editing ==<br />
<br />
=== Port ghc-api's eval mechanism to Yi ===<br />
<br />
Yi is an editor written and extensible in Haskell. Construct a binding<br />
to ghc-api such that new expressions may be evaluated at runtime in the<br />
editor, accessing the editor's internal structures in a type safe way,<br />
dynamically. elisp for Haskell!<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au) and Lemmih (lemmih@gmail.com).<br />
<br />
=== Yi projects ===<br />
<br />
Syntax Highlighting, Plugins. It's quite a peculiar kind of application. Its design is based on [http://www.cse.unsw.edu.au/~dons/papers/PSSC04.html type-safe dynamically loadable modules] and it is [http://www.cse.unsw.edu.au/~dons/papers/PSSC04.html more dynamic than Emacs]!<br />
<br />
Mentor: Shae Matijs Erisson (shapr@scannedinavian.com)<br />
<br />
=== Generic Hide Hacking ===<br />
* Rewrite plugins for the new plugin-system.<br />
* Integration with [[Lambdabot]], access to plugins through Hide.<br />
* Other?<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au), Lemmih (lemmih@gmail.com)<br />
<br />
== Bindings ==<br />
<br />
=== D-BUS Binding ===<br />
<br />
Haskell bindings to the [http://www.freedesktop.org/wiki/Software/dbus D-BUS] message bug system, a simple way for applications to talk to one another. <br />
<br />
Mentor: Duncan Coutts<br />
<br />
=== Matlab Binding ===<br />
<br />
Matlab/Octave is an excellent tool for quick imperative numerical programming.<br />
However, it would be much nicer if anyone wrote bindings such<br />
that it could be mixed with Haskell.<br />
<br />
Mentor: Johan Henriksson (Mahogny, johen@student.chalmers.se)<br />
<br />
=== GSL Binding ===<br />
<br />
Extend the [http://dis.um.es/~alberto/GSLHaskell GSLHaskell] library to cover all the [http://www.gnu.org/software/gsl/ GSL] functions. Implement (possibly using additional numerical libraries) important Octave functions not available in the GSL.<br />
<br />
Mentor: Alberto Ruiz (aruiz@um.es)<br />
<br />
== Games ==<br />
<br />
=== Frag hacking ===<br />
<br />
[[Frag]] is a 3d first person shootup game written in Haskell,<br />
using OpenGL. It can be greatly extended in all sorts of ways. If<br />
you're in to gaming, have a look at this.<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
=== Students' ideas / Games ===<br />
<br />
I'm ready to take on anyone willing to write a useful application or game (preferably a program) given that it is of reasonable size (upper limitaton).<br />
<br />
Mentor: Johan Henriksson (Mahogny, johen@student.chalmers.se)<br />
<br />
== Bioinformatics ==<br />
<br />
=== Bioinformatics tools ===<br />
<br />
1. Further develop RBR, a tool for masking repeats. This can include<br />
a) optimize (using FastPackedString and/or a new internal data structure); b) extend functionality.<br />
<br />
2. Develop a tool for annotation/classification of sequences. This would involve computation on and visualization of graphs (experience with the latter would be really great).<br />
<br />
Prior bioinformatics knowledge is not a requirement. Please contact me for details.<br />
<br />
Mentor: Ketil ([mailto:ketil@ii.uib.no ketil@ii.uib.no])<br />
<br />
== Concurrency / Network ==<br />
<br />
=== Concurrent disk-based data structures ===<br />
<br />
Implement B+tree or a variant supporting concurrent updates using STM,<br />
serialize updates into a write ahead log and provide for serialization.<br />
Bind the whole thing with a nice HaskellDB like API. Variations on<br />
the theme possible.<br />
<br />
Mentor: Einar Karttunen (musasabi, ekarttun@cs.helsinki.fi)<br />
<br />
=== Haskellnet ===<br />
<br />
We have got cgi, ftp, http, and irc. Get them into shape in the hierarchical libraries as well as adding a number of other protocols, like nntp, smtp and pop3, imap4, ... much like the [http://ocamlnet.sourceforge.net/doc/goals/goals.html Ocamlnet project].<br />
<br />
Mentor: Shae Matijs Erisson (shapr@scannedinavian.com)<br />
<br />
=== IPv6 and IPSec for House ===<br />
<br />
Implement IPv6 and maybe IPSec for the House (an operating system in Haskell). Needs mostly networking knowledge and ideas for binary data serialization.<br />
<br />
== UNIX ==<br />
<br />
=== A Haskell shell ===<br />
<br />
Concise syntax and higher order functions would make a Haskell shell<br />
very useful. This project would aim to produce a real world shell <br />
written in Haskell, and using an embedded domain specific language to<br />
encode common operations.<br />
<br />
Mentor: Don Stewart (dons@cse.unsw.edu.au)<br />
<br />
== Databases ==<br />
<br />
=== [[Libraries and tools/Database interfaces/HaskellDB|HaskellDB]] ===<br />
<br />
==== Port HaskellDB to HList ====<br />
<br />
[[Libraries and tools/Database interfaces/HaskellDB|HaskellDB]] currently uses its own [[Extensible record|record system]], which (I believe) is less powerful than [http://homepages.cwi.nl/~ralf/HList/ HList]. The project is to port HaskellDB to use HList instead, making any necessary changes to the interface to make this possible and to fit HList better.<br />
<br />
Mentor: Björn Bringert (bringert@cs.chalmers.se)<br />
<br />
==== Implement back-end dependent SQL generation in HaskellDB ====<br />
<br />
Currently HaskellDB uses the same SQL generator for all database systems. Unfortunately different database systems support different SQL dialects. The project is to make it possible to use different SQL generators for different back-ends, and implement generators for common database systems such as for example MySQL, PostgreSQL and SQLite. The project could also include adding support for back-end specific SQL extensions (such as various string and date functions, non-standard field types etc.) to the HaskellDB query language.<br />
<br />
Mentor: Björn Bringert (bringert@cs.chalmers.se)<br />
<br />
==== Add support for optimization features in HaskellDB ====<br />
<br />
The projects is to added support for indexes, prepared statements and other optimization features to HaskellDB.<br />
<br />
Mentor: Björn Bringert (bringert@cs.chalmers.se)</div>Ruizhttps://wiki.haskell.org/index.php?title=Applications_and_libraries&diff=3039Applications and libraries2006-03-20T20:39:43Z<p>Ruiz: short description of the GSL wrappers</p>
<hr />
<div>{{unknown copyright}}<br />
The first place to look for data types or functions that do what you<br />
want is the Standard Prelude, then the <br />
[[Language and library specification]] (both parts of<br />
the Haskell standards documentation), then in whatever extra libraries<br />
are provided by the Haskell implementation you are using, then on the<br />
page you are looking at. If it is not here, then it may be in the<br />
[http://www.cse.unsw.edu.au/~dons/announce.html archives] of the<br />
[[Haskell Weekly News]].<br />
<br />
Search the standard libraries collection (by name or type signature)<br />
using [http://haskell.org/hoogle Hoogle].<br />
<br />
__TOC__<br />
<br />
There is an effort underway to standardise many of the extra libraries that come with Haskell implementations, and at the same time extend the module namespace into a hierarchy. A document describing this project can be found [http://www.haskell.org/~simonmar/libraries/libraries.html here], and there is a [http://www.haskell.org/mailman/listinfo/libraries mailing list] for discussing issues related to libraries.<br />
<br />
A large collection of [http://www.haskell.org/ghc/docs/latest/html/libraries/index.html standard hierarchical libraries] are currently distributed with GHC (from version 5.04), Hugs (from Nov 2003), and nhc98 (from 1.16).<br />
<br />
[[Cabal]], The Common Architecture for Building Applications and Libraries, is an framework for packaging, building, and installing any tool developed in the Haskell language.<br />
<br />
This page is intended as a comprehensive list of all Haskell libraries and tools. Some of these are proof-of-concepts rather than production code. Some have no longer been maintained for a long time.<br />
<br />
On freshmeat.com there is [http://freshmeat.net/browse/834/?topic_id=834 an alternative list of public domain software written in Haskell]. That list is currently short (for you to change that), but in particular it displays the current development status of the software. Even more Haskell projects are documented in the [http://haskell.org/communities/ community reports] and in the archives of the [[Haskell Weekly News]].<br />
<br />
== Program Development ==<br />
<br />
<dl><br />
<dt>[http://www.cs.kent.ac.uk/projects/vital/ Vital]<br />
<dd>Vital is a visual programming environment. It is particularly intended for supporting the open-ended, incremental style of development often preferred by end users (engineers, scientists, analysts, etc.).</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/hmake/ hmake], a Haskell-aware replacement for make</dt><br />
<dd>Automatically keeps track of module dependencies (i.e. no need to write any Makefiles!). Can be used with any of the usual Haskell compilers (ghc, hbc, nhc98).</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/cpphs/ cpphs]</dt><br />
<dd>Cpphs is a re-implementation (in Haskell) of the C pre-processor.</dd><br />
<br />
<dt>[http://repetae.net/john/computer/haskell/DrIFT DrIFT]</dt><br />
<dd>DrIFT is a tool which allows derivation of instances for classes that aren't supported by the standard compilers. In addition, instances can be produced in seperate modules to that containing the type declaration. This allows instances to be derived for a type after the original module has been compiled. As a bonus, simple utility functions can also be produced from a type.</dd><br />
<br />
<dt>[http://www.cl.cam.ac.uk/users/rje33/software.html HaskTags]</dt><br />
<dd>Hasktags is a simple program that generates TAGS files for Haskell code. Together with a supporting editor (e.g. NEdit, XEmacs, or Vim) TAGS files can be used to quickly find the places where functions, data constructors etc. are defined.</dd><br />
<br />
<dt>[http://www.dtek.chalmers.se/~d99josve/tagsh.tar.gz tagsh]</dt><br />
<dd>A version of the tags program for Haskell. It uses the standardised hssource and posix library, works with GHC 5.02.1. tags file has been checked to work with vim and nedit.</dd><br />
<br />
<dt>[http://home.conceptsfa.nl/~jwit/HaSpell.html HaSpell]</dt><br />
<dd>HaSpell is a spelling and style checker for Haskell programs. It can detect spelling errors in comments in the program text, and optionally in the code itself. There is an option to detect metasyntactic variables (such as 'foo') and 'bad function prefixes' such as 'compute' and 'doThe' - these make the program less readable and generally indicate bad programming style.</dd><br />
<br />
<dt>[http://www.informatik.uni-bremen.de/~ewk/ewk.html Uniform Workbench]</dt><br />
<dd>This tool is an Integration Framework providing its services in the lazy functional programming language Haskell. The WorkBench provides support for data, control and presentation integration, so that integrated Software Development Environments can be constructed from the basis of prefabricated, off-the-shelf components. We are currently using the WorkBench to construct integrated environments for Haskell program development and for specification and proof of Z specifications.</dd><br />
<br />
<dt>[http://www.isi.edu/~hdaume/HAllInOne/ Haskell All-In-One]</dt><br />
<dd>This Haskell utility takes a program implemented in multiple modules and converts it to a single module.</dd><br />
</dl><br />
<br />
=== Integrated Development Environments ===<br />
<br />
<dl><br />
<dt>[http://www.kdevelop.org/ KDevelop]</dt><br />
<dd>This IDE supports many languages. For Haskell it [http://developer.kde.org/documentation/library/cvs-api/kdevelop/html/LangSupportStatus.html currently supports] project management, syntax highlighting, building (with GHC) & executing within the IDE.<br />
</dd><br />
<br />
<dt>[http://leiffrenzel.de/eclipse/eclipsefp.html Haskell support for Eclipse]</dt><br />
<dd>Eclipse is an open, extensible IDE platform for 'everything and nothing in<br />
particular'.<br />
It is implemented in Java and runs on several platforms. The Java IDE built<br />
on top of<br />
it has already become very popular among Java developers. The Haskell tools<br />
extend it to support editing (syntax coloring, code assist), compiling, and<br />
running<br />
Haskell programs from within the IDE. More features like source code<br />
navigation,<br />
module browsing etc. will be added in the future.</dd><br />
<br />
<dt>[http://www.dtek.chalmers.se/~d99josve/hide/ hIDE]</dt><br />
<dd>hIDE is a GUI-based Haskell IDE written using gtk+hs. It does not include an editor but instead interfaces with NEdit, vim or GNU emacs.<br />
<br />
<dt>[http://haskell.org/hide hIDE-2]</dt><br />
<dd>Through the dark ages many a programmer has longed for the ultimate tool. In response to this most unnerving craving, of which we ourselves have had maybe more than our fair share, the dynamic trio of #Haskellaniacs (dons, dcoutts and Lemmih) hereby announce, to the relief of the community, that a fetus has been conceived:<br />
<br />
hIDE - the Haskell Integrated Development Environment.<br />
<br />
So far the unborn integrates source code recognition and a chameleon editor, resenting these in a snappy gtk2 environment. Although no seer has yet predicted the date of birth of our hIDEous creature, we hope that the mere knowledge of its existence will spread peace of mind throughout the community as oil on troubled waters.<br />
<br />
See also: [[Screenshots of HIDE]] and [[HIDE]]</dd><br />
<br />
<dt>[http://www.students.cs.uu.nl/people/rjchaaft/JCreator JCreator with Haskell support]</dt><br />
<br />
<dd>JCreator is a highly customizable Java IDE for Windows.<br />
Features include extensive project support, fully customizable<br />
toolbars (including the images of user tools) and menus,<br />
increase/decrease indent for a selected block of text<br />
(tab/shift+tab respectively). The Haskell support module adds<br />
syntax highlighting for haskell files and winhugs, hugs, a static<br />
checker (if you double click on the error message, JCreator will<br />
jump to the right file and line and highlight it yellow) and the<br />
Haskell 98 Report as tools. Platforms: Win95, Win98, WinNT and<br />
Win2000 (only Win95 not tested yet). Size: 6MB.<br><br />
JCreator is a trademark of Xinox Software; Copyright &copy; 2000<br />
Xinox Software<br><br />
The Haskell support module is made by [http://www.students.cs.uu.nl/people/rjchaaft/ Rijk-Jan van Haaften].</dd><br />
<br />
<dt>[http://www.haskell.org/visualhaskell Visual Haskell]</dt><br />
<dd><br />
Visual Haskell is a complete development environment for Haskell software, based on Microsoft's [http://msdn.microsoft.com/vstudio/productinfo/ Microsoft Visual Studio] platform. Visual Haskell integrates with the Visual Studio editor to provide interactive features to aid Haskell development, and it enables the construction of projects consisting of multiple Haskell modules, using the Cabal building/packaging infrastructure.</dd><br />
</dl><br />
<br />
=== Editor Modes for syntax highlighting and more ===<br />
<br />
<dl><br />
<dt>For SubEthaEdit (Mac OS X editor): <dd>[http://www.cs.kent.ac.uk/people/rpg/tatd2/Haskell.mode.zip Haskell mode].<br />
<dt>For KDE's Kate</dt><br />
<dd><br />
<ul><br />
<li>[http://www.informatik.uni-bonn.de/~ralf/software.html#syntax Files] by Ralf Hinze.<br />
<li>[hs.xml hs.xml] and [lhs.xml lhs.xml] by Brian Huffman.<br />
</ul><br />
<dt>[http://www.nedit.org/ftp/contrib/highlighting/haskell.pats NEdit]<br />
syntax highlighting and block comment support.</dt><br />
<br />
<dt>[http://www.vim.org vim] syntax highlighting</dt><br />
<dd><br />
<ul><br />
<li>[ftp://ftp.cse.unsw.edu.au/pub/users/dons/vim/ by Don Stewart]: for TeX and cpp style Haskell files. <br />
<li>[http://urchin.earth.li/~ian/vim/ by Ian Lynagh]: distinguishes different literal Haskell styles.<br />
<li>by John Williams: Both regular Haskell [haskell.vim .hs] and [lhaskell.vim .lhs] files<br />
that uncomment lines using '&gt;' are supported.<br />
</ul><br />
<br />
<dt>[http://www.haskell.org/libraries/Haskell98.syn Syntax highlighting file] for [http://www.textpad.com textpad]</dt><br />
<br />
<dd>by Jeroen van Wolffelaar and Arjan van IJzerdoorn, which<br />
inludes all prelude functions, datatype, constructors, etc, all in<br />
seperate groups.</dd><br />
<br />
<dt>[http://www.astercity.net/~khaliff/haskell/haskellmode.tgz Haskell mode]</dt><br />
<br />
<dd>for [http://www.jedsoft.org/jed/ jed] by<br />
Marcin 'Qrczak' Kowalczyk.</dd><br />
<br />
<dt>[http://www.haskell.org/haskell-mode/ Haskell Mode for Emacs]</dt><br />
<br />
<dd>Supports font locking, declaration scanning, documentation of<br />
types, indentation and interaction with Hugs.</dd><br />
<br />
<dt>Alternative [http://www.haskell.org/libraries/hugs-mode.el Hugs Mode for Emacs] by<br />
Chris Van Humbeeck</dt><br />
<br />
<dd>Provides fontification and cooperation with Hugs. Updated for<br />
emacs 20.* by Adam P. Jenkins.</dd><br />
</dl><br />
<br />
<p>Some other, mostly obsolete, modes are available in [http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/CONTRIB/haskell-modes/ CVS].</p><br />
<br />
=== Typesetting Haskell in TeX ===<br />
<br />
<dl><br />
<dt>[http://www.jantar.org/lambdaTeX/ lambdaTeX]</dt><br />
<br />
<dd>A TeX package for typesetting literate scripts in TeX. The<br />
output looks much like the code from Chris Okasaki's book "Purely<br />
Functional Data Structures", doing syntax highlighting and<br />
converting ASCII art such as"-&gt;" or "alpha" to proper<br />
mathematical symbols. It should work with both LaTeX and plain TeX,<br />
and it does its magic without any annotations, directly on the<br />
source code (lambdaTeX uses an almost-complete Haskell lexical<br />
analyzer written entirely in plain TeX). You only have to add<br />
\input lambdaTeX at the top of your source file, and manually<br />
typeset your literate comments so they look as good as the source<br />
code.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/haskell-style.html Haskell Style for LaTeX2e]</dt><br />
<br />
<dd>by Manuel Chakravarty provides environments and macros that<br />
simplify setting Haskell programs in LaTeX.</dd><br />
<br />
<dt>[http://www.iai.uni-bonn.de/~loeh/lhs2tex/ lhs2tex]</dt><br />
<br />
<dd>A preprocessor for typesetting Haskell programs that combines<br />
some of the good features of pphs and smugweb. It generates LaTeX code from literate Haskell sources.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/wiki/Ehc/Shuffle Shuffle]</dt><br />
<br />
<dd>--- another tool helping literate programming in Haskell. It helps to maintain ''views'' in a literate programming project.<br />
<br />
For example, it is among the tools used for developing a compiler in an iterative way with manuals didactically reflecting these evolving series of versions deriving from the literal code (see [http://www.cs.uu.nl/wiki/Ehc/WebHome Essential Haskell Compiler] project).<br />
Thus, Shuffle gives us the possibility for making didactically the evolution of versions visible in the documentation, when this is needed.<br />
<br />
More generally, Shuffle gives us tangling and weaving possibilities of literate programming.<br />
I think it gives a way to think of literal program development in a more abstract way by supporting the concept of views (maybe a too far analogy: version control management -- e.g. [http://abridgegame.org/darcs/ darcs] -- helps thinking of program development in a more abstract way, too).<br />
<br />
Shuffle works well together with lhs2tex.</dd><br />
<br />
<dt>[http://www.acooke.org/jara/pancito/haskell.sty haskell.sty]</dt><br />
<br />
<dd>A Latex style file by Andrew Cooke that makes literal<br />
programming in Haskell simple.</dd><br />
</dl><br />
<br />
=== Source documentation and browsing ===<br />
<br />
<dl><br />
<dt>[[Haddock]] A Haskell Documentation Tool</dt><br />
<dd>A tool for automatically generating documentation from<br />
annotated Haskell source code. It is primarily intended for<br />
documenting libraries, but it should be useful for any kind of<br />
Haskell code. Haddock lets you write documentation annotations next<br />
to the definitions of functions and types in the source code, in a<br />
syntax that is easy on the eye when writing the source code (no<br />
heavyweight mark-up). The documentation generated by Haddock is<br />
fully hyperlinked - click on a type name in a type signature to go<br />
straight to the definition, and documentation, for that type.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/idoc/ IDoc] A No<br />
Frills Haskell Interface Documentation System</dt><br />
<br />
<dd>IDoc extracts interface documentation and declarations from<br />
Haskell modules based on standard Haskell layout rules and a small<br />
number of clues that the programmer embeds in interface comments.<br />
These clues have been designed to be visually non-imposing when<br />
displaying the source in a text editor. Interface documentation is<br />
rendered in standard markup languages (currently, only HTML is<br />
supported). IDoc has been designed to be simple to use and<br />
install.</dd><br />
<br />
<dt>[http://www.fmi.uni-passau.de/~groessli/hdoc/ HDoc]</dt><br />
<br />
<dd>HDoc generates documentation in HTML format for Haskell<br />
modules. The generated documents are cross linked and include<br />
summaries and detailed descriptions for the documented functions,<br />
data types, type classes and instance declarations.</dd><br />
<br />
<dt>[http://www.ida.liu.se/~jakax/haskell.html HaskellDoc]</dt><br />
<br />
<dd>This program generates an HTML document showing the module<br />
interfaces of a Haskell project. Convenient links are placed for<br />
easy browsing of the different modules of the project, and for<br />
quick access to the source code.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/explorer/browser.html The Haskell Module Browser]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>A browser similar to Smaltalk and Eiffel class browsers.</dd><br />
</dl><br />
<br />
=== Testing ===<br />
<br />
<dl><br />
<dt>[http://hunit.sourceforge.net HUnit]</dt><br />
<br />
<dd>A unit testing framework for Haskell, similar to JUnit for<br />
Java. With HUnit, the programmer can easily create tests, name<br />
them, group them into suites, and execute them, with the framework<br />
checking the results automatically. Test specification is concise,<br />
flexible, and convenient.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~rjmh/QuickCheck/ QuickCheck]</dt><br />
<br />
<dd>A tool for testing Haskell programs automatically. The<br />
programmer provides a specification of the program, in the form of<br />
properties which functions should satisfy, and QuickCheck then<br />
tests that the properties hold in a large number of randomly<br />
generated cases. Specifications are expressed in Haskell, using<br />
combinators defined in the QuickCheck library. QuickCheck provides<br />
combinators to define properties, observe the distribution of test<br />
data, and define test data generators.</dd><br />
<br />
<dt>[http://www.informatik.uni-freiburg.de/~wehr/haskell/ HTF - The Haskell Test Framework]</dt><br />
<br />
<dd>The HTF lets you write HUnit tests and QuickCheck properties in an<br />
easy and convenient way. Additionally, the HTF provides a facility for<br />
testing programs by running them and comparing the actual output with<br />
the expected output (so called "file-based tests").<br />
<br />
The HTF uses Template Haskell to collect all tests and properties, so<br />
you do not need to write boilerplate code for that purpose. Preprocessor<br />
macros provide you with file name and line number information for tests<br />
and properties that failed.</dd><br />
</dl><br />
<br />
=== Tracing &amp; debugging ===<br />
<br />
Tracing gives access to otherwise invisible information about a<br />
computation. Conventional debuggers allow the user to step through<br />
the program computation, stop at given points and examine variable<br />
contents. This tracing method is quite unsuitable for Haskell,<br />
because its evaluation order is complex, function arguments are<br />
usually unwieldy large unevaluated expressions and generally<br />
computation details do not match the user's high-level view of<br />
functions mapping values to values. <br />
<br />
<dl><br />
<dt>[http://www.cs.mu.oz.au/~bjpop/buddha/ Buddha]</dt><br />
<br />
<dd>Buddha is a declarative debugger for Haskell 98 programs. It presents the evaluation of a Haskell program as a series of function applications. A typical debugging session involves a series of questions and answers. The questions are posed by the debugger, and the answers are provided by the user. The implementation of Buddha is based on program transformation.</dd><br />
<br />
<dt>[http://www.ida.liu.se/~henni Freja]</dt><br />
<br />
<dd>A compiler for a subset of Haskell. Running a compiled program<br />
creates an evaluation dependency tree as trace, a structure based<br />
on the idea of declarative debugging from the logic programming<br />
community. A debugging session consists of the user answering a<br />
sequence of yes/no questions.</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/hat Hat]</dt><br />
<br />
<dd>A Haskell program is first transformed by hat-trans and then<br />
compiled with nhc98 or ghc. At runtime the program writes a trace file. <br />
There are tools<br />
for viewing the trace in various ways: Hat-stack shows a virtual stack<br />
of redexes. Hat-observe shows top-level functions in the style of<br />
Hood. Hat-trail enables exploring a computation backwards,<br />
starting from (part of) a faulty output or an error message.<br />
Hat-detect provides algorithmic debugging in the style of<br />
Freja. Hat-explore allows free navigation through a computation similar to traditional debuggers and algorithmic debugging and slicing.</dd><br />
<br />
<dt>[http://www.haskell.org/hood Hood]</dt><br />
<br />
<dd>A library that permits to observe data structures at given<br />
program points. It can basically be used like print statements in<br />
imperative languages, but the lazy evaluation order is not affected<br />
and functions can be observed as well.</dd><br />
<br />
<dt>[http://www.cs.ukc.ac.uk/people/staff/cr3/toolbox/haskell/ GHood]</dt><br />
<br />
<dd>"Graphical Hood" - a Java-based graphical observation event<br />
viewer, building on Hood.</dd><br />
</dl><br />
<br />
== Data structures ==<br />
<br />
<dl><br />
<dt>[http://www.haskell.org/ghc/docs/edison/ Edison]</dt><br />
<br />
<dd>Chris Okasaki is developing a library of efficient data<br />
structures. It provides sequences, finite maps, priority queues,<br />
and sets/bags. ([http://www.eecs.usma.edu/Personnel/okasaki/pubs.html#hw00 overview paper]).</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/Binary.html Binary/BinArray library]</dt><br />
<br />
<dd>A port of Malcolm Wallace's Binary library for NHC13, offering<br />
facilities for heap compression and binary I/O. A related library,<br />
BinArray, uses Binary to implement imperative binary arrays.</dd><br />
<br />
<dt>[http://www.cs.orst.edu/~erwig/fgl/ FGL - A Functional Graph Library]</dt><br />
<br />
<dd>The functional graph library provides a collection of graph<br />
operations.</dd><br />
<br />
<dt>[http://www.cs.vu.nl/Strafunski/ Strafunski]</dt><br />
<br />
<dd>A bundle for generic programming. It provides programming<br />
support for generic traversal as useful in the implementation of<br />
program transformations.</dd><br />
<br />
<dt>[http://www.isi.edu/~hdaume/STPP/ The Haskell STate Preprocessor]</dt><br />
<br />
<dd>This is a short preprocessor for stateful Haskell programs. It aleviates the pain of performing single<br />
array lookup/write/update functions with some syntax to support it. It also supports hash<br />
table operations based on the HashTable implementation available from the author. Finally, it supports<br />
monadic if and monadic case constructions. It is lightweight in the sense that it performs no syntactic<br />
analysis and is essentially a character transformer.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~dons/fps.html Fast Packed Strings]</dt><br />
<br />
<dd>The FPS library provides mmapped and malloc'd packed strings (byte<br />
arrays held by a ForeignPtr), along with a list interface to these<br />
strings. It lets you do extremely fast IO in Haskell; in some cases,<br />
even faster than typical C implementations, as well as conserving space.</dd><br />
<br />
</dl><br />
<br />
== Extended Haskell ==<br />
<br />
The purpose of these systems is to enhance the capabilities of Haskell<br />
in some way. These are not targeted at any specific application domains.<br />
<br />
<dl><br />
<dt>[http://www.dtek.chalmers.se/~d00nibro/harp/ HaRP]</dt><br />
<dd>A Haskell extension that extends the normal pattern matching facility with the power of regular expressions.</dd><br />
<br />
<dt>[http://www.haskell.org/arrows/ Arrows]</dt><br />
<br />
<dd>Ross Patterson has developed a preprocessor that provides a nice<br />
notation for Arrows, a generalization of monads.<br />
</dd><br />
<br />
<br />
<dt>[http://www.haskell.org/yampa/ Functional Reactive Programming]</dt><br />
<br />
<dd>Functional reactive programming integrates time flow into<br />
functional programming. This provides an elegant way to express<br />
computation in domains such as interactive animations, robotics,<br />
computer vision, user interfaces, and simulation. The Yampa system is<br />
an implementation of FRP based on arrows.<br />
</dd><br />
</dl><br />
<br />
== Interfacing with other languages and systems ==<br />
<br />
<dl><br />
<dt>[http://www.haskell.org/haxr/ HaXR - the Haskell XML-RPC library]</dt><br />
<dd>An XML-RPC client and server library. [http://www.xmlrpc.com/ XML-RPC] is "remote procedure calling using HTTP<br />
as the transport and XML as the encoding. XML-RPC is designed to be as<br />
simple as possible, while allowing complex data structures to be<br />
transmitted, processed and returned."</dd><br />
<br />
<dt>[http://www.dcs.shef.ac.uk/~simonf/HAIFA.html HAIFA]</dt><br />
<dd>HAIFA is an implementation of parts of the web-service architecture in Haskell. Notably it includes an XML serializer, a partial implementation of XML Schema and SOAP/1.1.</dd><br />
</dl><br />
<br />
=== Tools for interfacing with other languages ===<br />
<br />
The definition of a basic [http://www.cse.unsw.edu.au/~chak/haskell/ffi/ foreign function interface for Haskell (FFI)] is finished. It has been agreed on and<br />
implemented by most Haskell implementors. The following tools already<br />
produce code for this interface. The [http://www.reid-consulting-uk.ltd.uk/docs/ffi.html Guide to Haskell's Foreign Function Interface] provides a comparision of the different tools.<br />
<br />
<br />
<dl><br />
<dt>[http://haskell.org/greencard/ Green Card]</dt><br />
<br />
<dd>Green Card is a foreign function interface preprocessor for<br />
Haskell, simplifying the task of interfacing Haskell programs to<br />
external libraries (which are normally exposed via C interfaces).<br />
Green Card is currently able to generate code compatible with the<br />
[../implementations.html#ghc Glasgow Haskell Compiler],<br />
[../implementations.html#hugs Hugs] and [../implementations.html#nhc nhc].</dd><br />
<br />
<dt>[http://haskell.org/hdirect/ HaskellDirect]</dt><br />
<br />
<dd>HaskellDirect is an Interface Definition Language (IDL)<br />
compiler for Haskell, which helps interfacing Haskell code to<br />
libraries or components written in other languages (C). An IDL<br />
specification specifies the type signatures and types expected by a<br />
set of external functions. One important use of this language<br />
neutral specification of interfaces is to specify COM (Microsoft's<br />
Component Object Model) interfaces, and HaskellDirect offers<br />
special support for both using COM objects from Haskell and<br />
creating Haskell COM objects. HaskellDirect groks both the OSF DCE<br />
dialect of IDL (including the various extensions introduced by the<br />
Microsoft IDL compiler) and the OMG IIOP/CORBA dialect.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/c2hs/ C-&gt;Haskell]</dt><br />
<br />
<dd>A lightweight tool for implementing access to C libraries from<br />
Haskell.</dd><br />
<br />
<dt>[http://hsffig.sourceforge.net HSFFIG]</dt><br />
<dd>Haskell FFI Binding Modules Generator (HSFFIG) is a tool that takes a<br />
C library include file (.h) and generates Haskell Foreign Functions<br />
Interface import declarations for items (functions, structures, etc.)<br />
the header defines.</dd><br />
<br />
<dt>[http://www.haskell.org/gcjni GCJNI]</dt><br />
<br />
<dd>A Java Native Interface for Haskell. Allows Haskell to invoke<br />
Java code. Includes a tool to generate Haskell bindings for a Java<br />
library. Works for hugs and ghc under both Linux and Windows.</dd><br />
<br />
<dt>[http://sourceforge.net/projects/jvm-bridge/ Haskell/Java VM Bridge]</dt><br />
<br />
<dd>A bridge to the Java virtual machine via JNI for Haskell.</dd><br />
<br />
<dt>[http://haskell.org/haskellscript/ HaskellScript]</dt><br />
<br />
<dd>HaskellScript is the collective name for all Haskell<br />
components, both tools and libararies, that allow interaction with<br />
the COM/ActiveX framework.</dd><br />
<br />
<dt>[http://www.astercity.net/~khaliff/haskell/kdirect/index.html KDirect]</dt><br />
<br />
<dd>A tool to simplify the process of interfacing C libraries to<br />
Haskell. It is less powerful than HaskellDirect, but easier to use<br />
and more portable.</dd><br />
</dl><br />
<br />
=== Interfaces to specific systems ===<br />
<br />
<dl><br />
<dt>[http://www.cse.unsw.edu.au/~dons/hs-plugins/ hs-plugins]<br />
<dd>A library for compiling and loading plugins into a running Haskell program.</dd><br />
<dt>[http://www.volker-wysk.de/hsshellscript HsShellScript]</dt><br />
<dd>A library for using Haskell for tasks which are usually done by shell scripts, e.g. command line parsing, analysing paths, etc.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~erik/Personal/cgi.htm CGI Library]</dt><br />
<br />
<dd>CGI programs can receive input from the client's web browser,<br />
encoded in a complicated fashion, and can write output in a variety<br />
of formats (plain text, HTML, JPEG etc) which the client then sees.<br />
The decoding and encoding of the IO is often expressed in PERL or<br />
C, and makes CGI applications tedious and awkward to write.<br />
Haskell/CGI is a library for writing CGI programs in Haskell 1.3<br />
and above.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/CGI.html CGI Library]</dt><br />
<br />
<dd>An all-in-one-file version of Erik Meijer's CGI library (above)<br />
with some bugs fixed, a few extensions and ported to Haskell<br />
98.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/daVinci.html daVinci binding]</dt><br />
<br />
<dd>A binding to daVinci, an X-Windows based visualization tool for<br />
directed graphs.</dd><br />
<br />
<dt>[http://www-i2.informatik.rwth-aachen.de/~michaelw/hmpi.html hMPI]</dt><br />
<br />
<dd>hMPI is an acronym for HaskellMPI. It is a Haskell binding<br />
conforming to MPI (Message Passing Interface) standard 1.1/1.2. The<br />
programmer is in full control over the communication between the<br />
nodes of a cluster.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/smartest.html Smarty]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>The world's smartest i/o device for Haskell. An interface<br />
between Haskell and Squeak, a freely available Smalltalk language<br />
and environment.</dd><br />
<br />
<dt>[http://www.haskell.org/~petersen/haskell/popenhs/ popenhs]</dt><br />
<br />
<dd>A small library, based on runProcess in the standardised posix library.<br />
It provides lazy output from subprocesses.</dd><br />
<br />
<dt>[http://sourceforge.net/projects/haskell-corba/ haskell-corba]</dt><br />
<br />
<dd>This package allows Haskell programmers to write CORBA clients<br />
and servers using the [http://www.mico.org MICO open-source CORBA implementation]. It defines a Haskell language<br />
mapping for CORBA, and includes an IDL compiler which generates<br />
Haskell stub and skeleton modules from IDL files.</dd><br />
</dl><br />
<br />
=== Interfacing with databases ===<br />
<br />
<dl><br />
<br />
<dt>[http://sourceforge.net/forum/forum.php?forum_id=350240 HSQL]</dt><br />
<dd>HSQL is a simple library which provides an interface to multiple databases.<br />
MySQL, PostgreSQL, ODBC, SQLite and Oracle are currently supported.<br />
It is part of [http://htoolkit.sourceforge.net/ HToolkit].</dd><br />
<br />
<dt>[http://cvs.sf.net/viewcvs.py/haskell-libs/libs/takusen/ Takusen]</dt><br />
<dd>A library to interface to the Oracle DBMS. Part of the [http://sf.net/projects/haskell-libs Haskell-Libs project].</dd><br />
<br />
<dt>[http://haskelldb.sourceforge.net/ HaskellDB]</dt><br />
<br />
<dd>An updated version of [http://www.haskell.org/haskellDB Daan Leijen's HaskellDB] that works with current Haskell implementations and is relatively platform-independent.<br />
</dd><br />
<br />
<dd><br />
HaskellDB is a combinator library for expressing queries and<br />
other operations on relational databases in a type safe and<br />
declarative way. All the queries and operations are completely<br />
expressed within Haskell, no embedded (SQL) commands are needed.<br />
This close integration makes it possible to do arbitrary<br />
computations on the database (like computing the transitive<br />
closure).</dd><br />
<br />
<dt>[http://members.tripod.com/~sproot/hasql.htm HaSQL]</dt><br />
<br />
<dd>HaSQL is a Haskell to ODBC interface. HaSQL allows Haskell<br />
program to run SQL queries against an ODBC compliant database.<br />
Queries with parameters are supported. Data is retrieved from the<br />
database as a lazy list.</dd><br />
<br />
<dt>[http://www.astercity.net/~khaliff/haskell/dbi/dbi.tgz libpq binding]</dt><br />
<br />
<dd>A Haskell binding to libpq, a client-side PostgreSQL<br />
programming library, together with a simple DBI for Haskell. It<br />
enables the programmer to write database-independent code.</dd><br />
<br />
</dl><br />
<br />
== Graphical User Interface and graphics libraries ==<br />
<br />
There exists a large number of gui and graphics libraries for<br />
Haskell. Unfortunately there is no standard one and all are more or<br />
less incomplete. The following list gives an overview. In<br />
general, low-level veneers are going well, but they are low level.<br />
High-level abstractions are pretty experimental. There is a need<br />
for a supported medium-level GUI library.<br />
<br />
{|<br />
!High-level:<br />
|[http://haskell.org/FranTk FranTk]<br />
|[http://www.cs.chalmers.se/ComputingScience/Research/Functional/Fudgets/ Fudgets]<br />
|[http://haskell.org/fruit/ Fruit] and [http://zoo.cs.yale.edu/classes/cs490/03-04b/bartholomew.robinson/ wxFruit]<br />
|([http://www.dcs.gla.ac.uk/fp/software/haggis/ Haggis])<br />
|-<br />
!Medium-level:<br />
|[http://wxhaskell.sourceforge.net wxHaskell]<br />
|[http://haskell.org/gtk2hs/ Gtk2HS]<br />
|[http://haskell.org/graphics/ HGL] (graphics only)<br />
|[http://haskell.org/ObjectIO Object I/O]<br />
|-<br />
!Low-level veneers:<br />
|[http://haskell.org/HOpenGL/ HOpenGL] (graphics only)<br />
|[http://www.dcs.gla.ac.uk/~meurig/TclHaskell/ TclHaskell]<br />
|Win32<br />
|X11<br />
|}<br />
<br />
=== Graphical User Interface Libraries ===<br />
<br />
<dl><br />
<dt>[http://wxhaskell.sourceforge.net wxHaskell]</dt><br />
<dd>[[wxHaskell]] is a portable and native GUI library built on top of wxWindows - a comprehensive C++ library that is portable across all major GUI<br />
platforms; including GTK, Windows, X11, and MacOS X. wxWindows is a mature library (in development since 1992)<br />
that supports a wide range of widgets with the native look-and-feel, and it has a very active community.</dd> <br />
<br />
<dt>[http://haskell.org/gtk2hs/ Gtk2Hs]</dt><br />
<dd>Gtk2Hs is a GUI library for Haskell based on [http://www.gtk.org Gtk+].<br />
Gtk+ is an extensive and mature multi-platform toolkit for creating graphical<br />
user interfaces. Gtk2Hs is actively developed, supporting the latest version<br />
of the Gtk+ 2.x series. It provides automatic memory management, Unicode<br />
support and also bindings for various Gnome modules.<br />
It runs on Windows, Linux, MacOS X, FreeBSD and Solaris.</dt><br />
<br />
<dt>[http://htoolkit.sourceforge.net/ HToolkit]</dt><br />
<dd>HToolkit is a portable Haskell library for writing graphical user<br />
interfaces (GUI's). The library is built upon a low-level interface that will<br />
be implemented for each different target platform. The low-level library is called Port and is currently implemented for GTK and Windows. The middle-level<br />
library is named GIO (the Graphical IO library) and is built upon the low-level Port library.</dd><br />
<br />
<dt>[http://www.informatik.uni-bremen.de/htk HTk]</dt><br />
<dd>Htk is a typed, portable encapsulation of Tcl/Tk into Haskell.<br />
Its distinctive features are the use of Haskell types and type<br />
classes for structuring the interface, an abstract notion of event<br />
for describing user interaction, and portability across Windows,<br />
Unix and Linux.</dd><br />
<br />
<dt>[http://www.dcs.gla.ac.uk/~meurig/TclHaskell/ TclHaskell]</dt><br />
<dd>TclHaskell is a library of functions for writing platform<br />
independent, graphical user interfaces in Haskell. The library<br />
provides a convenient, abstract and high-level way to write<br />
window-oriented applications. It also provides a more low level<br />
interface to write primitive Tcl code where helpful.<br><br />
For Unix and Windows (and Macintosh?).</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/ComputingScience/Research/Functional/Fudgets/ Fudgets]</dt><br />
<dd>Fudgets is primarily a Graphical User Interface Toolkit for the<br />
functional programming language Haskell and the X Windows system.<br />
Fudgets also makes it easy to create client/server applications<br />
that communicate via the Internet.<br />
<br />
<ul><br />
<li>[http://www.cs.chalmers.se/ComputingScience/Research/Functional/Fudgets/springschool95-intro.html Programming with Fudgets]: A short presentation of the Fudget Library and<br />
the ideas underlying it.</li><br />
</ul><br />
<br />
For Unix, not Windows.</dd><br />
<br />
<dt>[http://www.haskell.org/fruit/ Fruit]</dt><br />
<dd>Another high-level approach to GUI's in Haskell. It is based on the concepts of Functional Reactive Programming and arrows.<br />
<br />
There is also another implementation of this approach, called [http://zoo.cs.yale.edu/classes/cs490/03-04b/bartholomew.robinson/ wxFruit]. It is implemented on top of wxHaskell.</dd><br />
<br />
<dt>[http://haskell.org/FranTk FranTk]</dt><br />
<dd>is a library for building GUIs in Haskell. FranTk uses<br />
behaviours and events, concepts from Conal Elliot's Functional<br />
Reactive Animation. FranTk provides good support for developing<br />
complex dynamic systems, and is built on top of Tcl-Tk. This makes<br />
it platform independent. FranTk was developed by [http://www.dcs.gla.ac.uk/~meurig Meurig Sage].<br><br />
For Unix and Windows.</dd><br />
<br />
<dt>[http://haskell.org/ObjectIO Object I/O for Haskell]</dt><br />
<dd>A port of Clean Object I/O library for Haskell</dd><br />
<br />
<dt>[http://www.informatik.uni-freiburg.de/~wehr/haskell/ hscurses]</dt><br />
<dd>A Haskell binding to the NCurses library, a library of functions that manage an application's display on character-cell terminals. hscurses also provides some basic widgets implemented on top of the ncurses binding, such as a text input widget and a table widget.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~dons/code/hmp3/Curses.hsc Curses.hsc]<br />
<dd>A minimal binding to curses (as well as ncurses). Smaller and less featured than hscurses, it also provides fast packed string support.</dd><br />
</dl><br />
<br />
==== Unsupported GUI-libraries ====<br />
<br />
The following libraries seem to be no longer maintained. However,<br />
someone might pick up one of them or at least profit from some<br />
design ideas. <br />
<br />
<dl><br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/gtk/ Gtk+HS] a Haskell binding for GTK+</dt><br />
<br />
<dd>This library provides a transcription of the original GTK+ API<br />
into Haskell. GTK+ is a modern, portable GUI library and forms the<br />
basis of the Gnome desktop project. The binding, while not<br />
complete, covers most of GTK+'s core functionality and is ready for<br />
use in applications that require a GUI of medium complexity.<br><br />
Developed under Unix, but should also be usable with the Windows port of GTK+.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/gtk/#iHaskell iHaskell]</dt><br />
<dd>A functional wrapper on top of GTK+HS that provides convenience functions<br />
for frequently used programming patterns and eliminates the need for explicit<br />
mutable variables.</dd><br />
<br />
<dt>[http://www.dcs.gla.ac.uk/fp/software/haggis/ Haggis]</dt><br />
<br />
<dd>Haggis is a graphical user interface framework for the<br />
functional language Haskell, running under the X Window system. It<br />
is being developed using the Glasgow Haskell Compiler with its<br />
concurrent extensions to achieve more comfortable interaction with<br />
the outside world.</dd><br />
<br />
<dt>Haskell-Tk</dt><br />
<dd>is a concurrent, strongly typed and higher order encapsulation<br />
of Tk that supports the definition of user dialogues. Einar<br />
Karlsson developed it for his [http://www.informatik.uni-bremen.de/~ewk/WB.html UniForm WorkBench].</dd><br />
<br />
<dt>Pidgets</dt><br />
<dd>developed by [http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/s/Scholz:Enno.html Enno Scholz] unifies pictures and widgets in a constraint-based framework for<br />
concurrent functional GUI programming.</dd><br />
<br />
<dt>[http://www.reid-consulting-uk.ltd.uk/alastair/publications/gfpw93/ Budgets]</dt><br />
<dd>A library of Fudget-like combinators based on the Openlook widget library<br />
was developed by [http://www.reid-consulting-uk.ltd.uk/alastair/ Alastair Reid] and Satnam Singh.<br />
The code has suffered tremendous bit-rot (does anyone have a copy<br />
of ghc-0.16?) but all the reusable ideas are described in the [http://www.reid-consulting-uk.ltd.uk/alastair/publications/gfpw93/ paper].</dd><br />
<br />
<dt>[http://drcjt.freeyellow.com/EW.html Embracing Windows]</dt><br />
<dd>is a framework for developing graphical user interfaces. It<br />
runs under Windows 95 using a modified version of Hugs 1.3.</dd><br />
<br />
<dt>Gadgets</dt><br />
<dd>Lazy functional components for graphical user interfaces,<br />
developed by Rob Noble under the supervision of [http://www.cs.york.ac.uk/~colin/ Colin Runciman] (LNCS 982, pages 321-340).</dd><br />
</dl><br />
<br />
=== Graphics ===<br />
<br />
<dl><br />
<dt>[http://haskell.org/graphics/ The Hugs Graphics Library]</dt><br />
<dd>The Hugs Graphics Library supports 2-dimensional graphics<br />
operations, timers, mouse and keyboard actions and multiple<br />
windows. It runs on Hugs under both Win32 and X11. An earlier<br />
version was used for early prototypes of Fran.</dd><br />
<br />
<dt>[http://haskell.org/haven/ Haven]</dt><br />
<dd>Scalable Vector Graphics for Haskell. Portable,<br />
device-independent, resolution-independent library, including<br />
support for affine transformations, Bezier curves, fine-grained<br />
control of pen attributes, bounds and intersection tests,<br />
constructive area geometry, anti-aliased rendering, outline fonts,<br />
etc.</dd><br />
<br />
<dt>[http://afavant.elte.hu/~wferi/funcmp/ Functional Metapost]</dt><br />
<dd>Functional Metapost is a Haskell binding for MetaPost, the powerful but<br />
cumbersome graphics language.</dd><br />
<br />
<dt>[http://www.conal.net/Fran/ Functional Reactive Animation]</dt><br />
<dd>FRAN is a Haskell library (or "embedded language") for<br />
interactive animations with 2D and 3D graphics and sound. It runs<br />
on Hugs under Windows 95 and Windows NT, using Win32 graphics<br />
(GDI).</dd><br />
<br />
<dt>[http://www.conal.net/pan Pan]</dt><br />
<dd>An embedded language and highly optimizing compiler for image<br />
synthesis and transformation, based on the simple idea of images as<br />
functions over infinite, continuous 2D space. The resulting<br />
binaries can be used as PhotoShop plugins, embedded in web pages or<br />
PowerPoint, or used in an interactive standalone viewer. The<br />
compiler contains no domain-specific knowledge, so it's very<br />
extensible. See the [http://www.conal.net/pan/gallery gallery] for<br />
visual examples. Currently Windows-only, but ports are<br />
encouraged.</dd><br />
<br />
<dt>[http://haskell.org/edsl/pansharp.html Pan#]</dt><br />
<dd>Pan# is a slightly re-engineered version of Pan. It uses the same<br />
compiler but used the Microsoft .NET framework instead of visual<br />
studio, making it easier to install and use. It also has a number of<br />
new features added. While Pan is embedded in Haskell, Pan# has its own<br />
Haskell-like language built in so there is no need to use other Haskell<br />
compilers.<br />
Currently Windows-only.<br />
</dd><br />
<br />
<dt>[http://www.acooke.org/jara/pancito/index.html Pancito]</dt><br />
<dd>Pancito is a Haskell module for manipulating functional images<br />
and then saving them to disk. It was inspired by Pan.</dd><br />
<br />
<dt>[http://haskell.org/HOpenGL/ HOpenGL]</dt><br />
<dd>HOpenGL is a Haskell binding for the OpenGL graphics API (GL<br />
1.2.1 / GLU 1.3) and the portable OpenGL utility toolkit GLUT.</dd><br />
</dl><br />
<br />
=== Graphics File Formats ===<br />
<br />
<dl><br />
<dt>[http://web.archive.org/web/20010628003610/http://www.numeric-quest.com/haskell/Gif/ Gif Writer]<em>(since 10/06/2003: via Internet Archive; this library is no longer available!)</em></dt><br />
<dd>A simple tool - capable of producing GIF based plots from<br />
within Haskell programs. Such plots can be then incorporated into<br />
HTML reports, to literate Haskell programs, or to combination of<br />
both.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/people/jeroen/ Functional Specification of the JPEG algorithm, and an Implementation for Free]</dt><br />
<br />
<dt>[http://www.students.cs.uu.nl/people/dgruijs/jpg/jpg.html JPEG encoding]<br />
Written in Gofer.</dt><br />
</dl><br />
<br />
== Web, HTML, XML ==<br />
<br />
<dl><br />
<dt>[http://www.haskell.org/http/ HTTP and Browser Modules]</dt><br />
<br />
<dd>A significantly RFC compliant HTTP/1.1 implementation. This is an updated version of [http://homepages.paradise.net.nz/warrickg/haskell/http/ Warrick Gray's original version].</dd><br />
<br />
<dt>[http://www.informatik.uni-freiburg.de/~thiemann/haskell/WASH/ WASH]</dt><br />
<br />
<dd>A family of combinator libraries for programming Web<br />
applications. WASH/HTML is for generating dynamic HTML documents,<br />
combining flexibility and safety. WASH/CGI is for server-side Web<br />
scripting with sessions, compositional forms, and graphics.</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/HaXml/ HaXml: utilities for using XML with Haskell]</dt><br />
<br />
<dd>Includes an XML parser, an HTML parser, a pretty-printer, a<br />
combinator library for generic XML transformations, and two<br />
Haskell&gt;-&lt;XML converters using type-based translation.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~andy/html/intro.htm The Haskell Html Library] by Andy Gill</dt><br />
<br />
<dd>This library is a collection of combinators, allowing your<br />
Haskell programs to generate HTML.</dd><br />
<br />
<dt>[http://www.fh-wedel.de/~si/HXmlToolbox/ Haskell XML Toolbox]</dt><br />
<br />
<dd>The Haskell XML Toolbox bases on the ideas of HaXml and HXML, but<br />
introduces a more general approach for processing XML with Haskell. The<br />
Haskell XML Toolbox uses a generic data model for representing XML<br />
documents, including the DTD subset and the document subset, in<br />
Haskell.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~erik/Personal/cgi.htm CGI Library]</dt><br />
<br />
<dd>CGI programs can receive input from the client's web browser,<br />
encoded in a complicated fashion, and can write output in a variety<br />
of formats (plain text, HTML, JPEG etc) which the client then sees.<br />
The decoding and encoding of the IO is often expressed in PERL or<br />
C, and makes CGI applications tedious and awkward to write.<br />
Haskell/CGI is a library for writing CGI programs in Haskell 1.3<br />
and above.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/CGI.html CGI Library]</dt><br />
<br />
<dd>An all-in-one-file version of Erik Meijer's CGI library (above)<br />
with some bugs fixed, a few extensions and ported to Haskell<br />
98.</dd><br />
<br />
<dt>[http://home.tiscali.be/stevevh/ Generative Implementation Strategies for Data-Centric Web Applications]<br />
<dd>Generic presentation layer abstractions of administrative web applications<br />
are the central theme of this thesis. The domain-engineering approach<br />
results in a framework to support user interfaces generated from high-level<br />
descriptions. A domain-specific language describes user interfaces. The<br />
[hoyweghenSoft.zip Haskell-based generator] transforms these descriptions to user interfaces<br />
implemented with JavaScript and XHTML.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~d00nibro/hsp Haskell Server Pages]</dt><br />
<dd>Using Haskell as a server-side scripting language, extended to allow embedded XML/XHTML fragments in Haskell code.</dd> <br />
<br />
</dl><br />
<br />
<br />
== Pretty-printer libraries ==<br />
<br />
<dl><br />
<dt>[http://research.microsoft.com/~simonpj/downloads/pretty-printer/pretty.html Pretty printer library]</dt><br />
<br />
<dd>Simon Peyton Jones made an "industrial strength" pretty<br />
printing library in Haskell, based on John Hughes's paper "The<br />
Design of a Pretty-printing Library" (in Advanced Functional<br />
Programming, Johan Jeuring and Erik Meijer (eds), LNCS 925). <a<br />
href="http://www.md.chalmers.se/~rjmh/Software/NewPP.hs">Original<br />
version by John Hughes</a>.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/groups/ST/Software/PP/ Pretty-printing combinators]</dt><br />
<br />
<dd>The combinators in the library are optimal in the sense that<br />
they produce the layout with the smallest height possible. They<br />
also allow the programmer to specify several different<br />
layouts.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/~daan/pprint.html PPrint]</dt><br />
<br />
<dd>PPrint is an implementation of the pretty printing combinators described by Philip Wadler.<br />
The PPrint library adds new primitives to describe commonly occuring layouts and works well in<br />
practice.</dd> <br />
</dl><br />
<br />
== Compiler and compilation tools ==<br />
<br />
<dl><br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/ctk/ Manuel Chakravarty's Compiler Toolkit]</dt><br />
<br />
<dd>There is a significant set of functionality that is required in<br />
each compiler like symbol table management, input-output<br />
operations, error management, and so on, which are good candidates<br />
for code reuse. The Compiler Toolkit is an attempt to provide an<br />
open collection of modules for these recurring tasks in<br />
Haskell.</dd><br />
<br />
<dt>[http://www.cs.princeton.edu/zephyr/ASDL/ The Zephyr Abstract Syntax Description Lanuguage (ASDL)]</dt><br />
<br />
<dd>ASDL is a language designed to describe the tree-like data<br />
structures in compilers. Its main goal is to provide a method for<br />
compiler components written in different languages to interoperate.<br />
ASDL makes it easier for applications written in a variety of<br />
programming languages to communicate complex recursive data<br />
structures. asdlGen is a tool that takes ASDL descriptions and<br />
produces implementations of those descriptions in C, C++, Java,<br />
Standard ML, and Haskell.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~mpj/thih/ Typing Haskell in Haskell]</dt><br />
<br />
<dd>A Haskell program that implements a Haskell typechecker, thus<br />
providing a mathematically rigorous specification in a notation<br />
that is familiar to Haskell users.</dd><br />
<br />
<dt>[http://www.cs.mu.oz.au/~bjpop/hatchet.html Hatchet]</dt><br />
<br />
<dd>Hatchet is a type checking and inference tool for Haskell 98,<br />
written in (almost) Haskell 98.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~aarne/BNF/ The BNF Converter]</dt><br />
<br />
<dd>A High-Level Tool for Implementing Well-Behaved Programming<br />
Languages.</dd><br />
<br />
<dt>[http://www.cwi.nl/projects/MetaEnv/haterm/ ATerm Library]</dt><br />
<br />
<dd>ATerms provide a generic format for representation and exchange<br />
of (annotated) terms. ATerms were developed in the context of the<br />
ASF+SDF Meta-Environment. They are also used by the rewriting<br />
language Stratego, by the transformation tool bundle XT, by the<br />
visitor generator JJForester, and by numerous other tools developed<br />
at CWI, Universiteit Utrecht, and elsewhere.</dd><br />
<br />
<dt>Attribute Grammar</dt><br />
<br />
<dd>How can attribute grammars help at the separation of concerns, at things related to the goals of aspect oriented programming? How do they relate to other concepts like monads and arrows?<br />
Why are they important for the functional programmer? See Wouter Swierstra's [http://www.haskell.org/tmrwiki/WhyAttributeGrammarsMatter WhyAttributeGrammarsMatter].<br />
<br />
Utrecht University's [http://www.cs.uu.nl/wiki/HUT/AttributeGrammarSystem Attribute Grammar System] tools include also an attribute grammar compiler, UUAGC. The concept of attribute grammar was used in their [http://www.cs.uu.nl/wiki/Ehc/WebHome Essential Haskell Compiler] project, which gives us not only a working programming language, but also a good didactical material about using attribute grammars, e.g. in writing compilers.</dd><br />
<br />
</dl><br />
<br />
=== Scanner and parser generators ===<br />
<br />
<dl><br />
<br />
<dt>[http://www.haskell.org/happy/ Happy]</dt><br />
<br />
<dd>[[Happy]] is a parser generator system for Haskell, similar to the<br />
tool `yacc' for C. Like `yacc', it takes a file containing an<br />
annotated BNF specification of a grammar and produces a Haskell<br />
module containing a parser for the grammar.</dd><br />
<br />
<dt>[http://www.informatik.uni-bonn.de/~ralf/frown/ Frown]</dt><br />
<br />
<dd>Frown is an LALR(k) parser generator for Haskell 98 written in Haskell 98.</dd><br />
<br />
<dt>[http://www.ki.informatik.uni-frankfurt.de/~klose/lucky.html Lucky]</dt><br />
<br />
<dd>A parser generator for Haskell using monadic parser<br />
combinators. It was developed to be compatible with Happy.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/wiki/Center/UtrechtParserCombinators Utrecht Parser Combinator Library]</dt><br />
<br />
<dd>The combinators in this library analyse the grammar on the fly and build parsers that are quite efficient. An interesting aspect is that parsing results become available on the fly without hanging on to the input. The parsers will give extensive error reports of erroneous situations, and wil proceed with parsing. </dd><br />
<br />
<dt>[http://www.cs.ruu.nl/~daan/parsec.html Parsec]</dt><br />
<br />
<dd>A simple, well documented monadic parser combinator library for<br />
fast parsers with good error messages.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/hsparser.html HParser]</dt><br />
<br />
<dd>A parser for Haskell written purely in Haskell (using the Happy<br />
parser generator).</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/ctk/ CTKlight]</dt><br />
<br />
<dd>Standalone distribution of the self-optimising lexer (i.e. regex) and parser<br />
combinators of the Compiler Toolkit (CTK).</dd><br />
<br />
<dt>[http://www.haskell.org/alex/ Alex: A Lexical Analyser Generator]</dt><br />
<br />
<dd>[[Alex]] 2.0 is a Lex-like package for generating Haskell<br />
scanners.</dd><br />
<br />
<dt>[http://www.nondot.org/sabre/Projects/HaskellLexer/ The Haskell Dynamic Lexer Engine]</dt><br />
<br />
<dd>This system is completely dynamic: the lexer may be modified at<br />
runtime, and string buffers may be lexed by different lexers at<br />
different times.</dd><br />
</dl><br />
<br />
== Music ==<br />
<br />
<dl><br />
<dt>[http://haskell.org/haskore/ The Haskore Computer Music System]</dt><br />
<br />
<dd>Haskore is a collection of Haskell modules designed for<br />
expressing musical structures in the high-level, declarative style<br />
of functional programming. Haskore is a means for describing music<br />
- in particular Western Music - rather than sound. It is not a<br />
vehicle for synthesizing sound produced by musical instruments, for<br />
example, although it does capture the way certain (real or<br />
imagined) instruments permit control of dynamics and articulation.<br />
Haskore compositions can be translated into various executable<br />
formats like MIDI and printed in traditional notation.</dd><br />
<br />
<dt>[http://meltin.net/hacks/haskell/ HasChorus]</dt><br />
<br />
<dd>A set of Haskell modules written on top of Haskore to make it<br />
easier to sequence simple, repetitive music.</dd><br />
</dl><br />
<br />
== Numerical algorithms and mathematics ==<br />
<br />
<dl><br />
<dt>[http://www.dinkla.net/fp/cglib.html Geometric Algorithms]</dt><br />
<br />
<dd>A small Haskell library, that contains algorithms for<br />
two-dimensional convex hulls, triangulations of polygons,<br />
Voronoi-diagrams and Delaunay-triangulations, the QEDS data<br />
structure, kd-trees and range-trees.</dd><br />
<br />
<dt>[http://haskelldsp.sourceforge.net/ Digital Signal Processing]</dt><br />
<dd>Modules for matrix manpulation, digital signal processing, spectral<br />
stimation, and frequency estimation.</dd><br />
<br />
<dt>[http://www.info.unicaen.fr/~karczma/arpap/ Papers by Jerzy Karczmarczuk]</dt><br />
<br />
<dd>Some interesting uses of Haskell in mathematics, including<br />
functional differentiation, power series, continued fractions.</dd><br />
<br />
<dt>[http://haskell.org/docon/ DoCon] - Algebraic Domain Constructor</dt><br />
<br />
<dd>A small Computer Algebra System</dd><br />
<br />
<dt>[http://www.robtougher.com/HaskellMath/ HaskellMath]</dt><br />
<br />
<dd><br />
The HaskellMath library is a sandbox for me to experiment with mathematics algorithms. So far I've implemented a few quantitative finance models (Black Scholes, Binomial Trees, etc) and basic linear algebra functions. Next I might work on either computer algebra or linear programming. All comments welcome!<br />
</dd><br />
<br />
<dt>[http://www.isi.edu/~hdaume/HBlas/ Wrapper to CLAPACK]</dt><br />
<br />
<dt>[http://dis.um.es/~alberto/GSLHaskell GSLHaskell]</dt><br />
<dd> High level functional interface to standard linear algebra computations and other numerical algorithms based on the GNU Scientific Library.<br />
</dd><br />
<br />
<dt>[http://cvs.haskell.org/darcs/numericprelude/ Numeric Prelude]</dt><br />
<br />
<dd><br />
Experimental revised framework for numeric type classes.<br />
</dd><br />
<br />
<dt>[http://wwwhomes.doc.ic.ac.uk/~ae/exact-computation/ Exact Real Arithmetic]</dt><br />
<dd><br />
A portal-like treatment of the topic. There are functional programming materials too, even with downloadable Haskell source.<br />
</dd><br />
<br />
<dt>[http://eecs.oregonstate.edu/~erwig/pfp/ Probabilistic Functional Programming]</dt><br />
<dd>The PFP library is a collection of modules for Haskell that facilitates probabilistic functional programming, that is, programming with stochastic values. The probabilistic functional programming approach is based on a data type for representing distributions. A distribution represent the outcome of a probabilistic event as a collection of all possible values, tagged with their likelihood. A nice aspect of this system is that simulations can be specified independently from their method of execution. That is, we can either fully simulate or randomize any simulation without altering the code which defines it.</dd><br />
<br />
<br />
<br />
<dt>[http://cvs.haskell.org/darcs/numeric-quest/ mirror of the following numeric modules of Jan Skibinski]</dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/fractions.html Numerics with fractions]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Roots.html Roots of polynomials]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>It implements the well known Laguerre's method for finding<br />
complex roots of polynomials.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Orthogonals.html Indexless linear algebra algorithms]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>Orthogonalization, solution of linear equations, eigenvalues<br />
and eigenvectors.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ State vector evolution]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ Short study of fuzzy oscillator]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Tensor.html N-dimensional tensors]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[[Sinc function]]<br />
<br />
</dl><br />
<br />
== Hardware verification ==<br />
<br />
<dl><br />
<dt>[http://www.cse.ogi.edu/PacSoft/projects/Hawk/ Hawk, Specifying and Prototyping Microprocessors]</dt><br />
<br />
<dd>The goal of the Hawk project is to develop a language for<br />
expressing highly abstracted specifications of modern<br />
microprocessor designs, to provide design teams with the ability to<br />
dynamically explore a wide range of design choices. The Hawk<br />
language is Haskell plus the Hawk library.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~koen/Lava/ Lava]</dt><br />
<br />
<dd>Lava is a hardware description language based upon<br />
Haskell.</dd><br />
</dl><br />
<br />
== Robots ==<br />
<br />
<dl><br />
<dt>[http://haskell.org/yampa/ Haskell for Vision and Robotics]</dt><br />
<br />
<dd>Frob is an Embedded Domain Specific Language for controlling<br />
robots. It is built using the principals of Functional Reactive<br />
Programming, as developed by Conal Elliott for the Fran animation<br />
system. The current incarnation of Frob is part of the Yampa FRP system.<br><br />
</dl><br />
<br />
== Cognitive Science ==<br />
<br />
(Tools, algorithms, frameworks, paradigms concerning Genetic Programming, Artificial Intelligence, Neural Networks, Fuzzy Logic, Natural Language Processing etc.)<br />
<br />
=== Genetic programming ===<br />
<br />
Dr. Tina Yu's [http://www.cs.mun.ca/~tinayu/index_files/Page426.htm publications], many of them on fruitful applications of Functional Programming in Genetic Programming.<br />
<br />
Deryck F. Brown, A. Beatriz Garmendia-Doval and John A. W. McCall, [http://www.comp.rgu.ac.uk/staff/jm/myPublications.html A Genetic Algorithm Framework Using Haskell]<br />
<br />
=== Natural language processing ===<br />
<br />
Materials with downloadable Haskell sources on linguistic theories concerning Haskell, combinatory logic, etc. More materials and theroetical backgorund can be seen on the [[Linguistics]] page.<br />
<br />
<dl><br />
<br />
<dt>Portals and other huge resorces</dt><br />
<br />
<dd><br />
Peter Ljunglöf's many [http://www.cs.chalmers.se/~peb/pubs.html pubications] on natural language processing, parsing, formal semantics. Many of them uses Haskell, and there are [http://www.cs.chalmers.se/~peb/software.html downloadable] Haskell sources too.<br />
</dd><br />
<br />
<dt>Applicative Universal Grammars</dt><br />
<br />
<dd><br />
* A Haskell application for natural language parsing, based on ''Applicative Universal Grammar'' (AUG) is described in Mark P. Jones', Paul Hudak's and Sebastian Shaumyan's [http://citeseer.ist.psu.edu/jones95using.html Using Types to Parse Natural Language]. The Haskell source code given by the article is full, it can be run by Gofer, and after a few modification, by GHC too (''transpose'' must be explictly imported from standard library module ''Data.List'', and class ''Text'' renamed to ''Show'').<br />
* A more detailed description of the topic of this previous article described in Sebastian Shaumyan and Paul Hudak's [http://citeseer.ist.psu.edu/510871.html Linguistic, Philosophical, and Pragmatic Aspects of Type-Directed Natural Language Parsing]<br />
* Bernard Paul Sypniewski's [http://elvis.rowan.edu/~bps/ling/introAUG.pdf An Introduction to Applicative Universal Grammar] (this link seems now broken, I hope only temporarily). As an article describing what AUG is, see also Shaumyan's [http://citeseer.ist.psu.edu/shaumyan98two.html Two Paradigms of Linguistics: The Semiotic versus Non-Semiotic Paradigm].<br />
</dd><br />
<br />
<dt>Parsing natural languages</dt><br />
<br />
<dd><br />
Gordon J. Pace: [http://www.cs.um.edu.mt/~csaw/CSAW04/Proceedings/08.pdf Monadic Compositional Parsing with Context Using Maltese as a Case Study], see its [http://www.cs.um.edu.mt/~csaw/CSAW04/ context] too<br />
</dd><br />
<br />
</dl><br />
<br />
== Various ==<br />
<br />
<dl><br />
<dt>[http://www2-data.informatik.unibw-muenchen.de/EdComb/ EdComb]<br />
<dd>Editor combinators allow to assemble structure editors compositionally instead of generating them from descriptions, just<br />
as parsing combinators allow to assemble parsers compositionally instead of employing parser generators to generate<br />
parsers from grammar descriptions.<br />
<dt>[http://ls5-www.cs.uni-dortmund.de/~peter/Expander2/Expander2.html Expander2]</dt><br />
<dd>Expander2 is a flexible multi-purpose workbench for rewriting, verification,<br />
constraint solving, flow graph analysis and related procedures that<br />
build up proofs or computation sequences. Moreover, tailor-made <br />
interpreters display terms as 2D structures ranging from trees and<br />
rooted graphs to tables, fractals and <br />
other turtle-system-generated pictures.</dd><br />
<br />
<dt>[http://www.cs.vu.nl/Strafunski/ Strafunski]</dt><br />
<br />
<dd>Strafunski is a Haskell bundle that provides support for<br />
generic programming in Haskell, based on the concept of a<br />
functional strategy. It consists of a combinator library<br />
(StrategyLib) and a precompiler (DrIFT-Strafunski).</dd><br />
<br />
<dt>[http://www.cin.ufpe.br/~haskell/fungen FunGEn - a game engine for Haskell]</dt><br />
<br />
<dd>FunGEn (Functional Game Engine) is a 2D platform-independent<br />
game engine implemented in and for Haskell, using HOpenGL. It is<br />
intended to help game programmers in the game development process,<br />
in a faster and automated way.</dd><br />
<br />
<dt>[http://www.haskell.org/crypto The Haskell Cryptographic Library]</dt><br />
<br />
<dd>A library of cryptographic functions collected together in one package.</dd><br />
<br />
<dt>[http://www.cif.rochester.edu/~sankeld/RSA/ RSA]</dt><br />
<br />
<dd>A number theory library, RSA library, and RSA programs.</dd><br />
<br />
<dt>[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/ Implementations of MD5, SHA1 and DES]</dt><br />
<br />
<dt>[http://www.dcs.gla.ac.uk/~meurig/regexp/ Regular expression library]</dt><br />
<br />
<dd>Inspired by the Perl regular expression library, written purely<br />
in Haskell. Also part of the GHC distribution.</dd><br />
<br />
<dt>[http://www.cl.cam.ac.uk/users/kw217/libs/ Partial v0.1]</dt><br />
<br />
<dd>The Partial library provides a partial order class. It also<br />
provides routines for generating a Hasse diagram from a set and a<br />
partial order. Renderers are provided for the abstract Hasse<br />
diagram representation into LaTeX (via Xy-pic) and into dot, the<br />
format for AT&amp;T's Graphviz tools. Since no horizontal sorting<br />
is done, the Xy-pic output is rather poor at present; dot does a<br />
much better job with its layout optimisation algorithm.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/funpdf/ fun-&gt;pdf]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>An implementation of a PDF dynamic writer in Haskell.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/GetOpt.html GetOpt]</dt><br />
<br />
<dd>A module for GNU-/POSIX-like option handling of commandline<br />
arguments</dd><br />
</dl><br />
<br />
== Collections of libraries ==<br />
<br />
* [http://www.cs.york.ac.uk/fp/software.html Software available from the York FP group]<br />
* [http://repetae.net/john/computer/haskell/ John Meacham's Haskell tools and libraries]<br />
* [http://www.cit.gu.edu.au/~arock/haskell/index.html Andrew Rock's library of useful modules]<br />
* [http://www.informatik.uni-bonn.de/~ralf/software.html Libraries by Ralf Hinze] for data structures, sorting, searching, parsing, pretty printing, numerical algorithms, monads, etc.<br />
* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/index.html Collection of Haskell modules] ''(since 10/06/2003: via Internet Archive)'' by Jan Skibinski, Numeric Quest Inc.<br />
* [http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/ Sven's Haskell Libaries] for interfacing to DaVinci, HTML/Cgi, OpenGL; a module for option handling, a Haskell parser, a binary library.<br />
* [http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/ Ian Lynagh's Haskell libraries]<br />
* [http://www.reid-consulting-uk.ltd.uk/projects/index.html Reid Consulting's Libraries and Programs] CMI, TSL, Knit, Greencard, HGL, HSX11, HSWin32<br />
<br />
== Libraries for other languages ==<br />
If you are thinking about designing a new library for Haskell, you<br />
ought to look what has been done in other languages. Here are<br />
standard library definitions for <br />
<br />
<ul><br />
<li>[http://srfi.schemers.org/ Scheme]</li><br />
<br />
<li>[http://cm.bell-labs.com/cm/cs/what/smlnj/doc/basis/index.html ML]</li><br />
</ul></div>Ruizhttps://wiki.haskell.org/index.php?title=Applications_and_libraries&diff=3005Applications and libraries2006-03-18T21:21:32Z<p>Ruiz: update link to GSL wrappers</p>
<hr />
<div>{{unknown copyright}}<br />
The first place to look for data types or functions that do what you<br />
want is the Standard Prelude, then the <br />
[[Language and library specification]] (both parts of<br />
the Haskell standards documentation), then in whatever extra libraries<br />
are provided by the Haskell implementation you are using, then on the<br />
page you are looking at. If it is not here, then it may be in the<br />
[http://www.cse.unsw.edu.au/~dons/announce.html archives] of the<br />
[[Haskell Weekly News]].<br />
<br />
Search the standard libraries collection (by name or type signature)<br />
using [http://haskell.org/hoogle Hoogle].<br />
<br />
__TOC__<br />
<br />
There is an effort underway to standardise many of the extra libraries that come with Haskell implementations, and at the same time extend the module namespace into a hierarchy. A document describing this project can be found [http://www.haskell.org/~simonmar/libraries/libraries.html here], and there is a [http://www.haskell.org/mailman/listinfo/libraries mailing list] for discussing issues related to libraries.<br />
<br />
A large collection of [http://www.haskell.org/ghc/docs/latest/html/libraries/index.html standard hierarchical libraries] are currently distributed with GHC (from version 5.04), Hugs (from Nov 2003), and nhc98 (from 1.16).<br />
<br />
[[Cabal]], The Common Architecture for Building Applications and Libraries, is an framework for packaging, building, and installing any tool developed in the Haskell language.<br />
<br />
This page is intended as a comprehensive list of all Haskell libraries and tools. Some of these are proof-of-concepts rather than production code. Some have no longer been maintained for a long time.<br />
<br />
On freshmeat.com there is [http://freshmeat.net/browse/834/?topic_id=834 an alternative list of public domain software written in Haskell]. That list is currently short (for you to change that), but in particular it displays the current development status of the software. Even more Haskell projects are documented in the [http://haskell.org/communities/ community reports] and in the archives of the [[Haskell Weekly News]].<br />
<br />
== Program Development ==<br />
<br />
<dl><br />
<dt>[http://www.cs.kent.ac.uk/projects/vital/ Vital]<br />
<dd>Vital is a visual programming environment. It is particularly intended for supporting the open-ended, incremental style of development often preferred by end users (engineers, scientists, analysts, etc.).</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/hmake/ hmake], a Haskell-aware replacement for make</dt><br />
<dd>Automatically keeps track of module dependencies (i.e. no need to write any Makefiles!). Can be used with any of the usual Haskell compilers (ghc, hbc, nhc98).</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/cpphs/ cpphs]</dt><br />
<dd>Cpphs is a re-implementation (in Haskell) of the C pre-processor.</dd><br />
<br />
<dt>[http://repetae.net/john/computer/haskell/DrIFT DrIFT]</dt><br />
<dd>DrIFT is a tool which allows derivation of instances for classes that aren't supported by the standard compilers. In addition, instances can be produced in seperate modules to that containing the type declaration. This allows instances to be derived for a type after the original module has been compiled. As a bonus, simple utility functions can also be produced from a type.</dd><br />
<br />
<dt>[http://www.cl.cam.ac.uk/users/rje33/software.html HaskTags]</dt><br />
<dd>Hasktags is a simple program that generates TAGS files for Haskell code. Together with a supporting editor (e.g. NEdit, XEmacs, or Vim) TAGS files can be used to quickly find the places where functions, data constructors etc. are defined.</dd><br />
<br />
<dt>[http://www.dtek.chalmers.se/~d99josve/tagsh.tar.gz tagsh]</dt><br />
<dd>A version of the tags program for Haskell. It uses the standardised hssource and posix library, works with GHC 5.02.1. tags file has been checked to work with vim and nedit.</dd><br />
<br />
<dt>[http://home.conceptsfa.nl/~jwit/HaSpell.html HaSpell]</dt><br />
<dd>HaSpell is a spelling and style checker for Haskell programs. It can detect spelling errors in comments in the program text, and optionally in the code itself. There is an option to detect metasyntactic variables (such as 'foo') and 'bad function prefixes' such as 'compute' and 'doThe' - these make the program less readable and generally indicate bad programming style.</dd><br />
<br />
<dt>[http://www.informatik.uni-bremen.de/~ewk/ewk.html Uniform Workbench]</dt><br />
<dd>This tool is an Integration Framework providing its services in the lazy functional programming language Haskell. The WorkBench provides support for data, control and presentation integration, so that integrated Software Development Environments can be constructed from the basis of prefabricated, off-the-shelf components. We are currently using the WorkBench to construct integrated environments for Haskell program development and for specification and proof of Z specifications.</dd><br />
<br />
<dt>[http://www.isi.edu/~hdaume/HAllInOne/ Haskell All-In-One]</dt><br />
<dd>This Haskell utility takes a program implemented in multiple modules and converts it to a single module.</dd><br />
</dl><br />
<br />
=== Integrated Development Environments ===<br />
<br />
<dl><br />
<dt>[http://www.kdevelop.org/ KDevelop]</dt><br />
<dd>This IDE supports many languages. For Haskell it [http://developer.kde.org/documentation/library/cvs-api/kdevelop/html/LangSupportStatus.html currently supports] project management, syntax highlighting, building (with GHC) & executing within the IDE.<br />
</dd><br />
<br />
<dt>[http://leiffrenzel.de/eclipse/eclipsefp.html Haskell support for Eclipse]</dt><br />
<dd>Eclipse is an open, extensible IDE platform for 'everything and nothing in<br />
particular'.<br />
It is implemented in Java and runs on several platforms. The Java IDE built<br />
on top of<br />
it has already become very popular among Java developers. The Haskell tools<br />
extend it to support editing (syntax coloring, code assist), compiling, and<br />
running<br />
Haskell programs from within the IDE. More features like source code<br />
navigation,<br />
module browsing etc. will be added in the future.</dd><br />
<br />
<dt>[http://www.dtek.chalmers.se/~d99josve/hide/ hIDE]</dt><br />
<dd>hIDE is a GUI-based Haskell IDE written using gtk+hs. It does not include an editor but instead interfaces with NEdit, vim or GNU emacs.<br />
<br />
<dt>[http://haskell.org/hide hIDE-2]</dt><br />
<dd>Through the dark ages many a programmer has longed for the ultimate tool. In response to this most unnerving craving, of which we ourselves have had maybe more than our fair share, the dynamic trio of #Haskellaniacs (dons, dcoutts and Lemmih) hereby announce, to the relief of the community, that a fetus has been conceived:<br />
<br />
hIDE - the Haskell Integrated Development Environment.<br />
<br />
So far the unborn integrates source code recognition and a chameleon editor, resenting these in a snappy gtk2 environment. Although no seer has yet predicted the date of birth of our hIDEous creature, we hope that the mere knowledge of its existence will spread peace of mind throughout the community as oil on troubled waters.<br />
<br />
See also: [[Screenshots of HIDE]] and [[HIDE]]</dd><br />
<br />
<dt>[http://www.students.cs.uu.nl/people/rjchaaft/JCreator JCreator with Haskell support]</dt><br />
<br />
<dd>JCreator is a highly customizable Java IDE for Windows.<br />
Features include extensive project support, fully customizable<br />
toolbars (including the images of user tools) and menus,<br />
increase/decrease indent for a selected block of text<br />
(tab/shift+tab respectively). The Haskell support module adds<br />
syntax highlighting for haskell files and winhugs, hugs, a static<br />
checker (if you double click on the error message, JCreator will<br />
jump to the right file and line and highlight it yellow) and the<br />
Haskell 98 Report as tools. Platforms: Win95, Win98, WinNT and<br />
Win2000 (only Win95 not tested yet). Size: 6MB.<br><br />
JCreator is a trademark of Xinox Software; Copyright &copy; 2000<br />
Xinox Software<br><br />
The Haskell support module is made by [http://www.students.cs.uu.nl/people/rjchaaft/ Rijk-Jan van Haaften].</dd><br />
<br />
<dt>[http://www.haskell.org/visualhaskell Visual Haskell]</dt><br />
<dd><br />
Visual Haskell is a complete development environment for Haskell software, based on Microsoft's [http://msdn.microsoft.com/vstudio/productinfo/ Microsoft Visual Studio] platform. Visual Haskell integrates with the Visual Studio editor to provide interactive features to aid Haskell development, and it enables the construction of projects consisting of multiple Haskell modules, using the Cabal building/packaging infrastructure.</dd><br />
</dl><br />
<br />
=== Editor Modes for syntax highlighting and more ===<br />
<br />
<dl><br />
<dt>For SubEthaEdit (Mac OS X editor): <dd>[http://www.cs.kent.ac.uk/people/rpg/tatd2/Haskell.mode.zip Haskell mode].<br />
<dt>For KDE's Kate</dt><br />
<dd><br />
<ul><br />
<li>[http://www.informatik.uni-bonn.de/~ralf/software.html#syntax Files] by Ralf Hinze.<br />
<li>[hs.xml hs.xml] and [lhs.xml lhs.xml] by Brian Huffman.<br />
</ul><br />
<dt>[http://www.nedit.org/ftp/contrib/highlighting/haskell.pats NEdit]<br />
syntax highlighting and block comment support.</dt><br />
<br />
<dt>[http://www.vim.org vim] syntax highlighting</dt><br />
<dd><br />
<ul><br />
<li>[ftp://ftp.cse.unsw.edu.au/pub/users/dons/vim/ by Don Stewart]: for TeX and cpp style Haskell files. <br />
<li>[http://urchin.earth.li/~ian/vim/ by Ian Lynagh]: distinguishes different literal Haskell styles.<br />
<li>by John Williams: Both regular Haskell [haskell.vim .hs] and [lhaskell.vim .lhs] files<br />
that uncomment lines using '&gt;' are supported.<br />
</ul><br />
<br />
<dt>[http://www.haskell.org/libraries/Haskell98.syn Syntax highlighting file] for [http://www.textpad.com textpad]</dt><br />
<br />
<dd>by Jeroen van Wolffelaar and Arjan van IJzerdoorn, which<br />
inludes all prelude functions, datatype, constructors, etc, all in<br />
seperate groups.</dd><br />
<br />
<dt>[http://www.astercity.net/~khaliff/haskell/haskellmode.tgz Haskell mode]</dt><br />
<br />
<dd>for [http://www.jedsoft.org/jed/ jed] by<br />
Marcin 'Qrczak' Kowalczyk.</dd><br />
<br />
<dt>[http://www.haskell.org/haskell-mode/ Haskell Mode for Emacs]</dt><br />
<br />
<dd>Supports font locking, declaration scanning, documentation of<br />
types, indentation and interaction with Hugs.</dd><br />
<br />
<dt>Alternative [http://www.haskell.org/libraries/hugs-mode.el Hugs Mode for Emacs] by<br />
Chris Van Humbeeck</dt><br />
<br />
<dd>Provides fontification and cooperation with Hugs. Updated for<br />
emacs 20.* by Adam P. Jenkins.</dd><br />
</dl><br />
<br />
<p>Some other, mostly obsolete, modes are available in [http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/CONTRIB/haskell-modes/ CVS].</p><br />
<br />
=== Typesetting Haskell in TeX ===<br />
<br />
<dl><br />
<dt>[http://www.jantar.org/lambdaTeX/ lambdaTeX]</dt><br />
<br />
<dd>A TeX package for typesetting literate scripts in TeX. The<br />
output looks much like the code from Chris Okasaki's book "Purely<br />
Functional Data Structures", doing syntax highlighting and<br />
converting ASCII art such as"-&gt;" or "alpha" to proper<br />
mathematical symbols. It should work with both LaTeX and plain TeX,<br />
and it does its magic without any annotations, directly on the<br />
source code (lambdaTeX uses an almost-complete Haskell lexical<br />
analyzer written entirely in plain TeX). You only have to add<br />
\input lambdaTeX at the top of your source file, and manually<br />
typeset your literate comments so they look as good as the source<br />
code.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/haskell-style.html Haskell Style for LaTeX2e]</dt><br />
<br />
<dd>by Manuel Chakravarty provides environments and macros that<br />
simplify setting Haskell programs in LaTeX.</dd><br />
<br />
<dt>[http://www.iai.uni-bonn.de/~loeh/lhs2tex/ lhs2tex]</dt><br />
<br />
<dd>A preprocessor for typesetting Haskell programs that combines<br />
some of the good features of pphs and smugweb. It generates LaTeX code from literate Haskell sources.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/wiki/Ehc/Shuffle Shuffle]</dt><br />
<br />
<dd>--- another tool helping literate programming in Haskell. It helps to maintain ''views'' in a literate programming project.<br />
<br />
For example, it is among the tools used for developing a compiler in an iterative way with manuals didactically reflecting these evolving series of versions deriving from the literal code (see [http://www.cs.uu.nl/wiki/Ehc/WebHome Essential Haskell Compiler] project).<br />
Thus, Shuffle gives us the possibility for making didactically the evolution of versions visible in the documentation, when this is needed.<br />
<br />
More generally, Shuffle gives us tangling and weaving possibilities of literate programming.<br />
I think it gives a way to think of literal program development in a more abstract way by supporting the concept of views (maybe a too far analogy: version control management -- e.g. [http://abridgegame.org/darcs/ darcs] -- helps thinking of program development in a more abstract way, too).<br />
<br />
Shuffle works well together with lhs2tex.</dd><br />
<br />
<dt>[http://www.acooke.org/jara/pancito/haskell.sty haskell.sty]</dt><br />
<br />
<dd>A Latex style file by Andrew Cooke that makes literal<br />
programming in Haskell simple.</dd><br />
</dl><br />
<br />
=== Source documentation and browsing ===<br />
<br />
<dl><br />
<dt>[[Haddock]] A Haskell Documentation Tool</dt><br />
<dd>A tool for automatically generating documentation from<br />
annotated Haskell source code. It is primarily intended for<br />
documenting libraries, but it should be useful for any kind of<br />
Haskell code. Haddock lets you write documentation annotations next<br />
to the definitions of functions and types in the source code, in a<br />
syntax that is easy on the eye when writing the source code (no<br />
heavyweight mark-up). The documentation generated by Haddock is<br />
fully hyperlinked - click on a type name in a type signature to go<br />
straight to the definition, and documentation, for that type.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/idoc/ IDoc] A No<br />
Frills Haskell Interface Documentation System</dt><br />
<br />
<dd>IDoc extracts interface documentation and declarations from<br />
Haskell modules based on standard Haskell layout rules and a small<br />
number of clues that the programmer embeds in interface comments.<br />
These clues have been designed to be visually non-imposing when<br />
displaying the source in a text editor. Interface documentation is<br />
rendered in standard markup languages (currently, only HTML is<br />
supported). IDoc has been designed to be simple to use and<br />
install.</dd><br />
<br />
<dt>[http://www.fmi.uni-passau.de/~groessli/hdoc/ HDoc]</dt><br />
<br />
<dd>HDoc generates documentation in HTML format for Haskell<br />
modules. The generated documents are cross linked and include<br />
summaries and detailed descriptions for the documented functions,<br />
data types, type classes and instance declarations.</dd><br />
<br />
<dt>[http://www.ida.liu.se/~jakax/haskell.html HaskellDoc]</dt><br />
<br />
<dd>This program generates an HTML document showing the module<br />
interfaces of a Haskell project. Convenient links are placed for<br />
easy browsing of the different modules of the project, and for<br />
quick access to the source code.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/explorer/browser.html The Haskell Module Browser]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>A browser similar to Smaltalk and Eiffel class browsers.</dd><br />
</dl><br />
<br />
=== Testing ===<br />
<br />
<dl><br />
<dt>[http://hunit.sourceforge.net HUnit]</dt><br />
<br />
<dd>A unit testing framework for Haskell, similar to JUnit for<br />
Java. With HUnit, the programmer can easily create tests, name<br />
them, group them into suites, and execute them, with the framework<br />
checking the results automatically. Test specification is concise,<br />
flexible, and convenient.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~rjmh/QuickCheck/ QuickCheck]</dt><br />
<br />
<dd>A tool for testing Haskell programs automatically. The<br />
programmer provides a specification of the program, in the form of<br />
properties which functions should satisfy, and QuickCheck then<br />
tests that the properties hold in a large number of randomly<br />
generated cases. Specifications are expressed in Haskell, using<br />
combinators defined in the QuickCheck library. QuickCheck provides<br />
combinators to define properties, observe the distribution of test<br />
data, and define test data generators.</dd><br />
<br />
<dt>[http://www.informatik.uni-freiburg.de/~wehr/haskell/ HTF - The Haskell Test Framework]</dt><br />
<br />
<dd>The HTF lets you write HUnit tests and QuickCheck properties in an<br />
easy and convenient way. Additionally, the HTF provides a facility for<br />
testing programs by running them and comparing the actual output with<br />
the expected output (so called "file-based tests").<br />
<br />
The HTF uses Template Haskell to collect all tests and properties, so<br />
you do not need to write boilerplate code for that purpose. Preprocessor<br />
macros provide you with file name and line number information for tests<br />
and properties that failed.</dd><br />
</dl><br />
<br />
=== Tracing &amp; debugging ===<br />
<br />
Tracing gives access to otherwise invisible information about a<br />
computation. Conventional debuggers allow the user to step through<br />
the program computation, stop at given points and examine variable<br />
contents. This tracing method is quite unsuitable for Haskell,<br />
because its evaluation order is complex, function arguments are<br />
usually unwieldy large unevaluated expressions and generally<br />
computation details do not match the user's high-level view of<br />
functions mapping values to values. <br />
<br />
<dl><br />
<dt>[http://www.cs.mu.oz.au/~bjpop/buddha/ Buddha]</dt><br />
<br />
<dd>Buddha is a declarative debugger for Haskell 98 programs. It presents the evaluation of a Haskell program as a series of function applications. A typical debugging session involves a series of questions and answers. The questions are posed by the debugger, and the answers are provided by the user. The implementation of Buddha is based on program transformation.</dd><br />
<br />
<dt>[http://www.ida.liu.se/~henni Freja]</dt><br />
<br />
<dd>A compiler for a subset of Haskell. Running a compiled program<br />
creates an evaluation dependency tree as trace, a structure based<br />
on the idea of declarative debugging from the logic programming<br />
community. A debugging session consists of the user answering a<br />
sequence of yes/no questions.</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/hat Hat]</dt><br />
<br />
<dd>A Haskell program is first transformed by hat-trans and then<br />
compiled with nhc98 or ghc. At runtime the program writes a trace file. <br />
There are tools<br />
for viewing the trace in various ways: Hat-stack shows a virtual stack<br />
of redexes. Hat-observe shows top-level functions in the style of<br />
Hood. Hat-trail enables exploring a computation backwards,<br />
starting from (part of) a faulty output or an error message.<br />
Hat-detect provides algorithmic debugging in the style of<br />
Freja. Hat-explore allows free navigation through a computation similar to traditional debuggers and algorithmic debugging and slicing.</dd><br />
<br />
<dt>[http://www.haskell.org/hood Hood]</dt><br />
<br />
<dd>A library that permits to observe data structures at given<br />
program points. It can basically be used like print statements in<br />
imperative languages, but the lazy evaluation order is not affected<br />
and functions can be observed as well.</dd><br />
<br />
<dt>[http://www.cs.ukc.ac.uk/people/staff/cr3/toolbox/haskell/ GHood]</dt><br />
<br />
<dd>"Graphical Hood" - a Java-based graphical observation event<br />
viewer, building on Hood.</dd><br />
</dl><br />
<br />
== Data structures ==<br />
<br />
<dl><br />
<dt>[http://www.haskell.org/ghc/docs/edison/ Edison]</dt><br />
<br />
<dd>Chris Okasaki is developing a library of efficient data<br />
structures. It provides sequences, finite maps, priority queues,<br />
and sets/bags. ([http://www.eecs.usma.edu/Personnel/okasaki/pubs.html#hw00 overview paper]).</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/Binary.html Binary/BinArray library]</dt><br />
<br />
<dd>A port of Malcolm Wallace's Binary library for NHC13, offering<br />
facilities for heap compression and binary I/O. A related library,<br />
BinArray, uses Binary to implement imperative binary arrays.</dd><br />
<br />
<dt>[http://www.cs.orst.edu/~erwig/fgl/ FGL - A Functional Graph Library]</dt><br />
<br />
<dd>The functional graph library provides a collection of graph<br />
operations.</dd><br />
<br />
<dt>[http://www.cs.vu.nl/Strafunski/ Strafunski]</dt><br />
<br />
<dd>A bundle for generic programming. It provides programming<br />
support for generic traversal as useful in the implementation of<br />
program transformations.</dd><br />
<br />
<dt>[http://www.isi.edu/~hdaume/STPP/ The Haskell STate Preprocessor]</dt><br />
<br />
<dd>This is a short preprocessor for stateful Haskell programs. It aleviates the pain of performing single<br />
array lookup/write/update functions with some syntax to support it. It also supports hash<br />
table operations based on the HashTable implementation available from the author. Finally, it supports<br />
monadic if and monadic case constructions. It is lightweight in the sense that it performs no syntactic<br />
analysis and is essentially a character transformer.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~dons/fps.html Fast Packed Strings]</dt><br />
<br />
<dd>The FPS library provides mmapped and malloc'd packed strings (byte<br />
arrays held by a ForeignPtr), along with a list interface to these<br />
strings. It lets you do extremely fast IO in Haskell; in some cases,<br />
even faster than typical C implementations, as well as conserving space.</dd><br />
<br />
</dl><br />
<br />
== Extended Haskell ==<br />
<br />
The purpose of these systems is to enhance the capabilities of Haskell<br />
in some way. These are not targeted at any specific application domains.<br />
<br />
<dl><br />
<dt>[http://www.dtek.chalmers.se/~d00nibro/harp/ HaRP]</dt><br />
<dd>A Haskell extension that extends the normal pattern matching facility with the power of regular expressions.</dd><br />
<br />
<dt>[http://www.haskell.org/arrows/ Arrows]</dt><br />
<br />
<dd>Ross Patterson has developed a preprocessor that provides a nice<br />
notation for Arrows, a generalization of monads.<br />
</dd><br />
<br />
<br />
<dt>[http://www.haskell.org/yampa/ Functional Reactive Programming]</dt><br />
<br />
<dd>Functional reactive programming integrates time flow into<br />
functional programming. This provides an elegant way to express<br />
computation in domains such as interactive animations, robotics,<br />
computer vision, user interfaces, and simulation. The Yampa system is<br />
an implementation of FRP based on arrows.<br />
</dd><br />
</dl><br />
<br />
== Interfacing with other languages and systems ==<br />
<br />
<dl><br />
<dt>[http://www.haskell.org/haxr/ HaXR - the Haskell XML-RPC library]</dt><br />
<dd>An XML-RPC client and server library. [http://www.xmlrpc.com/ XML-RPC] is "remote procedure calling using HTTP<br />
as the transport and XML as the encoding. XML-RPC is designed to be as<br />
simple as possible, while allowing complex data structures to be<br />
transmitted, processed and returned."</dd><br />
<br />
<dt>[http://www.dcs.shef.ac.uk/~simonf/HAIFA.html HAIFA]</dt><br />
<dd>HAIFA is an implementation of parts of the web-service architecture in Haskell. Notably it includes an XML serializer, a partial implementation of XML Schema and SOAP/1.1.</dd><br />
</dl><br />
<br />
=== Tools for interfacing with other languages ===<br />
<br />
The definition of a basic [http://www.cse.unsw.edu.au/~chak/haskell/ffi/ foreign function interface for Haskell (FFI)] is finished. It has been agreed on and<br />
implemented by most Haskell implementors. The following tools already<br />
produce code for this interface. The [http://www.reid-consulting-uk.ltd.uk/docs/ffi.html Guide to Haskell's Foreign Function Interface] provides a comparision of the different tools.<br />
<br />
<br />
<dl><br />
<dt>[http://haskell.org/greencard/ Green Card]</dt><br />
<br />
<dd>Green Card is a foreign function interface preprocessor for<br />
Haskell, simplifying the task of interfacing Haskell programs to<br />
external libraries (which are normally exposed via C interfaces).<br />
Green Card is currently able to generate code compatible with the<br />
[../implementations.html#ghc Glasgow Haskell Compiler],<br />
[../implementations.html#hugs Hugs] and [../implementations.html#nhc nhc].</dd><br />
<br />
<dt>[http://haskell.org/hdirect/ HaskellDirect]</dt><br />
<br />
<dd>HaskellDirect is an Interface Definition Language (IDL)<br />
compiler for Haskell, which helps interfacing Haskell code to<br />
libraries or components written in other languages (C). An IDL<br />
specification specifies the type signatures and types expected by a<br />
set of external functions. One important use of this language<br />
neutral specification of interfaces is to specify COM (Microsoft's<br />
Component Object Model) interfaces, and HaskellDirect offers<br />
special support for both using COM objects from Haskell and<br />
creating Haskell COM objects. HaskellDirect groks both the OSF DCE<br />
dialect of IDL (including the various extensions introduced by the<br />
Microsoft IDL compiler) and the OMG IIOP/CORBA dialect.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/c2hs/ C-&gt;Haskell]</dt><br />
<br />
<dd>A lightweight tool for implementing access to C libraries from<br />
Haskell.</dd><br />
<br />
<dt>[http://hsffig.sourceforge.net HSFFIG]</dt><br />
<dd>Haskell FFI Binding Modules Generator (HSFFIG) is a tool that takes a<br />
C library include file (.h) and generates Haskell Foreign Functions<br />
Interface import declarations for items (functions, structures, etc.)<br />
the header defines.</dd><br />
<br />
<dt>[http://www.haskell.org/gcjni GCJNI]</dt><br />
<br />
<dd>A Java Native Interface for Haskell. Allows Haskell to invoke<br />
Java code. Includes a tool to generate Haskell bindings for a Java<br />
library. Works for hugs and ghc under both Linux and Windows.</dd><br />
<br />
<dt>[http://sourceforge.net/projects/jvm-bridge/ Haskell/Java VM Bridge]</dt><br />
<br />
<dd>A bridge to the Java virtual machine via JNI for Haskell.</dd><br />
<br />
<dt>[http://haskell.org/haskellscript/ HaskellScript]</dt><br />
<br />
<dd>HaskellScript is the collective name for all Haskell<br />
components, both tools and libararies, that allow interaction with<br />
the COM/ActiveX framework.</dd><br />
<br />
<dt>[http://www.astercity.net/~khaliff/haskell/kdirect/index.html KDirect]</dt><br />
<br />
<dd>A tool to simplify the process of interfacing C libraries to<br />
Haskell. It is less powerful than HaskellDirect, but easier to use<br />
and more portable.</dd><br />
</dl><br />
<br />
=== Interfaces to specific systems ===<br />
<br />
<dl><br />
<dt>[http://www.cse.unsw.edu.au/~dons/hs-plugins/ hs-plugins]<br />
<dd>A library for compiling and loading plugins into a running Haskell program.</dd><br />
<dt>[http://www.volker-wysk.de/hsshellscript HsShellScript]</dt><br />
<dd>A library for using Haskell for tasks which are usually done by shell scripts, e.g. command line parsing, analysing paths, etc.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~erik/Personal/cgi.htm CGI Library]</dt><br />
<br />
<dd>CGI programs can receive input from the client's web browser,<br />
encoded in a complicated fashion, and can write output in a variety<br />
of formats (plain text, HTML, JPEG etc) which the client then sees.<br />
The decoding and encoding of the IO is often expressed in PERL or<br />
C, and makes CGI applications tedious and awkward to write.<br />
Haskell/CGI is a library for writing CGI programs in Haskell 1.3<br />
and above.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/CGI.html CGI Library]</dt><br />
<br />
<dd>An all-in-one-file version of Erik Meijer's CGI library (above)<br />
with some bugs fixed, a few extensions and ported to Haskell<br />
98.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/daVinci.html daVinci binding]</dt><br />
<br />
<dd>A binding to daVinci, an X-Windows based visualization tool for<br />
directed graphs.</dd><br />
<br />
<dt>[http://www-i2.informatik.rwth-aachen.de/~michaelw/hmpi.html hMPI]</dt><br />
<br />
<dd>hMPI is an acronym for HaskellMPI. It is a Haskell binding<br />
conforming to MPI (Message Passing Interface) standard 1.1/1.2. The<br />
programmer is in full control over the communication between the<br />
nodes of a cluster.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/smartest.html Smarty]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>The world's smartest i/o device for Haskell. An interface<br />
between Haskell and Squeak, a freely available Smalltalk language<br />
and environment.</dd><br />
<br />
<dt>[http://www.haskell.org/~petersen/haskell/popenhs/ popenhs]</dt><br />
<br />
<dd>A small library, based on runProcess in the standardised posix library.<br />
It provides lazy output from subprocesses.</dd><br />
<br />
<dt>[http://sourceforge.net/projects/haskell-corba/ haskell-corba]</dt><br />
<br />
<dd>This package allows Haskell programmers to write CORBA clients<br />
and servers using the [http://www.mico.org MICO open-source CORBA implementation]. It defines a Haskell language<br />
mapping for CORBA, and includes an IDL compiler which generates<br />
Haskell stub and skeleton modules from IDL files.</dd><br />
</dl><br />
<br />
=== Interfacing with databases ===<br />
<br />
<dl><br />
<br />
<dt>[http://sourceforge.net/forum/forum.php?forum_id=350240 HSQL]</dt><br />
<dd>HSQL is a simple library which provides an interface to multiple databases.<br />
MySQL, PostgreSQL, ODBC, SQLite and Oracle are currently supported.<br />
It is part of [http://htoolkit.sourceforge.net/ HToolkit].</dd><br />
<br />
<dt>[http://cvs.sf.net/viewcvs.py/haskell-libs/libs/takusen/ Takusen]</dt><br />
<dd>A library to interface to the Oracle DBMS. Part of the [http://sf.net/projects/haskell-libs Haskell-Libs project].</dd><br />
<br />
<dt>[http://haskelldb.sourceforge.net/ HaskellDB]</dt><br />
<br />
<dd>An updated version of [http://www.haskell.org/haskellDB Daan Leijen's HaskellDB] that works with current Haskell implementations and is relatively platform-independent.<br />
</dd><br />
<br />
<dd><br />
HaskellDB is a combinator library for expressing queries and<br />
other operations on relational databases in a type safe and<br />
declarative way. All the queries and operations are completely<br />
expressed within Haskell, no embedded (SQL) commands are needed.<br />
This close integration makes it possible to do arbitrary<br />
computations on the database (like computing the transitive<br />
closure).</dd><br />
<br />
<dt>[http://members.tripod.com/~sproot/hasql.htm HaSQL]</dt><br />
<br />
<dd>HaSQL is a Haskell to ODBC interface. HaSQL allows Haskell<br />
program to run SQL queries against an ODBC compliant database.<br />
Queries with parameters are supported. Data is retrieved from the<br />
database as a lazy list.</dd><br />
<br />
<dt>[http://www.astercity.net/~khaliff/haskell/dbi/dbi.tgz libpq binding]</dt><br />
<br />
<dd>A Haskell binding to libpq, a client-side PostgreSQL<br />
programming library, together with a simple DBI for Haskell. It<br />
enables the programmer to write database-independent code.</dd><br />
<br />
</dl><br />
<br />
== Graphical User Interface and graphics libraries ==<br />
<br />
There exists a large number of gui and graphics libraries for<br />
Haskell. Unfortunately there is no standard one and all are more or<br />
less incomplete. The following list gives an overview. In<br />
general, low-level veneers are going well, but they are low level.<br />
High-level abstractions are pretty experimental. There is a need<br />
for a supported medium-level GUI library.<br />
<br />
{|<br />
!High-level:<br />
|[http://haskell.org/FranTk FranTk]<br />
|[http://www.cs.chalmers.se/ComputingScience/Research/Functional/Fudgets/ Fudgets]<br />
|[http://haskell.org/fruit/ Fruit] and [http://zoo.cs.yale.edu/classes/cs490/03-04b/bartholomew.robinson/ wxFruit]<br />
|([http://www.dcs.gla.ac.uk/fp/software/haggis/ Haggis])<br />
|-<br />
!Medium-level:<br />
|[http://wxhaskell.sourceforge.net wxHaskell]<br />
|[http://haskell.org/gtk2hs/ Gtk2HS]<br />
|[http://haskell.org/graphics/ HGL] (graphics only)<br />
|[http://haskell.org/ObjectIO Object I/O]<br />
|-<br />
!Low-level veneers:<br />
|[http://haskell.org/HOpenGL/ HOpenGL] (graphics only)<br />
|[http://www.dcs.gla.ac.uk/~meurig/TclHaskell/ TclHaskell]<br />
|Win32<br />
|X11<br />
|}<br />
<br />
=== Graphical User Interface Libraries ===<br />
<br />
<dl><br />
<dt>[http://wxhaskell.sourceforge.net wxHaskell]</dt><br />
<dd>[[wxHaskell]] is a portable and native GUI library built on top of wxWindows - a comprehensive C++ library that is portable across all major GUI<br />
platforms; including GTK, Windows, X11, and MacOS X. wxWindows is a mature library (in development since 1992)<br />
that supports a wide range of widgets with the native look-and-feel, and it has a very active community.</dd> <br />
<br />
<dt>[http://haskell.org/gtk2hs/ Gtk2Hs]</dt><br />
<dd>Gtk2Hs is a GUI library for Haskell based on [http://www.gtk.org Gtk+].<br />
Gtk+ is an extensive and mature multi-platform toolkit for creating graphical<br />
user interfaces. Gtk2Hs is actively developed, supporting the latest version<br />
of the Gtk+ 2.x series. It provides automatic memory management, Unicode<br />
support and also bindings for various Gnome modules.<br />
It runs on Windows, Linux, MacOS X, FreeBSD and Solaris.</dt><br />
<br />
<dt>[http://htoolkit.sourceforge.net/ HToolkit]</dt><br />
<dd>HToolkit is a portable Haskell library for writing graphical user<br />
interfaces (GUI's). The library is built upon a low-level interface that will<br />
be implemented for each different target platform. The low-level library is called Port and is currently implemented for GTK and Windows. The middle-level<br />
library is named GIO (the Graphical IO library) and is built upon the low-level Port library.</dd><br />
<br />
<dt>[http://www.informatik.uni-bremen.de/htk HTk]</dt><br />
<dd>Htk is a typed, portable encapsulation of Tcl/Tk into Haskell.<br />
Its distinctive features are the use of Haskell types and type<br />
classes for structuring the interface, an abstract notion of event<br />
for describing user interaction, and portability across Windows,<br />
Unix and Linux.</dd><br />
<br />
<dt>[http://www.dcs.gla.ac.uk/~meurig/TclHaskell/ TclHaskell]</dt><br />
<dd>TclHaskell is a library of functions for writing platform<br />
independent, graphical user interfaces in Haskell. The library<br />
provides a convenient, abstract and high-level way to write<br />
window-oriented applications. It also provides a more low level<br />
interface to write primitive Tcl code where helpful.<br><br />
For Unix and Windows (and Macintosh?).</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/ComputingScience/Research/Functional/Fudgets/ Fudgets]</dt><br />
<dd>Fudgets is primarily a Graphical User Interface Toolkit for the<br />
functional programming language Haskell and the X Windows system.<br />
Fudgets also makes it easy to create client/server applications<br />
that communicate via the Internet.<br />
<br />
<ul><br />
<li>[http://www.cs.chalmers.se/ComputingScience/Research/Functional/Fudgets/springschool95-intro.html Programming with Fudgets]: A short presentation of the Fudget Library and<br />
the ideas underlying it.</li><br />
</ul><br />
<br />
For Unix, not Windows.</dd><br />
<br />
<dt>[http://www.haskell.org/fruit/ Fruit]</dt><br />
<dd>Another high-level approach to GUI's in Haskell. It is based on the concepts of Functional Reactive Programming and arrows.<br />
<br />
There is also another implementation of this approach, called [http://zoo.cs.yale.edu/classes/cs490/03-04b/bartholomew.robinson/ wxFruit]. It is implemented on top of wxHaskell.</dd><br />
<br />
<dt>[http://haskell.org/FranTk FranTk]</dt><br />
<dd>is a library for building GUIs in Haskell. FranTk uses<br />
behaviours and events, concepts from Conal Elliot's Functional<br />
Reactive Animation. FranTk provides good support for developing<br />
complex dynamic systems, and is built on top of Tcl-Tk. This makes<br />
it platform independent. FranTk was developed by [http://www.dcs.gla.ac.uk/~meurig Meurig Sage].<br><br />
For Unix and Windows.</dd><br />
<br />
<dt>[http://haskell.org/ObjectIO Object I/O for Haskell]</dt><br />
<dd>A port of Clean Object I/O library for Haskell</dd><br />
<br />
<dt>[http://www.informatik.uni-freiburg.de/~wehr/haskell/ hscurses]</dt><br />
<dd>A Haskell binding to the NCurses library, a library of functions that manage an application's display on character-cell terminals. hscurses also provides some basic widgets implemented on top of the ncurses binding, such as a text input widget and a table widget.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~dons/code/hmp3/Curses.hsc Curses.hsc]<br />
<dd>A minimal binding to curses (as well as ncurses). Smaller and less featured than hscurses, it also provides fast packed string support.</dd><br />
</dl><br />
<br />
==== Unsupported GUI-libraries ====<br />
<br />
The following libraries seem to be no longer maintained. However,<br />
someone might pick up one of them or at least profit from some<br />
design ideas. <br />
<br />
<dl><br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/gtk/ Gtk+HS] a Haskell binding for GTK+</dt><br />
<br />
<dd>This library provides a transcription of the original GTK+ API<br />
into Haskell. GTK+ is a modern, portable GUI library and forms the<br />
basis of the Gnome desktop project. The binding, while not<br />
complete, covers most of GTK+'s core functionality and is ready for<br />
use in applications that require a GUI of medium complexity.<br><br />
Developed under Unix, but should also be usable with the Windows port of GTK+.</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/gtk/#iHaskell iHaskell]</dt><br />
<dd>A functional wrapper on top of GTK+HS that provides convenience functions<br />
for frequently used programming patterns and eliminates the need for explicit<br />
mutable variables.</dd><br />
<br />
<dt>[http://www.dcs.gla.ac.uk/fp/software/haggis/ Haggis]</dt><br />
<br />
<dd>Haggis is a graphical user interface framework for the<br />
functional language Haskell, running under the X Window system. It<br />
is being developed using the Glasgow Haskell Compiler with its<br />
concurrent extensions to achieve more comfortable interaction with<br />
the outside world.</dd><br />
<br />
<dt>Haskell-Tk</dt><br />
<dd>is a concurrent, strongly typed and higher order encapsulation<br />
of Tk that supports the definition of user dialogues. Einar<br />
Karlsson developed it for his [http://www.informatik.uni-bremen.de/~ewk/WB.html UniForm WorkBench].</dd><br />
<br />
<dt>Pidgets</dt><br />
<dd>developed by [http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/s/Scholz:Enno.html Enno Scholz] unifies pictures and widgets in a constraint-based framework for<br />
concurrent functional GUI programming.</dd><br />
<br />
<dt>[http://www.reid-consulting-uk.ltd.uk/alastair/publications/gfpw93/ Budgets]</dt><br />
<dd>A library of Fudget-like combinators based on the Openlook widget library<br />
was developed by [http://www.reid-consulting-uk.ltd.uk/alastair/ Alastair Reid] and Satnam Singh.<br />
The code has suffered tremendous bit-rot (does anyone have a copy<br />
of ghc-0.16?) but all the reusable ideas are described in the [http://www.reid-consulting-uk.ltd.uk/alastair/publications/gfpw93/ paper].</dd><br />
<br />
<dt>[http://drcjt.freeyellow.com/EW.html Embracing Windows]</dt><br />
<dd>is a framework for developing graphical user interfaces. It<br />
runs under Windows 95 using a modified version of Hugs 1.3.</dd><br />
<br />
<dt>Gadgets</dt><br />
<dd>Lazy functional components for graphical user interfaces,<br />
developed by Rob Noble under the supervision of [http://www.cs.york.ac.uk/~colin/ Colin Runciman] (LNCS 982, pages 321-340).</dd><br />
</dl><br />
<br />
=== Graphics ===<br />
<br />
<dl><br />
<dt>[http://haskell.org/graphics/ The Hugs Graphics Library]</dt><br />
<dd>The Hugs Graphics Library supports 2-dimensional graphics<br />
operations, timers, mouse and keyboard actions and multiple<br />
windows. It runs on Hugs under both Win32 and X11. An earlier<br />
version was used for early prototypes of Fran.</dd><br />
<br />
<dt>[http://haskell.org/haven/ Haven]</dt><br />
<dd>Scalable Vector Graphics for Haskell. Portable,<br />
device-independent, resolution-independent library, including<br />
support for affine transformations, Bezier curves, fine-grained<br />
control of pen attributes, bounds and intersection tests,<br />
constructive area geometry, anti-aliased rendering, outline fonts,<br />
etc.</dd><br />
<br />
<dt>[http://afavant.elte.hu/~wferi/funcmp/ Functional Metapost]</dt><br />
<dd>Functional Metapost is a Haskell binding for MetaPost, the powerful but<br />
cumbersome graphics language.</dd><br />
<br />
<dt>[http://www.conal.net/Fran/ Functional Reactive Animation]</dt><br />
<dd>FRAN is a Haskell library (or "embedded language") for<br />
interactive animations with 2D and 3D graphics and sound. It runs<br />
on Hugs under Windows 95 and Windows NT, using Win32 graphics<br />
(GDI).</dd><br />
<br />
<dt>[http://www.conal.net/pan Pan]</dt><br />
<dd>An embedded language and highly optimizing compiler for image<br />
synthesis and transformation, based on the simple idea of images as<br />
functions over infinite, continuous 2D space. The resulting<br />
binaries can be used as PhotoShop plugins, embedded in web pages or<br />
PowerPoint, or used in an interactive standalone viewer. The<br />
compiler contains no domain-specific knowledge, so it's very<br />
extensible. See the [http://www.conal.net/pan/gallery gallery] for<br />
visual examples. Currently Windows-only, but ports are<br />
encouraged.</dd><br />
<br />
<dt>[http://haskell.org/edsl/pansharp.html Pan#]</dt><br />
<dd>Pan# is a slightly re-engineered version of Pan. It uses the same<br />
compiler but used the Microsoft .NET framework instead of visual<br />
studio, making it easier to install and use. It also has a number of<br />
new features added. While Pan is embedded in Haskell, Pan# has its own<br />
Haskell-like language built in so there is no need to use other Haskell<br />
compilers.<br />
Currently Windows-only.<br />
</dd><br />
<br />
<dt>[http://www.acooke.org/jara/pancito/index.html Pancito]</dt><br />
<dd>Pancito is a Haskell module for manipulating functional images<br />
and then saving them to disk. It was inspired by Pan.</dd><br />
<br />
<dt>[http://haskell.org/HOpenGL/ HOpenGL]</dt><br />
<dd>HOpenGL is a Haskell binding for the OpenGL graphics API (GL<br />
1.2.1 / GLU 1.3) and the portable OpenGL utility toolkit GLUT.</dd><br />
</dl><br />
<br />
=== Graphics File Formats ===<br />
<br />
<dl><br />
<dt>[http://web.archive.org/web/20010628003610/http://www.numeric-quest.com/haskell/Gif/ Gif Writer]<em>(since 10/06/2003: via Internet Archive; this library is no longer available!)</em></dt><br />
<dd>A simple tool - capable of producing GIF based plots from<br />
within Haskell programs. Such plots can be then incorporated into<br />
HTML reports, to literate Haskell programs, or to combination of<br />
both.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/people/jeroen/ Functional Specification of the JPEG algorithm, and an Implementation for Free]</dt><br />
<br />
<dt>[http://www.students.cs.uu.nl/people/dgruijs/jpg/jpg.html JPEG encoding]<br />
Written in Gofer.</dt><br />
</dl><br />
<br />
== Web, HTML, XML ==<br />
<br />
<dl><br />
<dt>[http://www.haskell.org/http/ HTTP and Browser Modules]</dt><br />
<br />
<dd>A significantly RFC compliant HTTP/1.1 implementation. This is an updated version of [http://homepages.paradise.net.nz/warrickg/haskell/http/ Warrick Gray's original version].</dd><br />
<br />
<dt>[http://www.informatik.uni-freiburg.de/~thiemann/haskell/WASH/ WASH]</dt><br />
<br />
<dd>A family of combinator libraries for programming Web<br />
applications. WASH/HTML is for generating dynamic HTML documents,<br />
combining flexibility and safety. WASH/CGI is for server-side Web<br />
scripting with sessions, compositional forms, and graphics.</dd><br />
<br />
<dt>[http://www.cs.york.ac.uk/fp/HaXml/ HaXml: utilities for using XML with Haskell]</dt><br />
<br />
<dd>Includes an XML parser, an HTML parser, a pretty-printer, a<br />
combinator library for generic XML transformations, and two<br />
Haskell&gt;-&lt;XML converters using type-based translation.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~andy/html/intro.htm The Haskell Html Library] by Andy Gill</dt><br />
<br />
<dd>This library is a collection of combinators, allowing your<br />
Haskell programs to generate HTML.</dd><br />
<br />
<dt>[http://www.fh-wedel.de/~si/HXmlToolbox/ Haskell XML Toolbox]</dt><br />
<br />
<dd>The Haskell XML Toolbox bases on the ideas of HaXml and HXML, but<br />
introduces a more general approach for processing XML with Haskell. The<br />
Haskell XML Toolbox uses a generic data model for representing XML<br />
documents, including the DTD subset and the document subset, in<br />
Haskell.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~erik/Personal/cgi.htm CGI Library]</dt><br />
<br />
<dd>CGI programs can receive input from the client's web browser,<br />
encoded in a complicated fashion, and can write output in a variety<br />
of formats (plain text, HTML, JPEG etc) which the client then sees.<br />
The decoding and encoding of the IO is often expressed in PERL or<br />
C, and makes CGI applications tedious and awkward to write.<br />
Haskell/CGI is a library for writing CGI programs in Haskell 1.3<br />
and above.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/CGI.html CGI Library]</dt><br />
<br />
<dd>An all-in-one-file version of Erik Meijer's CGI library (above)<br />
with some bugs fixed, a few extensions and ported to Haskell<br />
98.</dd><br />
<br />
<dt>[http://home.tiscali.be/stevevh/ Generative Implementation Strategies for Data-Centric Web Applications]<br />
<dd>Generic presentation layer abstractions of administrative web applications<br />
are the central theme of this thesis. The domain-engineering approach<br />
results in a framework to support user interfaces generated from high-level<br />
descriptions. A domain-specific language describes user interfaces. The<br />
[hoyweghenSoft.zip Haskell-based generator] transforms these descriptions to user interfaces<br />
implemented with JavaScript and XHTML.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~d00nibro/hsp Haskell Server Pages]</dt><br />
<dd>Using Haskell as a server-side scripting language, extended to allow embedded XML/XHTML fragments in Haskell code.</dd> <br />
<br />
</dl><br />
<br />
<br />
== Pretty-printer libraries ==<br />
<br />
<dl><br />
<dt>[http://research.microsoft.com/~simonpj/downloads/pretty-printer/pretty.html Pretty printer library]</dt><br />
<br />
<dd>Simon Peyton Jones made an "industrial strength" pretty<br />
printing library in Haskell, based on John Hughes's paper "The<br />
Design of a Pretty-printing Library" (in Advanced Functional<br />
Programming, Johan Jeuring and Erik Meijer (eds), LNCS 925). <a<br />
href="http://www.md.chalmers.se/~rjmh/Software/NewPP.hs">Original<br />
version by John Hughes</a>.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/groups/ST/Software/PP/ Pretty-printing combinators]</dt><br />
<br />
<dd>The combinators in the library are optimal in the sense that<br />
they produce the layout with the smallest height possible. They<br />
also allow the programmer to specify several different<br />
layouts.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/~daan/pprint.html PPrint]</dt><br />
<br />
<dd>PPrint is an implementation of the pretty printing combinators described by Philip Wadler.<br />
The PPrint library adds new primitives to describe commonly occuring layouts and works well in<br />
practice.</dd> <br />
</dl><br />
<br />
== Compiler and compilation tools ==<br />
<br />
<dl><br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/ctk/ Manuel Chakravarty's Compiler Toolkit]</dt><br />
<br />
<dd>There is a significant set of functionality that is required in<br />
each compiler like symbol table management, input-output<br />
operations, error management, and so on, which are good candidates<br />
for code reuse. The Compiler Toolkit is an attempt to provide an<br />
open collection of modules for these recurring tasks in<br />
Haskell.</dd><br />
<br />
<dt>[http://www.cs.princeton.edu/zephyr/ASDL/ The Zephyr Abstract Syntax Description Lanuguage (ASDL)]</dt><br />
<br />
<dd>ASDL is a language designed to describe the tree-like data<br />
structures in compilers. Its main goal is to provide a method for<br />
compiler components written in different languages to interoperate.<br />
ASDL makes it easier for applications written in a variety of<br />
programming languages to communicate complex recursive data<br />
structures. asdlGen is a tool that takes ASDL descriptions and<br />
produces implementations of those descriptions in C, C++, Java,<br />
Standard ML, and Haskell.</dd><br />
<br />
<dt>[http://www.cse.ogi.edu/~mpj/thih/ Typing Haskell in Haskell]</dt><br />
<br />
<dd>A Haskell program that implements a Haskell typechecker, thus<br />
providing a mathematically rigorous specification in a notation<br />
that is familiar to Haskell users.</dd><br />
<br />
<dt>[http://www.cs.mu.oz.au/~bjpop/hatchet.html Hatchet]</dt><br />
<br />
<dd>Hatchet is a type checking and inference tool for Haskell 98,<br />
written in (almost) Haskell 98.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~aarne/BNF/ The BNF Converter]</dt><br />
<br />
<dd>A High-Level Tool for Implementing Well-Behaved Programming<br />
Languages.</dd><br />
<br />
<dt>[http://www.cwi.nl/projects/MetaEnv/haterm/ ATerm Library]</dt><br />
<br />
<dd>ATerms provide a generic format for representation and exchange<br />
of (annotated) terms. ATerms were developed in the context of the<br />
ASF+SDF Meta-Environment. They are also used by the rewriting<br />
language Stratego, by the transformation tool bundle XT, by the<br />
visitor generator JJForester, and by numerous other tools developed<br />
at CWI, Universiteit Utrecht, and elsewhere.</dd><br />
<br />
<dt>Attribute Grammar</dt><br />
<br />
<dd>How can attribute grammars help at the separation of concerns, at things related to the goals of aspect oriented programming? How do they relate to other concepts like monads and arrows?<br />
Why are they important for the functional programmer? See Wouter Swierstra's [http://www.haskell.org/tmrwiki/WhyAttributeGrammarsMatter WhyAttributeGrammarsMatter].<br />
<br />
Utrecht University's [http://www.cs.uu.nl/wiki/HUT/AttributeGrammarSystem Attribute Grammar System] tools include also an attribute grammar compiler, UUAGC. The concept of attribute grammar was used in their [http://www.cs.uu.nl/wiki/Ehc/WebHome Essential Haskell Compiler] project, which gives us not only a working programming language, but also a good didactical material about using attribute grammars, e.g. in writing compilers.</dd><br />
<br />
</dl><br />
<br />
=== Scanner and parser generators ===<br />
<br />
<dl><br />
<br />
<dt>[http://www.haskell.org/happy/ Happy]</dt><br />
<br />
<dd>[[Happy]] is a parser generator system for Haskell, similar to the<br />
tool `yacc' for C. Like `yacc', it takes a file containing an<br />
annotated BNF specification of a grammar and produces a Haskell<br />
module containing a parser for the grammar.</dd><br />
<br />
<dt>[http://www.informatik.uni-bonn.de/~ralf/frown/ Frown]</dt><br />
<br />
<dd>Frown is an LALR(k) parser generator for Haskell 98 written in Haskell 98.</dd><br />
<br />
<dt>[http://www.ki.informatik.uni-frankfurt.de/~klose/lucky.html Lucky]</dt><br />
<br />
<dd>A parser generator for Haskell using monadic parser<br />
combinators. It was developed to be compatible with Happy.</dd><br />
<br />
<dt>[http://www.cs.uu.nl/wiki/Center/UtrechtParserCombinators Utrecht Parser Combinator Library]</dt><br />
<br />
<dd>The combinators in this library analyse the grammar on the fly and build parsers that are quite efficient. An interesting aspect is that parsing results become available on the fly without hanging on to the input. The parsers will give extensive error reports of erroneous situations, and wil proceed with parsing. </dd><br />
<br />
<dt>[http://www.cs.ruu.nl/~daan/parsec.html Parsec]</dt><br />
<br />
<dd>A simple, well documented monadic parser combinator library for<br />
fast parsers with good error messages.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/hsparser.html HParser]</dt><br />
<br />
<dd>A parser for Haskell written purely in Haskell (using the Happy<br />
parser generator).</dd><br />
<br />
<dt>[http://www.cse.unsw.edu.au/~chak/haskell/ctk/ CTKlight]</dt><br />
<br />
<dd>Standalone distribution of the self-optimising lexer (i.e. regex) and parser<br />
combinators of the Compiler Toolkit (CTK).</dd><br />
<br />
<dt>[http://www.haskell.org/alex/ Alex: A Lexical Analyser Generator]</dt><br />
<br />
<dd>[[Alex]] 2.0 is a Lex-like package for generating Haskell<br />
scanners.</dd><br />
<br />
<dt>[http://www.nondot.org/sabre/Projects/HaskellLexer/ The Haskell Dynamic Lexer Engine]</dt><br />
<br />
<dd>This system is completely dynamic: the lexer may be modified at<br />
runtime, and string buffers may be lexed by different lexers at<br />
different times.</dd><br />
</dl><br />
<br />
== Music ==<br />
<br />
<dl><br />
<dt>[http://haskell.org/haskore/ The Haskore Computer Music System]</dt><br />
<br />
<dd>Haskore is a collection of Haskell modules designed for<br />
expressing musical structures in the high-level, declarative style<br />
of functional programming. Haskore is a means for describing music<br />
- in particular Western Music - rather than sound. It is not a<br />
vehicle for synthesizing sound produced by musical instruments, for<br />
example, although it does capture the way certain (real or<br />
imagined) instruments permit control of dynamics and articulation.<br />
Haskore compositions can be translated into various executable<br />
formats like MIDI and printed in traditional notation.</dd><br />
<br />
<dt>[http://meltin.net/hacks/haskell/ HasChorus]</dt><br />
<br />
<dd>A set of Haskell modules written on top of Haskore to make it<br />
easier to sequence simple, repetitive music.</dd><br />
</dl><br />
<br />
== Numerical algorithms and mathematics ==<br />
<br />
<dl><br />
<dt>[http://www.dinkla.net/fp/cglib.html Geometric Algorithms]</dt><br />
<br />
<dd>A small Haskell library, that contains algorithms for<br />
two-dimensional convex hulls, triangulations of polygons,<br />
Voronoi-diagrams and Delaunay-triangulations, the QEDS data<br />
structure, kd-trees and range-trees.</dd><br />
<br />
<dt>[http://haskelldsp.sourceforge.net/ Digital Signal Processing]</dt><br />
<dd>Modules for matrix manpulation, digital signal processing, spectral<br />
stimation, and frequency estimation.</dd><br />
<br />
<dt>[http://www.info.unicaen.fr/~karczma/arpap/ Papers by Jerzy Karczmarczuk]</dt><br />
<br />
<dd>Some interesting uses of Haskell in mathematics, including<br />
functional differentiation, power series, continued fractions.</dd><br />
<br />
<dt>[http://haskell.org/docon/ DoCon] - Algebraic Domain Constructor</dt><br />
<br />
<dd>A small Computer Algebra System</dd><br />
<br />
<dt>[http://www.robtougher.com/HaskellMath/ HaskellMath]</dt><br />
<br />
<dd><br />
The HaskellMath library is a sandbox for me to experiment with mathematics algorithms. So far I've implemented a few quantitative finance models (Black Scholes, Binomial Trees, etc) and basic linear algebra functions. Next I might work on either computer algebra or linear programming. All comments welcome!<br />
</dd><br />
<br />
<dt>[http://www.isi.edu/~hdaume/HBlas/ Wrapper to CLAPACK]</dt><br />
<br />
<dt>[http://dis.um.es/~alberto/GSLHaskell Wrapper to GSL matrix routines]</dt><br />
<br />
<dt>[http://cvs.haskell.org/darcs/numericprelude/ Numeric Prelude]</dt><br />
<br />
<dd><br />
Experimental revised framework for numeric type classes.<br />
</dd><br />
<br />
<dt>[http://wwwhomes.doc.ic.ac.uk/~ae/exact-computation/ Exact Real Arithmetic]</dt><br />
<dd><br />
A portal-like treatment of the topic. There are functional programming materials too, even with downloadable Haskell source.<br />
</dd><br />
<br />
<dt>[http://eecs.oregonstate.edu/~erwig/pfp/ Probabilistic Functional Programming]</dt><br />
<dd>The PFP library is a collection of modules for Haskell that facilitates probabilistic functional programming, that is, programming with stochastic values. The probabilistic functional programming approach is based on a data type for representing distributions. A distribution represent the outcome of a probabilistic event as a collection of all possible values, tagged with their likelihood. A nice aspect of this system is that simulations can be specified independently from their method of execution. That is, we can either fully simulate or randomize any simulation without altering the code which defines it.</dd><br />
<br />
<br />
<br />
<dt>[http://cvs.haskell.org/darcs/numeric-quest/ mirror of the following numeric modules of Jan Skibinski]</dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/fractions.html Numerics with fractions]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Roots.html Roots of polynomials]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>It implements the well known Laguerre's method for finding<br />
complex roots of polynomials.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Orthogonals.html Indexless linear algebra algorithms]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>Orthogonalization, solution of linear equations, eigenvalues<br />
and eigenvectors.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ State vector evolution]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/ Short study of fuzzy oscillator]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/Tensor.html N-dimensional tensors]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dt>[[Sinc function]]<br />
<br />
</dl><br />
<br />
== Hardware verification ==<br />
<br />
<dl><br />
<dt>[http://www.cse.ogi.edu/PacSoft/projects/Hawk/ Hawk, Specifying and Prototyping Microprocessors]</dt><br />
<br />
<dd>The goal of the Hawk project is to develop a language for<br />
expressing highly abstracted specifications of modern<br />
microprocessor designs, to provide design teams with the ability to<br />
dynamically explore a wide range of design choices. The Hawk<br />
language is Haskell plus the Hawk library.</dd><br />
<br />
<dt>[http://www.cs.chalmers.se/~koen/Lava/ Lava]</dt><br />
<br />
<dd>Lava is a hardware description language based upon<br />
Haskell.</dd><br />
</dl><br />
<br />
== Robots ==<br />
<br />
<dl><br />
<dt>[http://haskell.org/yampa/ Haskell for Vision and Robotics]</dt><br />
<br />
<dd>Frob is an Embedded Domain Specific Language for controlling<br />
robots. It is built using the principals of Functional Reactive<br />
Programming, as developed by Conal Elliott for the Fran animation<br />
system. The current incarnation of Frob is part of the Yampa FRP system.<br><br />
</dl><br />
<br />
== Cognitive Science ==<br />
<br />
(Tools, algorithms, frameworks, paradigms concerning Genetic Programming, Artificial Intelligence, Neural Networks, Fuzzy Logic, Natural Language Processing etc.)<br />
<br />
=== Genetic programming ===<br />
<br />
Dr. Tina Yu's [http://www.cs.mun.ca/~tinayu/index_files/Page426.htm publications], many of them on fruitful applications of Functional Programming in Genetic Programming.<br />
<br />
Deryck F. Brown, A. Beatriz Garmendia-Doval and John A. W. McCall, [http://www.comp.rgu.ac.uk/staff/jm/myPublications.html A Genetic Algorithm Framework Using Haskell]<br />
<br />
=== Natural language processing ===<br />
<br />
Materials with downloadable Haskell sources on linguistic theories concerning Haskell, combinatory logic, etc. More materials and theroetical backgorund can be seen on the [[Linguistics]] page.<br />
<br />
<dl><br />
<br />
<dt>Portals and other huge resorces</dt><br />
<br />
<dd><br />
Peter Ljunglöf's many [http://www.cs.chalmers.se/~peb/pubs.html pubications] on natural language processing, parsing, formal semantics. Many of them uses Haskell, and there are [http://www.cs.chalmers.se/~peb/software.html downloadable] Haskell sources too.<br />
</dd><br />
<br />
<dt>Applicative Universal Grammars</dt><br />
<br />
<dd><br />
* A Haskell application for natural language parsing, based on ''Applicative Universal Grammar'' (AUG) is described in Mark P. Jones', Paul Hudak's and Sebastian Shaumyan's [http://citeseer.ist.psu.edu/jones95using.html Using Types to Parse Natural Language]. The Haskell source code given by the article is full, it can be run by Gofer, and after a few modification, by GHC too (''transpose'' must be explictly imported from standard library module ''Data.List'', and class ''Text'' renamed to ''Show'').<br />
* A more detailed description of the topic of this previous article described in Sebastian Shaumyan and Paul Hudak's [http://citeseer.ist.psu.edu/510871.html Linguistic, Philosophical, and Pragmatic Aspects of Type-Directed Natural Language Parsing]<br />
* Bernard Paul Sypniewski's [http://elvis.rowan.edu/~bps/ling/introAUG.pdf An Introduction to Applicative Universal Grammar] (this link seems now broken, I hope only temporarily). As an article describing what AUG is, see also Shaumyan's [http://citeseer.ist.psu.edu/shaumyan98two.html Two Paradigms of Linguistics: The Semiotic versus Non-Semiotic Paradigm].<br />
</dd><br />
<br />
<dt>Parsing natural languages</dt><br />
<br />
<dd><br />
Gordon J. Pace: [http://www.cs.um.edu.mt/~csaw/CSAW04/Proceedings/08.pdf Monadic Compositional Parsing with Context Using Maltese as a Case Study], see its [http://www.cs.um.edu.mt/~csaw/CSAW04/ context] too<br />
</dd><br />
<br />
</dl><br />
<br />
== Various ==<br />
<br />
<dl><br />
<dt>[http://www2-data.informatik.unibw-muenchen.de/EdComb/ EdComb]<br />
<dd>Editor combinators allow to assemble structure editors compositionally instead of generating them from descriptions, just<br />
as parsing combinators allow to assemble parsers compositionally instead of employing parser generators to generate<br />
parsers from grammar descriptions.<br />
<dt>[http://ls5-www.cs.uni-dortmund.de/~peter/Expander2/Expander2.html Expander2]</dt><br />
<dd>Expander2 is a flexible multi-purpose workbench for rewriting, verification,<br />
constraint solving, flow graph analysis and related procedures that<br />
build up proofs or computation sequences. Moreover, tailor-made <br />
interpreters display terms as 2D structures ranging from trees and<br />
rooted graphs to tables, fractals and <br />
other turtle-system-generated pictures.</dd><br />
<br />
<dt>[http://www.cs.vu.nl/Strafunski/ Strafunski]</dt><br />
<br />
<dd>Strafunski is a Haskell bundle that provides support for<br />
generic programming in Haskell, based on the concept of a<br />
functional strategy. It consists of a combinator library<br />
(StrategyLib) and a precompiler (DrIFT-Strafunski).</dd><br />
<br />
<dt>[http://www.cin.ufpe.br/~haskell/fungen FunGEn - a game engine for Haskell]</dt><br />
<br />
<dd>FunGEn (Functional Game Engine) is a 2D platform-independent<br />
game engine implemented in and for Haskell, using HOpenGL. It is<br />
intended to help game programmers in the game development process,<br />
in a faster and automated way.</dd><br />
<br />
<dt>[http://www.haskell.org/crypto The Haskell Cryptographic Library]</dt><br />
<br />
<dd>A library of cryptographic functions collected together in one package.</dd><br />
<br />
<dt>[http://www.cif.rochester.edu/~sankeld/RSA/ RSA]</dt><br />
<br />
<dd>A number theory library, RSA library, and RSA programs.</dd><br />
<br />
<dt>[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/ Implementations of MD5, SHA1 and DES]</dt><br />
<br />
<dt>[http://www.dcs.gla.ac.uk/~meurig/regexp/ Regular expression library]</dt><br />
<br />
<dd>Inspired by the Perl regular expression library, written purely<br />
in Haskell. Also part of the GHC distribution.</dd><br />
<br />
<dt>[http://www.cl.cam.ac.uk/users/kw217/libs/ Partial v0.1]</dt><br />
<br />
<dd>The Partial library provides a partial order class. It also<br />
provides routines for generating a Hasse diagram from a set and a<br />
partial order. Renderers are provided for the abstract Hasse<br />
diagram representation into LaTeX (via Xy-pic) and into dot, the<br />
format for AT&amp;T's Graphviz tools. Since no horizontal sorting<br />
is done, the Xy-pic output is rather poor at present; dot does a<br />
much better job with its layout optimisation algorithm.</dd><br />
<br />
<dt>[http://web.archive.org/web/*/http://www.numeric-quest.com/funpdf/ fun-&gt;pdf]<em>(since 10/06/2003: via Internet Archive)</em></dt><br />
<br />
<dd>An implementation of a PDF dynamic writer in Haskell.</dd><br />
<br />
<dt>[http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/GetOpt.html GetOpt]</dt><br />
<br />
<dd>A module for GNU-/POSIX-like option handling of commandline<br />
arguments</dd><br />
</dl><br />
<br />
== Collections of libraries ==<br />
<br />
* [http://www.cs.york.ac.uk/fp/software.html Software available from the York FP group]<br />
* [http://repetae.net/john/computer/haskell/ John Meacham's Haskell tools and libraries]<br />
* [http://www.cit.gu.edu.au/~arock/haskell/index.html Andrew Rock's library of useful modules]<br />
* [http://www.informatik.uni-bonn.de/~ralf/software.html Libraries by Ralf Hinze] for data structures, sorting, searching, parsing, pretty printing, numerical algorithms, monads, etc.<br />
* [http://web.archive.org/web/*/http://www.numeric-quest.com/haskell/index.html Collection of Haskell modules] ''(since 10/06/2003: via Internet Archive)'' by Jan Skibinski, Numeric Quest Inc.<br />
* [http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/ Sven's Haskell Libaries] for interfacing to DaVinci, HTML/Cgi, OpenGL; a module for option handling, a Haskell parser, a binary library.<br />
* [http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/ Ian Lynagh's Haskell libraries]<br />
* [http://www.reid-consulting-uk.ltd.uk/projects/index.html Reid Consulting's Libraries and Programs] CMI, TSL, Knit, Greencard, HGL, HSX11, HSWin32<br />
<br />
== Libraries for other languages ==<br />
If you are thinking about designing a new library for Haskell, you<br />
ought to look what has been done in other languages. Here are<br />
standard library definitions for <br />
<br />
<ul><br />
<li>[http://srfi.schemers.org/ Scheme]</li><br />
<br />
<li>[http://cm.bell-labs.com/cm/cs/what/smlnj/doc/basis/index.html ML]</li><br />
</ul></div>Ruizhttps://wiki.haskell.org/index.php?title=Talk:Performance/Data_types&diff=1685Talk:Performance/Data types2006-01-15T17:17:35Z<p>Ruiz: title ok</p>
<hr />
<div></div>Ruizhttps://wiki.haskell.org/index.php?title=Talk:Performance/Data_types&diff=1489Talk:Performance/Data types2006-01-10T13:26:18Z<p>Ruiz: typo in title</p>
<hr />
<div>The title has a typo, the page should be renamed.</div>Ruizhttps://wiki.haskell.org/index.php?title=Performance&diff=1488Performance2006-01-10T13:19:52Z<p>Ruiz: tee -> there</p>
<hr />
<div>Welcome to the Haskell Performance Resource, the collected wisdom on how to make your Haskell programs go faster. <br />
<br />
== Introduction ==<br />
<br />
In most cases it is possible to write a Haskell program that performs as well as, or better than, the same program written in [''insert language here'']. There's a big caveat though: you may have to modify your code significantly in order to improve its performance. Compilers such as GHC are good at eliminating layers of abstraction, but they aren't perfect, and often need some help. <br />
<br />
There are many non-invasive techniques: compiler options, for example. Then there are techniques that require adding some small amounts of performance cruft to your program: strictness annotations, for example. If you still don't get the best performance, though, it might be necessary to resort to larger refactorings.<br />
<br />
Sometimes the code tweaks required to get the best performance are non-portable, perhaps because they require language extensions that aren't implemented in all compilers (eg. unboxing), or because they require using platform-specific features or libraries. This might not be acceptable in your setting.<br />
<br />
If the worst comes to the worst, you can always write your critical code in C and use the FFI to call it. Beware of the boundaries though - marshaling data across the FFI can be expensive, and multi-language memory management can be complex and error-prone. It's usually better to stick to Haskell if possible.<br />
<br />
== Basic techniques ==<br />
<br />
The key tool to use in making your Haskell program run faster is ''profiling''. Profiling is provided by [[GHC]] and [[nhc98]]. There is ''no substitute'' for finding where your program's time/space is ''really'' going, as opposed to where you imagine it is going.<br />
<br />
Another point to bear in mind: By far the best way to improve a program's performance ''dramatically'' is to use better algorithms. Once profiling has thrown the spotlight on the guilty time-consumer(s), it may be better to re-think your program than to try all the tweaks listed below.<br />
<br />
Another extremely efficient way to make your program snappy is to use library code that has been Seriously Tuned By Someone Else. You ''might'' be able to write a better quicksort than the one in <tt>Data.List</tt> but it<br />
will take you much longer than typing <tt>import Data.List</tt>.<br />
<br />
We have chosen to organise the rest of this resource first by Haskell construct (data types, pattern matching, integers), and then within each category to describe techniques that apply across implementations, and also techniques that are specific to a certain Haskell implementation (eg. GHC). There are some implementation-specific tecniques that apply in general - those are linked from the [[Haskell Performance Resource#General_Implementation-Specific_Techniques | General Implementation-Specific Techniques]] section below.<br />
<br />
== Haskell constructs ==<br />
<br />
* [[Perforamnce:Data Types | Data Types]]<br />
* [[Performance:Functions | Functions]]<br />
* [[Performance:Overloading | Overloading]]<br />
* [[Performance:FFI | FFI]]<br />
* [[Performance:Arrays | Arrays]]<br />
* [[Performance:Strings | Strings]]<br />
* [[Performance:Integers | Integers]]<br />
* [[Performance:IO | I/O ]]<br />
* [[Performance:Floating Point | Floating Point]]<br />
<br />
== Traps to avoid ==<br />
<br />
* [[Performance:Space | Space Leaks]]<br />
<br />
== General Implementation-Specific Techniques ==<br />
<br />
* [[Performance:GHC| GHC]]<br />
* [[Performance:NHC98| nhc98]]<br />
* [[Performance:Hugs| Hugs]]<br />
* [[Performance:YHC| YHC]]<br />
* [[Performance:JHC| JHC]]<br />
<br />
== More Information ==<br />
<br />
* There are plenty of good examples of Haskell code written for performance in the [http://shootout.alioth.debian.org/ The Computer Language Shootout Benchmarks]</div>Ruiz