FP around the WorldFunctional Programming


(a word of warning: this page is here for purely historical reasons, and because so many sites still link to it..; it was last updated in 1999)
This page is generated from the functional programming part of my bookmarks. To make it more useful for you, I have added short descriptions to the links (copied from the original sources where this was possible, so please don't blame me for the contents;-). If you know of any URLs related to functional programming, but not mentioned here, or if you find any errors, please send me an email (please start the subject line with FP).

It is nice to see that more and more people find this collection useful. This also means that if you have information on functional programming on the web, you should try to make sure that your pages are reachable via this collection, and that any information included here is correct and up-to-date. What does reachable mean? Well, just imagine you were someone else looking for information about your project/software/etc. in this collection.

Keeping the material here up to date: please don't rely on me picking all the links from comp.lang.functional, and searching for some short descriptions. I happen to read news less frequently these days and may thus miss announcements made only there.

(Claus Reinke - last update: Fri Oct 29 14:12:33 BST 1999 )


Index
  Functional Programming (0)
    Applications (4)
    Collections, FAQ (6)
    Events (0)
      Current (13)
      Past (0)
        1994 (2)
        1995 (7)
        1996 (13)
        1997 (33)
        1998 (33)
        1999 (26)
    Groups (44)
    Languages (0)
      Clean (10)
      Haskell (72)
      Lisp / Scheme (31)
      ML (57)
      Miscellaneous (Functional) Languages (24)
      dedicated to teaching (4)
      multiparadigm (logic/objects/databases) (15)
      scientific computing (9)
    Projects/Topics (20)
    Publications/Bibliographies (18)
    Teaching (5)
    Tools for Functional Programming (0)
      Batch Compilers (4)
      Foreign Language Interfaces (3)
      Graphics (4)
      Interactive Systems (Interpreters) (3)
      Others (10)
      Parsing (3)
      Profiling and Benchmarking (2)
      Tracing and Debugging (1)
total: 476

Functional Programming

Applications

Applications of Functional Programming
Dave Mason
This page is primarily oriented to applications of ``mostly-functional'' programming languages
(Scheme, Lisp, SML, CAML) in commercial or industrial use.
Functional Programming in the Real World
Here is a list of functional programs applied to real-world tasks. The main criterion for being real-world is that the program was
written primarily to perform some task, not primarily to experiment with functional programming. Functional is used in the broad sense
that includes both `pure' programs (no side effects) and `impure' (some use of side effects). Languages covered include CAML,
Clean, Erlang, Haskell, Miranda, Scheme, SML, and others.
Further entries are solicted. To submit an entry, please copy the source of this sample and fill in your own details, then send by email
to the address below. If in doubt whether your application is suitable for the list, please ask.
Impala Home Page
IMplicitly PArallel LAnguage Application Suite
Implementation work using ML
Andrew Appel's collection of projects

Collections, FAQ

Frequently Asked Questions for comp.lang.functional
Graham M. Hutton
Functional Language Resources
Jon Montjoy
Functional Logic Programming
Michael Hanus
Functional programming on the web
Philip Wadler's review
The Dataflow Web Page
John O'Regan
functional programming from FOLDOC
The Free On-Line Dictionary of Computing (FOLDOC) has
various entries related to functional programming. And
if some information should be missing, you may be able
to help keeping the dictionary up-to-date..

Events

Current

FLOPS'99 - 4th Fuji International Symposium on Functional and Logic Programming
Tsukuba, Japan, November 11-13, 1999
ICFP - The International Conference on Functional Programming
ICFP (International Conference on Functional Programming) is a new annual programming language conference sponsored by
the Association for Computing Machinery under the aegis of the ACM Special Interest Group on Programming Languages (SIGPLAN), in
association with Working Group 2.8 of the International Federation of Information Processing (IFIP).
ICFP is devoted to the design, analysis, implementation, and application of functional programming languages. Languages of interest include
established languages such as LISP, Scheme, Sisal, ML, Haskell, and Id, as well as novel designs in the functional programming tradition. ICFP
combines two former biennial conferences: Functional Programming and Computer Architecture (FPCA) and Lisp and Functional Programming
(LFP).
ICFP2000 - International Conference on Functional Programming
LICS - IEEE Symposium on Logic in Computer Science
Logic in Computer Science (LICS) is held annually and aims to attract high quality original papers covering theoretical and practical issues in computer
science that relate to logic in a broad sense, including algebraic, categorical and topological approaches.
MPC2000 - Fifth International Conference on Mathematics of Program Construction
3-7th July 2000, Ponte de Lima , Portugal
PADL'00 - Practical Aspects of Declarative Languages
Boston, Massachusetts, January 17-18, 2000
PEPM'00 - Partial Evaluation and Semantics-Based Program Manipulation
January 22-23, 2000 - Boston, Massachusetts
PLI'00 - Principles, Logics, and Implementations of high-level programming languages
Montreal, Canada, September 18 - 23, 2000
POPL '00 - Principles of Programming Languages
Boston, Massachusetts, January 19-21, 2000
PPDP'00 - Principles and Practice of Declarative Programming
Montreal, Canada, September 20-22, 2000
SBLP'00 - IV Brazilian Symposium on Programming Languages
Recife, Pernambuco, Brazil, May 17-19, 2000
WOID'99 - Workshop on Optimization and Implementation of Declarative Programs
Las Cruces, New Mexico, Nov. 29 - Dec. 4, 1999
wgp'00 - Workshop on Generic Programming
6th July 2000, Ponte de Lima , Portugal

Past

1994

IBFI - Functional Programming in the Real World (Dagstuhl Seminar 9420)
IFL'94 Implementation of Functional Languages
Wednesday 7th - Friday 9th September 1994,UEA Norwich, UK

1995

FPCA95 Call For Papers
June 26-28, 1995, La Jolla, California
FPLE '95
December 4-6, 1995, Nijmegen, The Netherlands
Haskell Workshop: Call for Contributions
June 25, 1995, La Jolla, CA
High Performance Functional Computing (HPFC) 1995
April 9-11, 1995, Denver, Colorado
IFL'95 Implementation of Functional Languages
September 1995, Bastad, Sweden
Springschool
May 24-31, 1995, Bastad, Sweden
The Glasgow GUI Fest 1995
July 24-28, 1995, Glasgow, Scotland, UK

1996

1996 Glasgow Workshop on Functional Programming
Ullapool, Scotland, 8th-10th July, 1996
ACM Summer School (FP & OOP)
September 8-14, 1996, Sobotka, Poland
Argentina'96 1st Workshop on FP
September 12, 1996, Buenos Aires, Argentina
FLIC Functional Languages in the Introductory Computing Curriculum
May 24, 1996, Philadelphia, Pennsylvania
FUN'96 Second Italian Workshop on FP
March 15-16, 1996, Pisa, Italia
Fuji International Workshop on FP & LP
November 1-4, 1996, Shonan Village, Japan
(see other link for up-to-date information)
IFL'96 Implementation of Functional Languages
September 16-18, 1996, Bonn, Germany
JSSST Fuji Workshop on Functional and Logic Programming
Nov. 1-4, 1996. Shonan Village, Japan
MFPW'96 and NZFPDC'96
February 12-15, 1996, Massey University, New Zealand
Multi-Paradigm Logic Programming (MPLP)
September 5-6, 1996, Bonn, Germany
POPL Scheme Workshop
January 21, 1996, St. Petersburg Beach, Florida
Second International Summerschool on Advanced Functional Programming
August 25-30, 1996, Olympia, WA, USA
Workshop on Functional-Logic Programming
January 17-19, 1996, Marburg, Germany

1997

AADEBUG'97 - Automated Debugging
May 26-28 1997, Linköping, Sweden
ACM Summer School (FP&OOP)
ACM Workshop on Functional and Object-Oriented Programming
July 2-7, 1997, Jadwisin near Warsaw (Poland)
AMAST'97 - Algebraic Methodology and Software Technology
13-17 December 1997, Macquarie University, Sydney, Australia
CISE Workshop
July 7-11, 1997, Evergreen State College
Integrating Recent Research Results into the
Undergraduate Curricula:
Software Engineering, Functional Programming, and
Neural Networks
CLaPF'97 - Conferencia Latinoamericana de Programación Funcional
Oct 3-4, 1997, La Plata, Argentina
Copenhagen Logic Summer School '97
August 11-22, 1997, Copenhagen, Denmark
DIKU Summer School on Region-Based Memory Management
Monday 18 August - Friday 22 August, 1997, Copenhagen
DPLE '97 Declarative Programming Languages in Education
September 3-5, 1997, Southampton, England
DSL'97 - Conference on Domain-Specific Languages
October 15-17, 1997, Santa Barbara, California
Declarative Languages Day
last friday of January, the week before the
Australasian Computer Science week
EURO-PAR'97 - European conference in Parallel Processing
August 26-29, 1997, Passau, Germany
EXPRESS'97 - Expressiveness in Concurrency
8-12 September 1997, Santa Margherita Ligure, Italy
FLP'97 - International Workshop on Functional and Logic Programming
Jan. 8th - Jan. 10th 1997, Schwarzenberg (Black Forest), Germany
FSTTCS'97 - FOUNDATIONS OF SOFTWARE TECHNOLOGY AND THEORETICAL COMPUTER SCIENCE
December 18-20, 1997, IIT Kharagpur, India
FUN'97 - Third Italian Workshop on Functional Programming
26-27 March 1997, Bologna, Italy
GPPL'97 - Great Plains Programming Languages Workshop
May 16, 1997, Stillwater, Oklahoma
Glasgow Functional Programming Workshop 1997
15th-17th September, 1997, Ceilidh Place, Ullapool
ICFP'97 WS: Haskell
June 7, 1997, Amsterdam, The Netherlands
ICFP'97 WS: Types in Compilation
June 8, 1997, Amsterdam, The Netherlands
IFL'97 - Implementation of Functional Languages
University of St Andrews, St Andrews, Scotland
Wednesday, Sept 10th - Friday, Sept 12th 1997
ILPS'97 WS: Partial Evaluation
Post-Conference Workshop on
Specialization of Declarative Programs and its Applications
Port Jefferson, NY, October 16-17, 1997
ISSAC'97 - International Symposium on Symbolic and Algebraic Computation
July 21-23, 1997, Maui, Hawaii U.S.A.
International Summer School on Computational Logic
July 29 to August 10, 1997, Marktoberdorf (Germany)
LIRA'97 - Logic and Computer Science
September 1 - 4, 1997 Novi Sad, Yugoslavia
PACT'97 - Parallel Architectures and Compilation Techniques
November 11-15, 1997, San Francisco, California, USA
PASCO'97 - Parallel Symbolic Computation
July 20 - 22, 1997,Maui, Hawaii, U.S.A.
PEPM'97 - Partial Evaluation and Semantics-Based Program Manipulation
June 12-13, 1997, Amsterdam, The Netherlands
PLDI'97 - Programming Language Design and Implementation
Las Vegas, Nevada, 15-18 June 1997
PLILP/ALP/DPLE/HOA '97
1st - 5th September 1997, Southampton, UK
Programming Languages, Implementations, Logics, and Programs
Algebraic and Logic Programming
Declarative Programming Languages in Education
Higher-Order Algebra, Logic and Term Rewriting
POPL'97 General Information
January 15-17, 1997, Paris, France
SAS'97 - International Static Analysis Symposium
Paris, France, 8-10 September 1997
TLCA'97 - Typed Lambda-Calculi and Applications
April 2-3-4, 1997,Nancy, France
TTP'97 - Workshop on Theories of Types and Proofs
September 8 - 19, 1997, Tokyo, Japan

1998

7th International Workshop on Functional and Logic Programming
April 27-29, 1998, Bad Honnef (Germany) (close to Bonn)
AFP'98 - 3rd International Summer School on Advanced Functional Programming
September 13-18, 1998, Braga, Portugal
APL98 Rome - New gems from old roots
27th-31st July 1998, Faculty of Economics, University of Rome "Tor Vergata"
APPIA-GULP-PRODE'98 - Joint Conference on Declarative Programming
Corunna (Spain), July 20-23, 1998.
Advanced course on the Principles of Program Analysis
9.-13. November 1998, Schloss Dagstuhl, Germany
CP'98 Workshop on Set Constraints
Pisa, Italy, October 30, 1998
Coalgebra Workshop
28-29 March, 1998, Lisbon, Portugal
DIKU Summer School '98 -Partial Evaluation: Practice and Theory
June 29 - July 10, 1998
ESSLLI-98 Workshop: LOGICAL ABSTRACT MACHINES
August 17 - 28, 1998, Saarbruecken, Germany
ESSLLI-98: Workshops/Calls for Papers
August 17 - 28, 1998, Saarbrücken, Germany
EXPRESS'98 - Expressiveness in Concurrency
September 7, 1998, Nice, France
FSTTCS - FOUNDATIONS OF SOFTWARE TECHNOLOGY AND THEORETICAL COMPUTER SCIENCE
December 17-19, 1998 Chennai, India
Fuji Symposium on Functional and Logic Programming
April 2-4, 1998, Kyoto, Japan
Glasgow Functional Programming Workshops
Each year we hold a small workshop somewhere in Scotland. The purpose of these workshops is to promote functional programming research at
Glasgow by providing a forum in which new ideas can be discussed in a friendly, informal environment. The workshops are attended by invitees
from other universities and commercial organisations as well as by the Glasgow functional programmers. The proceedings of the workshops are
revised, refereed and published.
HICSS 31 Minitrack on Coordination languages, models, systems
January 6-9, 1998, Hawaii
HLCL'98 - High-Level Concurrent Languages
HLCL'98 Nice, France, September 12, 1998
ICCL'98 - International Conference on Computer Languages
14-16 May 1998, Chicago, USA
ICFP'98 - Functional Programming Contest
The contest begins 17:00 EST, Thursday, August 27, 1998, when the task description will be linked
to this web page, e-mailed to all registered contestants, and posted to a set of relevant newsgroups.
Contestants may submit implementations using a submission form. No submissions will be accepted
after 17:00 EST, Sunday, August 30, 1998. You may, however, submit multiple times; the judges
will use the last submission received before the contest deadline.
ICFP'98 - International Conference on Functional Programming
27-29 September 1998, Baltimore, MD,
ICFP'98 - ML Workshop
September, 1998 - Baltimore, Maryland
IFL'98 - Implementation of Functional Languages
University College London, London, UK,
Wednesday, Sept 9th - Friday, Sept 11th 1998
IFL'98 - Workshop on Parallel Functional Programming
University College London, Sept 8, 1998
ISMM '98 - International Symposium on Memory Management
October 17-19(changed!), 1998, Vancouver, British Columbia, Canada
MPC'98 - Mathematics of Program Construction
June 15 - 17, 1998, Marstrand, Sweden
PLDI'98 - Programming Language Design and Implementation
14-17 June 1998, Montreal, Canada
POPL98 - Principles of Programming Languages
January 19-21, 1998, San Diego, California, USA.
RTA'98 - Rewriting Techniques and Applications
from 30th March to 1st April 1998 in Tsukuba, Japan
RealComp'98 - Tutorial Workshop / Summer School on Real Number Computation
June 19-20, 1998, Indianapolis, Indiana, USA
SAS98 & PLILP/ALP98
Static Analysis Symposium,
Programming Languages, Implementations, Logics and Programs,
Algebraic and Logic Programming,
14--18 September 1998, Pisa, Italy
TIC'98 - Types in Compilation
March 25-27, 1998, Kyoto, Japan
WGP'98 - Workshop on Generic Programming
June 18th 1998, Marstrand, Sweden
WPG'98 - Workshop on Generic Programming
June 18th 1998, Marstrand, Sweden
Workshop on Principles of Abstract Machines
14-18. September 1998 , Pisa, Italy

1999

1999 Haskell Workshop
Friday October 1st, 1999, Paris, France
ACM SAC '99 Coordination Models, Languages and Applications Track
February 28 - March 2, 1999, The Menger, San Antonio, Texas, U.S.A.
ACM SIGAPL APL99
August 10-14, 1999 -- University of Scranton, Scranton, Pennsylvania
AMAST'98 - Algebraic Methodology and Software Technology
January 5-9, 1999, Amazonia, Brazil
CLaFP'99 - 3rd Latin-American Conference on Fuctional Programming
March 8-9, 1999, Recife, Brazil
DPE'99 - Functional and Declarative Programming in Education 1999
29 September 1999
ETAPS'99 - European Joint Conferences on Theory and Practice of Software
Amsterdam, The Netherlands, March 22 ­ 26, 1999
GCSE'99 - First International Symposium on Generative and Component-Based Software Engineering
September 28-30, 1999, Messe Erfurt, Erfurt, Germany
HIPS'99 - High-Level Parallel Programming Models and Supportive Environments
April 12, 1999, San Juan, Puerto Rico, USA
ICFP Programming Contest
ICFP'99 - International Conference on Functional Programming 1999: Information
Paris, France, September 27 - September 29, 1999
IFL'99 - Implementation of Functional Languages
The Netherlands, Tuesday, September 7th - Friday, September 10th 1999
NWPT'99 - The 11th Nordic Workshop on Programming Theory
Uppsala University, Sweden, October 6-8, 1999
PADL'99 - Practical Aspects of Declarative Languages
Jan. 18-19, 1999, Las Cruces, New Mexico, USA
PEPM'99 - Partial Evaluation and Semantics-Based Program Manipulation
January 23-24, 1999 - San Antonio, Texas
PLDI'99 - Programming Language Design and Implementation
Atlanta, Georgia, May 1-4, 1999
PLI 99 - Principles, Logics, and Implementations of high-level of programming languages
Paris, France, September 27 - October 1, 1999
POPL'99 - Principles of Programming Languages
January 20-22, 1999 at the Menger Hotel in San Antonio, Texas, USA.
PPDP99 - Principles and Practice of Declarative Programming
Paris, France, 29 September - 1 October 1999
RTA99 - Rewriting Techniques and Applications
July 2, 1999 to July 4, 1999 in Trento, Italy,
SAS'99 - Static Analysis Symposium
Venezia, Italy, 22-24 september 1999
SFP'99 - 1st Scottish Functional Programming Workshop
August 29th to September 1st, 1999
University of Stirling, Bridge of Allan, Scotland
USENIX - Call for Papers - 2nd Conference on Domain-Specific Languages
October 3-6, 1999, Omni Hotel, Austin, Texas
WAAAPL'99 - Workshop on Algorithmic Aspects of Advanced Programming Languages
Paris, France, September 29-30, 1999
WFLP'99 - 8th International Workshop on Functional and Logic Programming
Grenoble, France, 28-30 June 1999
WoLAM'99 - Workshop on Logical Abstract Machines
14-16 July 1999, Birmingham

Groups

Aachen (RWTH)
Functional Programming
Optimisation/Language Design/Promoting Functional Programming
Berlin (FU)
AG Programmiersprachen und Rechnerarchitektur (in German)
parallel implementation of functional languages
Berlin (TU)
The group ÜBB offers courses and conducts research in the areas of compiler construction and the design of programming
languages. Particular emphasis is laid on the application of algebraic and functional programming languages (Opal) and calculi for
program derivation.
Birmingham
FP Group's FTP-directory
Birmingham Research
School of Computer Science Research Information
Data Structures and Data Parallelism in FPLs/
Mapping Strategies for Parallel Functional Languages/
From Formal Specifications to Functional Programs
Bristol
Functional Programming Research
The Brisk project is concerned with increasing the expressive power of functional languages so
that they can be used to implement complex and reactive `systems' programs more easily.
deterministic concurrency/linking Haskell with C/dynamic linking/
support for program debugging and proof
Burnaby
LP & FP Group at the Simon Fraser University
Chalmers
Functional Programming Group
Corunna
LFCIA - LABORATORY OF FOUNDATIONS IN
COMPUTER SCIENCE AND ARTIFICIAL
INTELLIGENCE
Edinburgh
Functional Programming
Functional prototyping for parallel implementation/
Parallelising compilation of functional programs/
Interpreters from functions and grammars/
Courseware for Standard ML
Edinburgh LFCS ML Club Home Page
The ML Club discusses all aspects of the ML programming language. Currently, research
within the Club members is focussed on an implementation of Standard ML with extensions for
concurrency and distribution. A prototype exists, and we are working on methods of static
analysis to improve its performance. Research is also being done on a supercomputer
implementation of Standard ML and also a portable wide-area, distributed (i.e. Java-like)
version.
Edinburgh LFCS ML-Club Homepage
Frankfurt am Main
Knstliche Intelligenz und Software-Technologie
Glasgow
Functional Programming
IFIP WG 2.8 - Functional Programming
IFIP WG 2.8 - Functional Programming (old link, everything is on the move at Chalmers..)
The purpose of the IFIP Working Group 2.8 (part of Technical Committee 2) is to encourage
the exchange of information between researchers in the design, implementation, and use of
functional programming languages
Italian Working Group on Functional Programming
KAIST
Korea Advanced Institute of Science & Technology, Programming Language Laboratory
implementation of functional languages, parallel architecture for functional languages, type theory, programming environment for SML
Karlsruhe
Prof. Martin Odersky's group
Referentially transparent imperative extensions of functional programming languages/
Axiomatisation of lazy functional programming/
Type Systems/Concurrency/Constraints/
Programming Language Implementation
Kent
Theoretical Computing
Functional Programming/Future functional programming/
Formal support for software engineering/
Implementation of declarative languages/
Distributed Systems
Kiel
Computer Organization and Architecture
functional programming languages and systems/
pi-RED - reduction systems for an applied Lambda-calculus/
SAC - single assignment C supporting n-dimensional arrays /
organizing the concurrent execution of functional programs
Kyoto
inofficial FP group at the Kyoto University
Research Institute for Mathematical Sciences (KURIMS)
Leuven
Language Design and Compiler Construction
Program Specialisation/
Functional Languages and Object Oriented Methods
London
Information Systems Research Group
theoretical foundations for a resource-aware type system/
applicability of functional programming to the genetic programming paradigm/
CLOVER - visual programming language and environment which provides
a fusion of functional and object oriented programming
MSR Research Areas: Advanced Development Tools
Madrid
Declarative Programming Group
The main aim of the Declarative Programming Group is investigate several
themes related to the called Declarative Programming, in special Semantics
aspects related to the integration of Programming Paradigms (Functional, Logic,
Constraints, Object Oriented), and other related subjects.
Massey
Paradigms and Languages Group
The Paradigms and Languages (PAL) Research Group, as its name suggests, is a focus for
research in language design, implementation, evaluation and comparison, and paradigms.
Research in these areas involves other subjects such as formal program development
development, type theory, and run time systems.
Nijmegen
FPL Functional Programming Languages
The research of the Nijmegen research group on functional programming languages focusses for
a great deal around the theory, design, development, implementation and application of
Nijmegen's lazy functional language Clean.
Nottingham
Languages and Programming
Group interests focus on the study of programming languages---including all aspects of
design, semantics, application and implementation---but also extend into logics, formal systems, and
natural languages.
Oregon Graduate Institute
PacSoft - Pacific Software Research Center
The Pacific Software Research Center at the Oregon Graduate Institute of Science &
Technology is a group of faculty, staff and students working on topics relevant to the design,
implementation and maintenance of software systems. Particular areas of interest include
generator based program development, formal methods of program development, program
transformation techniques, functional programming, reflection, and algebraic programming.
Oxford
Declarative Group
The Declarative Group is primarily concerned with declarative and algebraic techniques
in Computer Science. Particular research topics include algebraic specification, term
rewriting, algebraic semantics of the object paradigm, and compiler correctness.
SCOFPIG - Scottish Functional Parallel Interest Group
The aim of SCOFPIG to promote research in functional parallel programming, including but not
restricted to higher-order parallel programming, implicit parallelism, data parallelism, parallel
program derivation and algorithmic skeletons. This will be achieved by fostering contacts between
the various Scottish research groups.
Southampton
The Declarative Systems & Software Engineering (DSSE) Group covers a wide range of
activities, with the common theme of the programming process and programming languages;
the emphasis is on those techniques and languages which encourage a declarative approach.
St Andrews
Stockholm KTH
PARA - Parallel Systems Group
The "PARA" (former "PDP") group at The Dept. of Teleinformatics, KTH
does research about techniques for efficient implementations of declarative languages,
mainly on parallel computers, and about the the clean integration of parallel programming
primitives with declarative languages. We are mainly interested in lazy functional
languages and data parallel programming.
Sussex
Foundations of Computation
TU Berlin
FLP - Functional and Logic Programming
Tasmania
Functional Programming Research Group
Our group is interested in both theoretical and practical problems in all aspects of functional
languages and programming. Current research projects concentrate on the exploitation of
parallelism in functional programs. They include static analysis of functional programs,
investigation of speculative evaluation, a visual dataflow language project, and the design of a
dataflow machine.
Tokio
Research Area of the Information Processing Laboratory (IPL)
Tsukuba
SCORE - Symbolic Computation Research Group
combining functional and logic programming/
term rewriting systems
Type Theory and Functional Programming
Projects: Implementation of a proof editor for type theory.
Programming in type theory. Formalized theory of functional languages.
A theory of programs and specifications.
Warwick
Parallel Functional Programming, Functional Language Implementation, Extending Functional Programming
Yale
Functional Programming
The Yale release of Hugs is our most visible ongoing project, but we usually have a variety of
related research going on, depending on the interests of the current faculty, research scientists,
and graduate students
York
The Functional Programming (FP) research group in the Department of Computer Science at
the University of York, UK, is small but well established. We are interested in a wide range of
topics in FP but specialise in software technology. Projects already undertaken range from
formal reasoning about programs, through novel implementation methods and profiling tools, to
application studies and experiments with variants of functional programming for relational,
embedded, and interactive computing.

Languages

Clean

Clean Game Library
Concurrent Clean - Home Page
Concurrent Clean is a general purpose, higher order, pure and lazy functional programming language for the development of sequential, parallel and distributed real world applications.
Concurrent Clean - Software Repository
Concurrent Clean - Software Repository
FTP Directory: ftp://ftp.cs.kun.nl/pub/SoftwEng.FunctLang/papers/
This directory contains some papers of the Concurrent Clean group in
postscript and/or dvi format. The files have been compressed. They
can be de-compressed with the unix command `uncompress'. The files
should be downloaded in binary mode. Abstracts can be found
in the files with the '.abs' extension.
Functional Programming in Clean
Ana Abrao, Universidad de Uberlandia in Brasil:
I am inaugurating the first of a long list of
unofficial Clean home pages, and I will appreciate your contribution to the success of this home page. The contribution may be in
the form of programs, technical hints (like "How to link C code with Clean"), tutorials, etc. I will also be very happy if you just mail
me messages saying that you liked my work. If I receive many such messages, I may be able to convince my sponsors to keep
things going.
Hilt - HIGH LEVEL SOFTWARE TOOLS B.V.
HILT was founded in 1996 to exploit and support the functional programming language CLEAN. This sophisticated programming languages is the result of many years of research
of the Nijmegen Functional Programming Research Group.
Index of /pub/Clean
Object I/O library version 1.0 for Macintosh
This distribution contains the new I/O library: the Object I/O library for the Clean language. It is a
complete redesign of the 0.8 I/O library and adds many new concepts. Please note that we have
refered to this new library in earlier notes as the 1.0 I/O library. We decided to name this system
the Object I/O system because of its more powerful capabilities to construct and compose
interactive objects.
The Object I/O library is currently available only for Macintosh (PowerPC & 68k). We are now
working on a port to Windows (95/NT) to see if the design decisions regarding portability are
valid.
The Clean IDE project
IDE stands for Integrated Development Environment. It is the program in which you can write
your Clean programs. It roughly consists of an editor and a project manager. The editor has some
notion of what a Clean program looks like and can therefore aid you in several ways. For example,
it is possible to find the definition of an identifier by pressing a key combination.
An IDE already exists, but some features are missing and its behaviour is not always clear. The
aim of the project is to build a new IDE, which is more powerful, robust and easier to extend. It
will be written in Clean using the new IO library (1.0), which will become available for the
Macintosh in October 1997. The IO library is currently being ported to Windows 95/NT. The
sources of the new Clean IDE will be made public and can serve as a large example program.

Haskell

A Compiler Toolkit in Haskell
A GTK+ Binding for Haskell
AgentScript
Collection of Haskell modules
Jan Skibinski, Numeric Quest Inc., 1998.09.18
This is a collection of Haskell modules that we have developed for one reason or another. Some of them are standalone
applications and some other ones are the basic library modules.
Some of them are designed as literate modules, meaning that a code is indicated by some special way (here >) and the rest
is a descriptive text -- either plain ascii or formatted somehow. We choose web readable HTML format.
Compilation to Java Virtual Machine Code
Connection Machine Haskell Project
Data Parallel Haskell
Directory of /pub/haskell/glasgow
ENTRE - Explicit Naive Term Rewriting Engine
Entre is an interpreter for a toy functional programming language. It's main purpose is to
evaluate expressions in as straight-forward a manner as possible, showing each and every
step, so that the user can follow the computation.
Entre is written in Haskell and compiles with the Glasgow Haskell compiler for any UNIX
system where GHC runs. Entre can also be run within the HUGS interpreter environment (on
UNIX not PCs).
Edison - A Library of Efficient Data Structures
I am pleased to release a library of efficient data structures for Haskell, named Edison both in honor of Thomas Alva Edison and for the mnemonic value of EDiSon
(Efficient Data Structures). I intend to eventually release a version of the library for Standard ML. Other future possibilities include O'Caml, Scheme, and Java.

The intention of the library is to provide several families of abstractions, each with multiple implementations, along with guidance on how to choose the best
implementation for your particular application. The families of abstractions I have in mind initially are sequences, finite maps, priority queues, and sets/bags.
Embracing Windows - a simple graphical interface for Hugs
Embracing Windows is a framework for developing graphical user interfaces (GUIs) in a lazy
functional language. The framework currently runs under Windows 95 using a modified version
of Hugs 1.3.
Equational Reasoning Assistant (ERA)
Era v2 Home Page
There's no code to download at the moment. The best I can offer you is a look at the manual (html) (postscript) (which also details
the main features of Era) and a link to the homepage of the prototype version of Era (written by Andy Gill)
FRAN - Functional Reactive Animation
Conal Elliott (microsoft research)
Fudgets
Graphical User Interface Toolkit
Fudgets is primarily a Graphical User Interface
Toolkit for the functional programming language Haskell and
the X Windows system. Fudgets also makes it easy to
create client/server applications that communicate via the
Internet. The latest release of the library was version h12 on
6th November, 1996.
Fudgets - Demo Form
Functional DSP
GHC (very old)
The Glasgow Haskell Compiler
Gif writer
Glasgow Parallel Haskell
Glasgow Parallel Haskell, or GPH for short, is a non-strict parallel functional programming language. GPH is an extension of Haskell, adding just two new primitives to
the language, namely, a form of parallel composition par, and sequential composition seq. With judicious use of par and seq it is possible to express how a program
should be evaluated in parallel.
Glasgow Parallel Haskell
Glasgow Parallel Haskell, or GPH for short, is a non-strict parallel functional programming language. GPH is an extension of Haskell, adding just two new primitives to
the language, namely, a form of parallel composition par, and sequential composition seq. With judicious use of par and seq it is possible to express how a program
should be evaluated in parallel.
Glenn Strong : Epoc Hugs
Goffin - Haskell for Parallel and Distributed Programming
Goffin is an extension of Haskell with combinators from concurrent constraint programming. These
combinators constitute a co-ordination sublanguage that allows the specification of the
co-ordination portion of parallel and distributed programs. The computational portions of these
programs are expressed purely functional. The distinguished feature of Goffin is that the semantic
properties of the functional base language Haskell are preserved; in particular, the extension
retains referential transparency. Although, the development of Goffin initially focused on
tightly-coupled multiprocessors, some extensions that are required for applications executing on
loosely-coupled systems have been proposed recently.
Goffin is an extension of Haskell with combinators from concurrent constraint programming. These
combinators constitute a co-ordination sublanguage that allows the specification of the
co-ordination portion of parallel and distributed programs. The computational portions of these
programs are expressed purely functional. The distinguished feature of Goffin is that the semantic
properties of the functional base language Haskell are preserved; in particular, the extension
retains referential transparency. Although, the development of Goffin initially focused on
tightly-coupled multiprocessors, some extensions that are required for applications executing on
loosely-coupled systems have been proposed recently.
GranSim Home Page
This page describes GranSim, a simulator for the parallel execution of Glasgow Parallel Haskell (GPH) programs. Haskell is a non-strict,
purely-functional programming language. GPH extends Haskell with annotations for sequential (seq) and parallel (par) composition.
GranSim is based on the Glasgow Haskell Compiler (GHC) and available from the anonymous FTP server (Version 0.29 of GHC). Basically,
GranSim is just a special setup of GHC, similar to the parallel setup (GUM). In the GranSim setup the compiler instruments the generated code.
This information is used by the runtime-system to perform an event driven simulation. The actual graph reduction code is the same as for
sequential compilation with GHC. Therefore, all optimisations in GHC can be used for GranSim, too. For now, GranSim only been tested with the
Haskell 1.2 front-end of GHC.
Graph Visualization with daVinci
Green card: a foreign-language interface for Haskell
This document describes GreenCard, a foreign-language interface for the non-strict, purely functional language
Haskell.
HBC
The Chalmers Haskell compiler
HaSQL Project
This is work at progress. Use it on "AS IS" basis only.
HaSQL is a Haskell to ODBC interface. HaSQL allows Haskell program to run SQL queries against ODBC compliant database. Queries with parameters are supported. Data is
retrieved from database as a lazy list. This package relies on Green-Card - Haskell to C interface. This project is submitted as my Masters project at the Saint-Petersburg State
Technical University, Russia. Master thesis is available in russian only yet :)
HaXml: Haskell and XML
Haggis
graphical user interface framework
Haggis is a graphical user interface framework for the functional language Haskell, running under
the X Window system. It is currently being developed using the Glasgow Haskell Compiler with
its concurrent extensions to achieve more comfortable interaction with the outside world.
Happy
Parser Generator system
Haskell 1.3 Monadic I/O Definition
Haskell 98
Haskell 98: Post ICFP summary
Haskell Companion - Frame
Haskell Extensions Page
Haskell Style for LaTeX2e
Setting large pieces of code in verbatim is ugly and makes it difficult to uses subscripts or set comments in a proportional type face.
On the other hand, the use of, for example, TeX's math mode requires additional macros to achieve proper kerning in multi-letter
identifiers and to typeset application by juxtaposition. The Haskell style provides environments and macros that simplify setting Haskell
programs in LaTeX. While the style is specifically geared towards Haskell, it should also be useful for other functional languages like
ML or Nesl. The documentation of the style gives an impression of the look of the produced layout
Haskell for Vision and Robotics
Haskell++
Haskell++ is an `object oriented' extension of Haskell, which supports a form of inheritance via
extended class and instance declarations. In addition to ordinary Haskell classes, the
Haskell++ programmer can declare `object classes' whose instances can inherit method
definitions from one another. For example, an object class Point may have instances at types
VanillaPoint and ColourPoint, and the ColourPoint instance may inherit some of its methods
from the VanillaPoint instance. Haskell++ is described in detail in Haskell++: An
Object-Oriented Extension of Haskell, a joint paper with Jan Sparud which was presented at
the Haskell Workshop in June '95.
HaskellDb: About
HaskellDirect
HaskellDirect is an IDL compiler for Haskell, helping the Haskell programmer
Hugs
the Haskell User's Gofer System,
a functional programming system based on Haskell
Hugs (Yale release)
the Haskell User's Gofer System
Jakob Axelsson's Haskell programs
Lambada
The Lambada framework developed by Sigbjorn Finne and Erik Meijer allows a fluid integration of Haskell and Java programs using JNI and H/Direct.
The current release does not offer much tool support to access Java classes from Haskell yet, but the library is explicitely designed to make it
convenient to manually create Haskell stubs for calling Java and vice versa. Of course this doesn't buy you much when you have to translate large
classes, but help is underway as we are teaching the H/Direct compiler to dance the lambada.
MAG - a small transformation system for Haskell
MAG is a small transformation system for a subset of Haskell. It was written as a teaching tool for the 3rd
International Summer School on Advanced Functional Programming. One of its most innovative features is a
matching algorithm for lambda expressions, the one-step matching algorithm. MAG is also of interest because it makes
use of the language implementation tools (for parsing, pretty-printing and semantic analysis) now under
development at Utrecht University.
NHC13 Nearly a Haskell 1.3 Compiler
O'Haskell
PolyP - a polytypic programming language
Haskell extended with polytypic functions
Reactive Behavior Modeling in Haskell
Regular Expressions in Haskell
Software Collection at Utrecht University
The software on this page has been written by members and previous members of the computer science department of Utrecht University. The Haskell sources should work both in version 1.3 and
1.4.
Standard Haskell
Haskell will be frozen: the final design will be called Standard Haskell and the
language will not be changed again. Of course language experiments will continue, and no
doubt continue to be based on Haskell, but designers are encouraged to use different names so
that `Haskell' refers to a stable language that can be taught and used with confidence.
Standard Haskell
Haskell will be frozen: the final design will be called Standard Haskell and the
language will not be changed again. Of course language experiments will continue, and no
doubt continue to be based on Haskell, but designers are encouraged to use different names so
that `Haskell' refers to a stable language that can be taught and used with confidence.
The Algebraic Domain Constructor DoCon
DoCon
a computer algebra program written in a pure functional language
Haskell (version 1.4)
The D????e Homepage
Derive is a type sensitive preprocessor for Haskell 1.3/1.4. It parses a Haskell module for
structures (data & newtype declarations) and commands. These commands cause rules to be fired
on the parsed data, generating new code which is then appended to the bottom of the input file.
These rules are expressed as Haskell code, and it is intended that the user can add new rules as
required.
Derive is written in Haskell 1.4, and can be compliled using GHC 2.2 or higher, or interpreted
using Hugs 1.4
The Drops Juggling Animator
The Functional Programming Language Haskell
Haskell Information at Aachen University of Technology
The Gentle Introduction to Haskell, Version 1.4
The Glasgow Haskell Compiler
The Glasgow Haskell Compiler (old)
The Glasgow Haskell Compiler is a robust, fully-featured, optimising compiler for
Haskell 98, GHC compiles Haskell to either native code or C. It implements
numerous experimental language extensions to Haskell 98; for example: concurrency, a
foreign language interface, multi-parameter type classes, scoped type variables,
existential and universal quantification, unboxed types, exceptions, weak pointers, and
so on. GHC comes with a generational garbage collector, and a space and time
profiler.
The Habitat browser
source code browser for hbc
The Haskell 1.4 Report
The Haskell Home Page (main site, Yale)
Now merged with the Aachen collection, should be the right place for most of the Haskell-specific entries here
The Haskell Home Page (mirror site, Aachen)
The Haskell Home Page (mirror site,St.Andrews)
The Haskell Wish List
The lx home page
This is a preliminary release of lx, a Lex-like package for generating Haskell scanners. The
resulting scanners can be used in Haskell 1.2 and 1.3 programs.
TkHaskell Home Page
hmake - a make tool for Haskell programs
pH - a parallel Haskell
The pH language is is a parallel, eagerly-evaluated variant of Haskell with syntactic provisions for loops, barriers, and I- and M- structure
storage. The eager evaluation model of pH is similar to that of Id; the current version of the pH compiler shares a back end with the Id compiler,
producing code for the Monsoon dataflow machine. The front end of the pH compiler is a modification of hbcc, an ordinary Haskell compiler
developed by Lennart Augustsson. Optimizations have been added to parallelize list generation and traversal, while existing optimizations have
been weakened somewhat so that they behave properly in the presence of side effects. The pH Prelude is largely identical to the Haskell Prelude,
permitting many programs to compile without modification in either Haskell or pH. Functions which deal with infinite data structures (such as
enumFrom) have been eliminated, and the error behavior of other functions (such as array) have been modified slightly. In addition, pH provides
Prelude code for parallel list operations, I-structures, and M-structures. A variation on State Transformers will permit state-manipulating
programs written in a subset of pH to be run under Haskell simply by incorporating additional code. It is hoped that by retaining much of the Haskell
language, pH will allow direct parallelization of existing Haskell programs, and permit better comparisons between lazy and eager evaluation
models.
wikiwiki server for Haskell

Lisp / Scheme

An Introduction and Tutorial for Common Lisp
This document provides a small set of resources and references on Common Lisp. It was
prepared for students in the Part-Time MS Program in Computer Science at the Johns Hopkins
University. However, much of the material is generally applicable. This document is evolving.
Please send corrections/suggestions to Marty Hall (hall@apl.jhu.edu). The original of this
document is at http://www.apl.jhu.edu/~hall/lisp.html.
An Introduction to Scheme and its Implementation - Table of Contents
a draft of most of Paul Wilson's book-in-progress,
Bigloo - a practical Scheme compiler
Book: Common Lisp the Language, 2nd Edition
Brief Lisp History
The following information is derived from the history section of dpANS Common Lisp. Lisp is a
family of languages with a long history. Early key ideas in Lisp were developed by John
McCarthy during the 1956 Dartmouth Summer Research Project on Artificial Intelligence..
Common Lisp HyperSpec (TM)
an HTML document derived from the
ANSI Common Lisp standard (X3.226-1994)
Common Lisp Hypermedia Server (CL-HTTP)
full-featured server for the Internet Hypertext Transfer Protocol
ECLIPSE
an ANSI Common Lisp, a Lisp-to-C translator,
and a Lisp library for C programmers
(by Elwood Corporation)
Early LISP History (1956-1959)
by Herbert Stoyan University of Erlangen-N"urnberg Lehrstuhl f"ur K"unstiche Intelligenz Am
Weichselgarten 7, D-91058 Erlangen Germany
This paper describes the development of LISP from McCarthy's first research in the topic of
programming languages for AI until the stage when the LISP1 implementation had developed
into a serious program (May 1959). We show the steps that led to LISP and the various
proposals for LISP interpreters (between November 1958 and May 1959). The paper contains
some correcting details of our book (32).
FreeLisp(TM)
simplified version of LispWorks
(by Harlequin)
INTERACTIVE LISP TUTORIAL
LISP TUTOR is a WWW tutorial that helps the student in the process of learning the LISP
language, which seems a little hard at the beginning. It consists of several chapters that
collects the most important features and in each feature interacts with the student giving him
an immediate feedback about his learning process. At the end, the tutorial presents an
On-Line TEST to be answered by the student and returns the corresponding grade when the
student finishes and hands in the test.
IU Scheme Educational-infrastructure Project
To develop software and courseware to support the use of Scheme in undergraduate education.
Kali Scheme
Kali Scheme is a distributed implementation of Scheme that permits efficient transmission of
higher-order objects such as closures and continuations. The integration of distributed
communication facilities within a higher-order programming language engenders a number of
new abstractions and paradigms for distributed computing. Among these are user-specified
load-balancing and migration policies for threads, incrementally-linked distributed
computations, and parameterized client-server applications. Kali Scheme supports
concurrency and communication using first-class procedures and continuations. It integrates
procedures and continuations into a message-based distributed framework that allows any
Scheme object (including code vectors) to be sent and received in a message.
Kawa, the Java-based Scheme system - Table of Contents
Lisp FAQ
Lisp History
This is a HTML set concerning Lisp history
The following material is available:
A paper on the early history of Lisp
A paper on the influence of McCarthy to Lisp
A LISP bibliography
Lisp museum: searchable biography
Lisp in Germany
Lisp on the Net
Lisp: Good News Bad News How to Win Big
Richard P. Gabriel:
Lisp has done quite well over the last ten years: becoming nearly standardized, forming the basis of a commercial sector, achieving excellent
performance, having good environments, able to deliver applications. Yet the Lisp community has failed to do as well as it could have. In this paper
I look at the successes, the failures, and what to do next.
LispWorks®
Common Lisp Development Environment
(by Harlequin)
Rice Programming Languages Group Software Packages
The Rice programming languages group has produced several software products over the past
few years. Some of these are listed below. The links attached to the names of the packages
lead to description pages or to the actual package itself.
Scheme 48 home page
Scheme Requests for Implementation
Scheme Shell
The Association of Lisp Users
The Internet Scheme Repository
The L System - Lisp for Embedded Systems
With the L System it is now possible to use Common Lisp as a development and run time
language in real time embedded systems!
The L System implements a development system for a highly efficient dialect of Common Lisp
which includes multi-threading extensions. The two major components of the L System are the L
cross compiler and the run time system. With these two pieces it is possible to develop code on a
host system and download it to the target system. The run time environment implements the
dynamic aspects of Common Lisp and allows for interactive modification and monitoring of the
target system during program execution. L code can be run as compiled executables or interpreted
on the fly.
The Scheme Programming Language
The Scheme Underground
Welcome to schemers.org!
This is a collection of resources for the Scheme programming language. It is currently sponsored by Rice PLT, and is hosted on
the Rice University Department of Computer Science Web server. The pages were built and are maintained by Shriram Krishnamurthi, with help from
other members of Rice PLT, most notably Matthias Felleisen, Paul Steckler and Yan-David Erlich. Comments, suggestions and contributions of material
are always welcome. Please contact us at scheme@schemers.org.
lisp.org
(not yet available)

ML

A Gentle Introduction to ML
Abstract for "Principles and a preliminary design for ML2000"
COMP.LANG.ML FAQ
(claims to be out of date)
CRML
Compile-time Reflective ML
Caml-Flight
Caml-Flight is a parallel extension of INRIA's Caml-Light language featuring explicit static
processes, explicit communications, deadlock-freedom and determinism.
Changes to the Language Definition
Comp.Lang.ML FAQ [Monthly Posting]
Comparison of SML/NJ 0.93 and SML/NJ 109.19 (SML96) Top-Level Environments
Concurrent ML
CoreML for Java
A simple Java interpreter for CoreML. The language is based on Milner's extension of the
simply typed lambda calculus with let polymorphism. Integer constants have also been
included, plus two operations on this base type.
EML Kit
The EML Kit aims to be (the basis and test-bed for) a comfortable framework for the formal development of programs, using the
Extended ML language, formalism and methodology.
Ensemble
toolkit for building distributed applications
in Objective Caml
Extended ML
Extended ML (EML) is a framework for specification and formal development of Standard ML
(SML) programs. EML specifications look just like SML programs except that axioms are allowed
in signatures and in place of code in structures and functors.
FAQ Caml
File: sml, Node: Top
File: sml-lib, Node: Top
Harlequin MLWorks®
programming environment for Standard ML
Index of /dist/ml
Standard ML of New Jersey Version 0.93
(by AT&T)
Introduction to Standard ML
Robert Harper
These notes are intended as a brief introduction to Standard ML (1997 dialect) for the experienced
programmer. They are intended as supplementary reading, rather than as a self-standing
textbook. For a self-contained treatment of the use of Standard ML, see Lawrence Paulson, ML
for the Working Programmer (Second Edition), MIT Press, 1997, or Jeffrey Ullman, Elements of
ML Programming, Prentice-Hall, 1994.
Jacques Garrigue : FIML
Functional and Imperative ML
Larry Paulson's FTP Area (Isabelle,..)
ML'94 (INRIA site)
1994 ACM SIGPLAN Workshop on ML and its Applications
ML3000 Home Page
MLWorks Resources
MLWorks and Standard ML links at Harlequin
MLj 0.2
MLton
MLton (formerly called smlc) is a whole-program optimizing compiler for the Standard ML programming language.
MLton runs on X86 machines under Linux. It produces C code as output and requires gcc to produce the final executable.
Installation requires 30M of disk space and 64M RAM.
MMM Browser Home Page
WWW browser written in CAML Special Light
Moby home page
Moscow ML
a light-weight implementation of Standard ML
Objective Caml
the latest implementation of the Caml dialect of ML
Objective Label and LablTk
An extension to Objective Caml allowing
the use of labeled and optional arguments.
Comes with LablTk, a labelized interface
to Tcl/Tk, and LablBrowser, a source and
compiled interface browser
On-line Information about Standard ML
CMU Fox project doku on SML
Papers on Poly/ML
Preface: Various papers and research documents have been written while the Poly/ML project
was underway and now that the project is completed it seemed appropriate to combine them
into a single document. Some of these papers have been published, while others were written
simply to help clarify thoughts on a particular subject.
Persimmon MLJ 0.1
Persimmon MLJ is a compiler for Standard ML which produces Java bytecodes. It compiles the functor-free subset of the new SML'97 language plus some new language
extensions for straightforward interlanguage working with Java. It produces compact standalone compiled code which can be run on any computer with a Java Virtual Machine.
Poly/ML
commercially supported Standard ML
with persitent store
(by Abstract Hardware Limited)
SML Basis Library
SML Basis Library (Denmark mirror)
SML#
an extension of Standard ML with
polymorphic record operations
SML/E Home Page
SML/E is a modification of the SML/NJ compiler to help the programmer to diagnose the reasons that certain types where inferred.
It essentially opens up the "black box" of type inference to the programmer, with the intention of helping to diagnose type errors.
SML/NJ Library
Standard ML Basis Library
Standard ML of New Jersey (bell)
SML '97
Standard ML of New Jersey (princeton)
Andrew Appel's SML page
The Caml language
The EML Kit
The EML Kit aims to be (the basis and test-bed for) a comfortable framework for the formal
development of programs, using the Extended ML language, formalism and methodology.
The HEVEA Home page
The ML Kit
The ML Kit Project
slightly different URL..
The Metalanguage ML
the metalanguage of the HOL theorem proving system
The TILT Compiler Project
The TILT (or TIL-Two) Compiler Project is a joint effort between researchers
at Cornell and Carnegie Mellon. The goal of the project is to produce a
compiler for the ML-family of programming languages (SML'97, Caml Special
Light, and KML) that takes advantage of types throughout compilation in
order to produce better code without compromising safety or correctness.
The V6 Web Engine
personal WWW proxy written in Objective CAML
The sml_tk home page.
Visual ML
eXene
fxp - a Functional XML Parser
ml.syntax on Thu May 4 08:03:54 PDT 1995
paraML
The main objectives of the project are:
The design of clean extensions to the language ML for coarse grain concurrency on distributed memory multicomputers.
Theoretical specification of these extensions.
The actual implementation of paraML on the AP1000; preferably using MPI as the communication substrate.
Performance measurement and enhancement of the paraML system.
The methodology of using paraML for building other parallel programming systems and for general applications.

Miscellaneous (Functional) Languages

Cayenne
Charity
Charity is a categorical programming language currently being developed by The Charity
Development Group in The Department of Computer Science at The University of Calgary,
Canada.
EQUALS
Eden
The functional concurrent language Eden is an extension of the lazy
functional language Haskell by constructs for the explicit specification of dynamic
process systems. It employs stream-based communication and is tailored for
distributed memory systems. Eden supports and facilitates the task of parallel and
concurrent programming.
Elegant
Elegant started as a compiler generator based on
attributed grammars (the name stands for Exploiting Lazy
Evaluation for the Grammar Attributes of Non-Terminals)
and has grown into a full programming language. It has
been inspired by the abstraction mechanisms found in
modern functional languages, yet Elegant is an
imperative language (Elegant has assignment).
Erlang
Erlang is a functional programming language with processes that is suitable for implementing
large systems with soft real time demands. The main advantages of Erlang are robustness,
speed of development and reduced maintenance.
Erlang Systems
Erltc
The Erltc project, which aims to bring a
type system to the concurrent
functional programming language Erlang.
HOP
HOP is a functional language with "name-based" interaction between software components:
parameters of functions are not identified by their position, as in usual functional languages, but
by their name. This makes it possible to experiment with various forms of modularity and
object-oriented constructs.
HOPS -- The Higher Object Programming System
HOPS is a graphically interactive programming and program transformation system based on term
graphs developed since the mid-eighties in a group lead by Gunther Schmidt.
High-Performance Erlang
The Computing Science Department of Uppsala University has started a project aimed at
efficiently implementing the concurrent functional language Erlang. We are sponsored by
Ericsson, NUTEK and TFR.
The Computing Science Department of Uppsala University has started a project aimed at
efficiently implementing the concurrent functional language Erlang. We are sponsored by Ericsson,
NUTEK and TFR. We have joined ASTEC.
High-Performance Erlang
The Computing Science Department of Uppsala University has started a project aimed at
efficiently implementing the concurrent functional language Erlang. We are sponsored by
Ericsson, NUTEK and TFR.
The Computing Science Department of Uppsala University has started a project aimed at
efficiently implementing the concurrent functional language Erlang. We are sponsored by Ericsson,
NUTEK and TFR. We have joined ASTEC.
Introduction to the FX Programming Language Project
(actually only a collection of papers)
effects/effect inference
JOY
The language Joy is a purely functional programming language. Whereas all other functional
programming languages are based on the application of functions to arguments, Joy is based on the
composition of functions. All such functions take a stack as argument and produce a stack as
value. Consequently much of Joy looks like ordinary postfix notation. However, in Joy a function
can consume any number of parameters from the stack and leave any number of results on the
stack. The concatenation of appropriate programs denotes the composition of the functions which
the programs denote. One of the datatypes of Joy is that of quoted programs, of which lists are a
special case. Some functions expect quoted programs on top of the stack and execute them in
many different ways, effectively by dequoting. So, where other functional languages use
abstraction and application, Joy uses quotation and combinators -- functions which perform
dequotation. As a result, there are no named formal parameters, no substitution of actual for
formal parameters, and no environment of name-value pairs. Combinators in Joy behave much like
functionals or higher order functions in other languages, they minimise the need for recursive and
non-recursive definitions. Joy has a rich but simple algebra, and its programs are easily
manipulated by hand and by other programs.
Mondrian
In the preface of the Haskell report the hope is expressed that extensions or variants of the language appear that incorporate experimental features. The scripting
language Mondrian is such an experiment. Mondrian evolves from Haskell by deleting some of Haskell's more complicated constructs and adding a few simple
new ones.

The current version of Mondrian is just the core subset of Haskell. The plan is to let the language grow by demand and experimentation. The first extension we
are planning to add are implicit arguments, as are already available as an extension to Hugs98.

At the implementation level an interesting aspect of Mondrian the fact that we use Java as the target language, borrowing as much as possible from Java. The
only aspect of Mondrian that we make explicit in the translation to Java is call-by-name and sharing. In fact, one one can say that Mondrian is a domain specific
language embedded in Java!
The Haskell dialect Mondrian is designed using the explicit philosophy of keeping things
simple and consistent. Mondrian generalizes some of Haskell's (too) complex constructs, and
adds a few simple new ones. This results in a small, intuitively comprehensible language with
an object oriented flavor. If Haskell is the C++ of functional programming, then Mondrian is the
Java of functional programming.
Mondrian
In the preface of the Haskell report the hope is expressed that extensions or variants of the language appear that incorporate experimental features. The scripting
language Mondrian is such an experiment. Mondrian evolves from Haskell by deleting some of Haskell's more complicated constructs and adding a few simple
new ones.

The current version of Mondrian is just the core subset of Haskell. The plan is to let the language grow by demand and experimentation. The first extension we
are planning to add are implicit arguments, as are already available as an extension to Hugs98.

At the implementation level an interesting aspect of Mondrian the fact that we use Java as the target language, borrowing as much as possible from Java. The
only aspect of Mondrian that we make explicit in the translation to Java is call-by-name and sharing. In fact, one one can say that Mondrian is a domain specific
language embedded in Java!
The Haskell dialect Mondrian is designed using the explicit philosophy of keeping things
simple and consistent. Mondrian generalizes some of Haskell's (too) complex constructs, and
adds a few simple new ones. This results in a small, intuitively comprehensible language with
an object oriented flavor. If Haskell is the C++ of functional programming, then Mondrian is the
Java of functional programming.
OPAL
The OPAL project is concerned with research into a programming environment in which
advanced language concepts and formal development methods can be used for creating
production-quality software. At the core of the project is the algebraic programming language,
OPAL, which integrates both concepts of algebraic specification and functional programming.
An ever-expanding set of tools supporting the language constitutes the OPAL compilation
system OCS.
PLAN: A Programming Language for Active Networks
PLAN is a resource-bounded functional programming
language that uses a form of remote procedure call to
realize active networking.
Pizza - A substantial companion to Java
A small, fast and free compiler for an important
superset of the Java programming language.
(adds Parametric polymorphism, First-class functions,
Class cases and pattern matching)
TK-Gofer
TkGofer is a library (a prelude file) of functions for writing graphical user interfaces in the
functional language Gofer. The library provides a convenient, abstract and high-level way to
write window-oriented applications. The implementation rests on modern concepts like
monads and constructor classes. For the implementation of graphical IO we added a few
primitives to the standard Gofer interpreter to communicate with the graphical toolkit Tcl/Tk.
TkGofer is a library for writing graphical user interfaces in the lazy
functional language Gofer. The version currently being distributed is Version 2.0.
The FISh Homepage
FISh is a new array programming language that combines (and extends) the
EXPRESSIVE POWER of functional programming with the EFFICIENT EXECUTION
of imperative, or procedural, programming by performing STATIC SHAPE ANALYSIS
on all programs. This shape computation reduces higher-order functional
programs to simple imperative forms, i.e. F - Sh = I. Conversely, FISh
works best when functions are constructed from imperative procedures
and shape functions, as recommended by the slogan that gives the language its name.
Functional = Imperative + Shape. FISh execution speeds on typical array problems
are several times faster than other higher-order, polymorphic languages.
The TOY System
TOY is an experimental system for functional logic programming
The functional programming language Hope
Hope is a small functional programming language, with polymorphic typing, algebraic types, pattern matching and higher-order functions. The version here is a fully lazy
interpreter.
The pHluid System
The pHluid system is a research implementation of the Id programming language, with future plans for a front-end for pH, a parallel dialect of the
Haskell programming language.
The pHluid system implementation is done mostly at Digital's Cambridge Research Laboratory, and is freely available with sources for research
and non-profit use. It is targeted at standard Unix workstation hardware.

dedicated to teaching

A Normaliser for pure and typed lambda-calculus
This program provides a useful environment to write programs in pure or typed
lambda-calculus. Given a term, the program will compute and print its normal form. This
means that, unlike most functional languages, computation is done under function abstractions
(or lambdas).
Lambda Calculus Interpreter
A simple lambda calculus interpreter, using call-by-name semantics. The language is pretty
much Church's simple untyped lambda calculus, the only concession for usefulness is the
addition of numbers.
Pico
The fundamental aim of Pico is to introduce the essentials of computer programming to
undergraduate students in the basic sciences other than computer science. In conceiving Pico we
were strongly inspired by the approach used in Abelson and Sussman's book "Structure and
Interpretation of Computer Programs" and equally strongly repulsed by the various standards
efforts to teach computer programming at the high-school and academic level. Pico can actually be
viewed as an effort to render Scheme palatable and even enjoyable to people unable or unwilling to
make the intellectual effort necessary to grasp its elegance and power. We do so by adapting
Scheme's syntax (significantly) and semantics (subtly) in order to use what (little) understanding
the novice science student has of (specification) languages.
The DrScheme Home Page
DrScheme is a graphical environment for developing Scheme programs. DrScheme's features
include: source text highlighting of syntax errors, source text highlighting of run-time errors,
support for multiple levels of Scheme from beginner to advanced, interactive and graphical static
analysis, an object system, simple graphics utilities, a graphical user interface development library
DrScheme runs under X Windows, Microsoft Windows, and MacOS.
Future extensions to DrScheme will include: a complete run-time debugger/stepper, execution monitoring
tools (e.g., a profiler)

multiparadigm (logic/objects/databases)

BABEL
Die Sprache BABEL ist eine funktional-logische Sprache, die 1988 von Mario
Rodriguez-Artalejo (Universidad Complutense de Madrid) und Juan Jose Moreno-Navarro
(Universidad Politecnica de Madrid) entwickelt wurde. In BABEL wird eine uniforme
Integration des funktionalen und des logischen Programmierstils erreicht. Die Kernidee besteht
darin, den Auswertungsmechanismus funktionaler Sprachen zu verallgemeinern, indem zur
Parameterbergabe die aus den Logik-Sprachen bekannte Unifikation verwendet wird. Eine
Einfhrung in die Semantik und Implementierung von BABEL wird in dem neu erschienenen
Lehrbuch
CLOVER
CLOVER (Controlled Lazy Object-flow Visual EnviRonment) is a state-of-the-art
software development system integrating three key technologies: object-oriented design and
programming, functional programming and visual programming.
Clock
Clock is a language intended to support the development of interactive software, including the
development of distributed multi-media groupware.
Clock incorporates elements of visual, functional and object-oriented programming. Clock is
supported by the visual ClockWorks environment, allowing the development, browsing and
editing of object-oriented software architectures. Architecture components are themselves
programmed in a pure functional language loosely based on Haskell.
Database Programming Languages - PFL Software (disfunctional?)
PFL (Persistent Functional Language) is a
functional database programming language
FOOPS
A Functional Object-Oriented Programming System,
patterned after OBJ, a declarative specification language,
from which it derives many of its features.
FUNLOG++
Pro.M.D.-FUNLOG++ is an objectoriented, functional, logic programming language plus
unification. FUNLOG++ was created in 1995/1996 by the Pro.M.D. research group in Germany.
In the Pro.M.D. project FUNLOG++ serves as a basic knowledge representation language for
medical knowledge bases. FUNLOG++ syntax is simple but powerful as few independent
concepts are combined orthogonally. The standard library of FUNLOG++ is optimized to
support biochemical and physiological knowledge. A system of competence levels are defined
to deal with unknown, semiknown, known, and empty objects.
Gofer Object System
The Gofer Object System (GOS) is a newly developed language combining the object-oriented
and the functional programming paradigm. Thus it inherits all the benefits from both paradigms.
At a first glance, GOS can be understood as a imperative procedural language, as C++ or Eiffel
are, that makes use of an underlying functional language Gofer (developed from Mark P. Jones)
to define abstract datatypes.
Poplog at ISL
Poplog is a multi-language applications development environment with efficient incremental
compilers for Common Lisp, Prolog, Pop-11, Standard ML.
It also includes a language-sensitive editor. The system runs under X with Motif or OPEN
LOOK (Sun SPARC only) look+feel and can integrate with software written in C/C++, Fortran,
Pascal and other compiled languages.
Refus project description page
Refus is a functional programming language which was designed for the development and
demonstration of new programming concepts. The aim is to combine functional and
object-oriented concepts such that an object-oriented style of programming can be supported
in a referential transparent framework. The central underlying idea is that specializing method
definitions for subclasses and their dynamic binding is the same as a very restricted sort of
best fit pattern matching. Hence, best fit pattern matching -especially with record patterns- in
combination with extensible record types and a hierarchic type system play the central role in
the system. Patterns are a very flexible and powerful tool for the definition and specialization of
multi-methods. They provide multi-methods in a very general and yet unknown way. Refus
differs from Haskell in that it is really object-oriented.
Some more features which usually cannot be found in functional languages are a hybrid
static/dynamic type system, sets, and maps. These features are useful in in specifications and
prototype implementations. The language in its present form supports functional I/O in
Clean-style. We plan to introduce monadic I/O which seem to be the better concept.
The CLAIRE programming Language
CLAIRE is a high-level functional and object-oriented language with advanced rule
processing capabilities. It is intended to allow the programmer to express complex algorithms
with fewer lines and in an elegant and readable manner.
The Mercury Project
Mercury is a new logic/functional programming language, which
combines the clarity and expressiveness of declarative programming with advanced static analysis
and error detection features. Its highly optimized execution algorithm delivers efficiency far in
excess of existing logic programming systems, and close to conventional programming systems.
Mercury addresses the problems of large-scale program development, allowing modularity,
separate compilation, and numerous optimization/time trade-offs.
The Poplog Programming Environment
The Toy System
Toy is a prototype for a constraint functional logic language. It is another member of the family of languages developed in the 'Declarative
Programming Group' of the 'Departamento de Sistemas Informáticos y Programacion (SIP)' at the Univ. Complutense de Madrid.
The UFO Project
A large subset of UFO is a pure, higher-order functional language incorporating the OO
notions of classes, inheritance, and dynamic binding. Another important aspect is the provision
of multi-dimensional functional arrays, with integrated loop structures and monolithic
operators, which generalise those of SISAL. However, unlike SISAL, UFO is not a pure
functional language. It has stateful objects, which allow programs to be written in a concurrent
object-oriented style where appropriate. Safeguards are provided, both in the semantics of
operations on stateful objects and in the type system, to minimise the problems associated
with introducing state.
poplog.info at Birmingham

scientific computing

FSC - Functional Scientific Computing
FSC a polymorphic* implicitly typed language with multi-parameter parametric overloading
and pattern matching. One of the aims being to provide a language with the much of the
expressablitity of Haskell for number crunching without having to rely on imperitive tricks.
FTP Directory: ftp://kestrel.nmt.edu/pub/raymond/oldsisal/
J Software
J is a very high level general-purpose language, with a strong emphasis on functional
programming and array processing. J was designed and developed by Ken Iverson and Roger
Hui, and implemented by Iverson Software Inc (ISI).
NESL: A Nested Data-Parallel Language
NESL is a parallel language developed at Carnegie Mellon by the SCandAL project. It
integrates various ideas from the theory community (parallel algorithms), the languages
community (functional languages) and the system's community (many of the implementation
techniques).
SAC - Single Assignment C
Single Assignment C (SAC) is a functional C variant, whose design is focussed on the needs of
numerical applications. In order to facilitate the compilation into efficiently executable code, the
functional features included in SAC are merely restricted on referential transperancy and the
inclusion of arrays as first class citizens. Other features of functional languages which are not
essential for numerical applications, e.g. higher order functions, polymorphism, or lazy evaluation,
are not supported by SAC. These can be found in general purpose languages, e.g. Haskell, Clean,
or Miranda.
In order to overcome the acceptance problems of other functional languages intended for numerical
applications, e.g. Sisal, Nesl, or Nial, the design goals of SAC are [abbreviated here]:
provide a functional language with a syntax very similar to that of C,high-level array operations
which are invariant against dimensionalities and shapes, efficiently executable code, smooth
integration of states and state modifications into the functional paradigm using uniqueness types,
I/O facilities
Sisal Language Project
The objectives of the Sisal Language Project are to develop high-performance
functional compilers and runtime systems to simplify the process of writing scientific programs
on parallel supercomputers and to help programmers develop functional scientific applications.
Sisal Language Tutorial
Sisal Language Tutorial Table of Contents
The APEX Project
APEX is an APL compiler. APEX generates high-performance, portable, parallel code that
executes up to several hundred times faster than interpreted APL, with serial performance of
kernels competitive with FORTRAN. Preliminary results indicate that acceptable multi-processor
speedup is achievable. The excellent run-time performance of APEX-generated code arises from
attention to all aspects of program execution: run-time syntax analysis is eliminated, setup costs
are reduced, algebraic identities and phrase recognition detect special cases, some matrix
products exploit a generalization of sparse-matrix algebra, and loop fusion and copy optimizations
eliminate many array-valued temporaries. In addition, the compiler exploits Static Single
Assignment and array morphology, our generalization of data flow analysis to arrays, to generate
run-time primitives that use superior algorithms and simpler storage types. Extensions to APL,
including rank, cut, and a monadic operand for dyadic reduction, improve compiled and interpreted
code performance.

Projects/Topics

APSET
CMU CS Venari Project Home Page
semantic-based object storing and retrieval
Cert Onera research projects
information encrypted in french (sigh)
ECRC - FACILE
SML + higher-oder concurrent processes
EFOOL - Evaluation of Functional and Object-Oriented Languages
FAST - The Collected Papers
Functional Programming for Arrays of Transputers
First-Class Environments
NEC Research Institute
Programming Languages and Systems Group
(Suresh Jagannathan, ..)
Index of /theory/CONFER/
Concurrency and Functions (ESPRIT BRA 6454)
Para
compiling functional languages (variants of ML)
on multi-processor machines
Persistence
An attempt to collect information regarding the combination of
orthogonal persistence and functional programming. The main idea
of orthogonal persistence is that the possible life-time of a
data object should be independent from its type.
Polytypic Programming
A number of functions have to be written over and over again on different datatypes. Examples
of such functions are pretty printers, parsers, equality functions, most general unifiers, pattern
matchers, rewriting functions, etc. These functions are examples of so-called polytypic
functions. A polytypic function is a function that is defined by induction on the structure of
user-defined datatypes. At Chalmers we are working on an extension of Gofer/Haskell with
which polytypic functions can be written and type checked. Furthermore, we are developing
methods for writing polytypic functions.
Projet Cristal
CAML (Leroy, Remy, ..)
Research Projects of Kwangkeun(Kwang) Yi
centered around SML
The Siberia Project: Advanced Languages for Numerical Software
Programming Environment for Standard ML(SML)
Static Analysis Technology for SML Programs
SML for Music Programming
SEIS-Research: Specifications in Functional Languages and their Transformations
Programs in a functional programming language can be used as clear operational specifications. Such specifications have the advantage that their
partial correctness can be verified by a computer and that they are executable; the specification is its own prototype. Recently developed advanced
translation techniques have enabled the use of functional programming languages for the production of serious software. The demands from a
program as clear specification and efficient product often oppose each other. The research within this area is aimed at developing tools to create
functional specifications and subsequently transform these into efficient programs.
The concrete goal of this research is to construct a fully automatic program optimiser. The optimiser operates by source-to-source transformation
of lazy, purely functional programs. By means of symbolic reduction (compile-time execution), programs are transformed into semantically
equivalent, but operationally more efficient programs. The efficiency gain is caused by two effects: firstly, reductions are done only once at
compile-time instead of many times at run-time --- an effect similar to constant folding; secondly, building and breaking down of intermediate
data structures is eliminated --- an effect known as deforestation. The transformed versions are input to an existing state of the art compiler.
Smart Programming Envrionments
A ``smart'' programming environment uses semantic analyses to provide the programmer with
information concerning potential call sites and safe optimizations. The envisioned technology is
applicable to both safe and unsafe languages, but we will initially concentrate on the former
because they have a rigorous, compiler-independent semantics that is amenable to analysis.
TERSE:TErm Rewriting Support Environment
The CONFER Project ESPRIT BRA 6454
The Church Project:
The Church Project is a Boston-based project designing and implementing an ML-like
functional programming language. The input language is currently based on rank-2 intersection
types while the typed intermediate language has intersection, union, product, sum, and
recursive types.
The Fox Project Home Page
Advanced Languages (SML) for Systems Software
cash@egroups.com

Publications/Bibliographies

A Collection of Computer Science Bibliographies in BibTeX Format
A large unfinished book on POP-11
Robin Popplestone (May 13th, 1997):
In response to a number of requests for information about POP-11 that have
appeared recently, I have made the (compressed Postscript) text of a fairly
complete account of the POP-11 language available via the Internet.
The text dates from the late 1980's, and is largely unrevised. For example,
it does not discuss the remarkable improvement in the efficiency of lazy
(non-strict) evaluation achieved by Peyton-Jones and others in this decade.
It also needs some editing, which it will receive at some future point.
Some of the later chapters are POPLOG-specific.
Book: Algorithms: A Functional Programming Approach
Book: Haskell: The Craft of Functional Programming
Simon Thompson, backup materials for
this introductory text on
functional programming in Haskell
Book: Introduction to Functional Programming Systems Using Haskell
Antony J.T. Davie
Book: ML for the Working Programmer, 2nd Edition
L.C. Paulson
Book: Programming With Miranda
Chris Clack, Colin Myers and Ellen Poon
Book: The Little Schemer
Book: The Seasoned Schemer
FTP Directory: ftp://ftp.dcs.warwick.ac.uk/pub/biblio/
Warwick bibliography related to functional languages
FTP Directory: ftp://research.att.com/dist/ml/papers/
collection of papers dealing with SML/NJ
Index of /pub/SPECTRE/LUSTRE/PAPERS
papers around the data-flow language LUSTRE
Journal of Functional and Logic Programming
electronic journal from The MIT Press
PhD: Functional Programming and Input/Output.
info about Andrew D. Gordon's PhD thesis
PhD: Interactive Functional Programs by FTP
Peter Aachten's PhD thesis
Records of the ML'94 workshop
SEL-HPC Functional Programming Archive
The Journal of Functional Programming

Teaching

Abstract Interpretation and Program Transformation
Second half of a course on implementing
functional languages by John Hughes and
Thomas Johnsson.
Advanced Functional Programming
A course initiated by John Hughes in 1993,
focuses on the construction and use of
reusable programming libraries in Haskell.
Functional Programming Languages in Education
`It is the aim of these web pages to collect
information on the use of functional programming
in teaching. This covers important areas, such
as algorithms and data structures, compiler
construction, computer architecture, data base
systems, computer graphics, mathematics, problem
solving and the semantics of programming languages'
Any teaching material that cannot already
be found from FPLE should be added to FPLE!
Theoretical Foundations of Programming Languages and their Practical Realisation.
Tutorial Papers in Functional Programming
John Hughes' Collection

Tools for Functional Programming

Batch Compilers

The Glasgow Haskell Compiler
The HBC compiler
nhc13 from Chalmers
The York release represents an additional development effort, mainly focussed on adding new
compiler features and libraries. It incorporates Niklas's latest work, and will continue to do so.
Hence, the York release will be more up-to-date than the Chalmers release (which essentially
froze in October 1996).
nhc13 from York
nhc13 - Niklas Rojemo's compiler for Haskell 1.3 is designed to produce very space-efficient code.
Furthermore, to help you track down any space faults in your programs, it has the most advanced heap profiler
available for any lazy functional language today. Some recent York extensions include libraries for runtime
compression of heap data, and binary I/O. The latest versions of GreenCard and nhc13make are included.

Foreign Language Interfaces

Green card: a foreign-language interface for Haskell
This document describes GreenCard, a foreign-language interface for the non-strict, purely functional language
Haskell.
GreenCard for nhc13
Haskell's standard foreign language interfacing tool. York extensions allow you to call
Haskell functions from your C program! [ Packaged with nhc13 ]
HaskellDirect
HaskellDirect is an IDL compiler for Haskell, helping the Haskell programmer

Graphics

Fudgets
Graphical User Interface Toolkit
Fudgets is primarily a Graphical User Interface
Toolkit for the functional programming language Haskell and
the X Windows system. Fudgets also makes it easy to
create client/server applications that communicate via the
Internet. The latest release of the library was version h12 on
6th November, 1996.
Functional Reactive Animation (Fran)
Fran is a Haskell library (or "embedded language") for interactive animations with 2D and 3D
graphics and sound. It runs on Hugs version 1.4, and recently GHC 2.09, under Windows 95 and
Windows NT, using DirectX.
Haggis
graphical user interface framework
Haggis is a graphical user interface framework for the functional language Haskell, running under
the X Window system. It is currently being developed using the Glasgow Haskell Compiler with
its concurrent extensions to achieve more comfortable interaction with the outside world.
TK-Gofer
TkGofer is a library (a prelude file) of functions for writing graphical user interfaces in the
functional language Gofer. The library provides a convenient, abstract and high-level way to
write window-oriented applications. The implementation rests on modern concepts like
monads and constructor classes. For the implementation of graphical IO we added a few
primitives to the standard Gofer interpreter to communicate with the graphical toolkit Tcl/Tk.
TkGofer is a library for writing graphical user interfaces in the lazy
functional language Gofer. The version currently being distributed is Version 2.0.

Interactive Systems (Interpreters)

Hugs 1.4
Hugs is a small, portable Haskell interpreter written in C that runs on almost any machine. Hugs
is best used as a Haskell program development system: it boasts extremely fast compilation,
supports incremental compilation, and has the convenience of an interactive interpreter (within
which one can move from module to module to test different portions of a program). However,
being an interpreter, it does not nearly match the run-time performance of, for example, GHC or
HBC.
Many Haskell applications are included in the Hugs distribution. Also, Win32 and X11 libraries
are included for easy access to windows, graphics, and other important OS functionalities.
Hugs supports almost all of Haskell 1.4.
The HBI interactive system (comes with hbc)
The interactive system can load both source files and compiled files. Functions defined with the
interactive system runs 10 -- 50 times slower than compiled code; compiled code called from
interactive use runs at full speed.
York gofcc
York gofcc - Mark Jones's Gofer interpretive compiler extended with: communicating processes; a profiler
offering producer, construction, and retainer information; and several variants of a real-time garbage collector.
This package (668359 bytes) is fairly old now.

Others

CGI programming
CGI programs receive input from the client's web browser, encoded in a complicated fashion, and
can generate content in a variety of formats (plain text, HTML, JPEG etc) which the client then
sees. This decoding and encoding is often expressed in Perl or C, which makes CGI applications
tedious and awkward to write. Haskell/CGI is a library for writing CGI programs in Haskell.
Edison: A Library of Efficient Data Structures (Haskell Version)
This document reflects the preliminary design of a library of efficient data structures for Haskell,
tentatively named Edison in honor of Thomas Alva Edison and for the mnemonic value of EDiSon
(Efficient Data Structures). A version of the library for Standard ML is also planned.
The intention of the library is to provide several families of abstractions, each with multiple
implementations, along with guidance on how to choose the best implementation for your
particular application. The families of abstractions I have in mind initially are sequences, finite
maps, priority queues, and sets/bags.
Functional writers of PDF documents
Goffin - Haskell for Parallel and Distributed Programming
Goffin is an extension of Haskell with combinators from concurrent constraint programming. These
combinators constitute a co-ordination sublanguage that allows the specification of the
co-ordination portion of parallel and distributed programs. The computational portions of these
programs are expressed purely functional. The distinguished feature of Goffin is that the semantic
properties of the functional base language Haskell are preserved; in particular, the extension
retains referential transparency. Although, the development of Goffin initially focused on
tightly-coupled multiprocessors, some extensions that are required for applications executing on
loosely-coupled systems have been proposed recently.
Goffin is an extension of Haskell with combinators from concurrent constraint programming. These
combinators constitute a co-ordination sublanguage that allows the specification of the
co-ordination portion of parallel and distributed programs. The computational portions of these
programs are expressed purely functional. The distinguished feature of Goffin is that the semantic
properties of the functional base language Haskell are preserved; in particular, the extension
retains referential transparency. Although, the development of Goffin initially focused on
tightly-coupled multiprocessors, some extensions that are required for applications executing on
loosely-coupled systems have been proposed recently.
GranSim - A simulator for Parallel Haskell
This page describes GranSim, a simulator for the parallel execution of Glasgow Parallel Haskell
(GPH) programs. Haskell is a non-strict, purely-functional programming language. GPH extends
Haskell with annotations for sequential (seq) and parallel (par) composition.
GranSim is based on the Glasgow Haskell Compiler (GHC) and available from the anonymous
FTP server (Version 0.29 of GHC). Basically, GranSim is just a special setup of GHC, similar to
the parallel setup (GUM). In the GranSim setup the compiler instruments the generated code.
This information is used by the runtime-system to perform an event driven simulation. The actual
graph reduction code is the same as for sequential compilation with GHC. Therefore, all
optimisations in GHC can be used for GranSim, too. For now, GranSim only been tested with the
Haskell 1.2 front-end of GHC.
Haskell Font Lock for Emacs
Haskell mode for emacs that uses color to
highlight keywords and other parts of the Haskell syntax.
Haskell Project: Regular expressions in Haskell
There are a number of regular expression libraries around. One of the best can be
found in the Perl programming language. The new GHC regexp library, provided here,
is a regular expression package for the purely functional language Haskell.
Hawk - Specifying and Prototyping Microprocessors
The goal of the Hawk project is to develop a language for
expressing highly abstracted specifications of modern
microprocessor designs, to provide design teams with the
ability to dynamically explore a wide range of design choices.
The Hawk language (implemented as a Haskell library) is
based heavily on techniques and theory from functional
programming, and from Haskell in particular.
The D????e Homepage
Derive is a type sensitive preprocessor for Haskell 1.3/1.4. It parses a Haskell module for
structures (data & newtype declarations) and commands. These commands cause rules to be fired
on the parsed data, generating new code which is then appended to the bottom of the input file.
These rules are expressed as Haskell code, and it is intended that the user can add new rules as
required.
Derive is written in Haskell 1.4, and can be compliled using GHC 2.2 or higher, or interpreted
using Hugs 1.4
The Haskore Computer Music System
Haskore is a collection of Haskell modules designed for expressing musical structures in the
high-level, declarative style of functional programming. In Haskore, musical objects consist of
primitive notions such as notes and rests, operations to transform musical objects such as
transpose and tempo-scaling, and operations to combine musical objects to form more complex
ones, such as concurrent and sequential composition. From these simple roots, much richer
musical ideas can easily be developed.
Haskore is distributed as part of the Hugs 1.4 Haskell compiler. If you are using a different
Haskell system, copy the directory lib/Haskore out of the hugs distribution and rename the file
src/HaskoreLoader.hs to src/Haskore.hs to make everything work correctly.

Parsing

Happy: The Parser Generator for Haskell
Happy is a parser generator system for Haskell, similar to the tool `yacc' for C. Like `yacc', it
takes a file containing an annotated BNF specification of a grammar and produces a Haskell
module containing a parser for the grammar.
Happy is flexible; unlike `yacc', you can have several Happy parsers in the same program. Happy
can work in conjunction with a lexical analyser supplied by the user (either hand-written or
generated by another program), or it can parse a stream of characters directly (but this isn't
practical in most cases).
Lucky Manual
Lucky ist, ähnlich dem yacc für C, ein Parsergenerator für Haskell 1.3.
Lucky liest eine BNF-notierte Grammatikdatei ein und gibt ein Haskell-Modul
aus, das den in Parserkombinatoren übersetzten Parser enthält.
The Haskell Parser
We developed a parser for Haskell for two reasons:
(a) To evaluate the suitability of parser combinators for parsing a real programming language.
Parser combinators are more flexible than parser generators (nicest of all: the parsing
functions have the same structure as the syntax definition of the Haskell report). But can
they be used for more than toy languages and first prototypes?
(b) To have a parser for Haskell that can be used in various applications. E.g.: source code
reformaters, literate programming systems, source code browsers, Haskell compilers.

Profiling and Benchmarking

Auburn
Auburn - a kit for benchmarking implementations of lazy data structures.
The NoFib Haskell benchmark suite
We are very keen to encourage the collection of a good suite of Haskell programs to use as
benchmarks. We have made a start, by collecting the NoFib suite. It has three main collections of
programs:
(1) The imaginary part consists of toy programs such as nqueens and Ackermann's function.
Such programs are useless for drawing general conclusions, but can sometimes show up
nasty performance bugs in sharp relief.
(2) The spectral part consists of kernels of real programs, such as Fast Fourier Transform.
Again, one should be careful about drawing any general conclusions from these programs,
but they are a whole lot more realistic than the imaginary suite whilst still being of modest
size.
(3) The real part consists of real application programs, written by people who simply wanted
to get the job done. They are larger and more I/O intensive than the imaginary and spectral
suite.

Tracing and Debugging

The Haskell Tracer Project
Haskell Tracer (due early-1998) - Does your Haskell program give wrong output, produce a runtime error, or
fail to terminate? Using the graphical Trace Browser, you can examine in detail the causes of any of these faults.
(As demonstrated at the IFL'97 Workshop.)