Writing computer programs is something I like to do, and I do it both
in my work and as a hobby. Below, I mention some of them, both small
I mention some web application first, since it is so easy for you to
try them out.
The following "toys" were created while I was teaching the
compiler construction course
- WebFudgets allow Haskell programs built with Fudgets
(see below) to run in a web page.
I have adapted some of the Fudgets programs from back in the day to
- The GF Cloud
- Some web applications based on
developed by me and other people.
Some older web applications:
- RegToy (January 2001, updated May 2019)
- A web interface to a small Haskell program that converts regular
expressions to finite automata.
- LRToy (January 2001)
- A web interface to a small Haskell program that generates LR
parsing tables for BNF grammars.
- FlowToy (February 2001)
- A web interface to a small Haskell program that performs some
simple dataflow analysis of programs in an intermediate language.
- Trams (~1996-2000)
- A complete, stand-alone, special-purpose
web server for searching for travel routes in the Göteborg
public transport system, implemented in Haskell.
(Such a web service did not
exist when I wrote it. Nowadays, you can use similar official
services provided by
- Webster's English Dictionary (~1995)
- A rather small program, part shell scripts, part C.
- Klockan (~1995)
- Tells what time it is, in Swedish. A small C program.
Other web-related software
Being a dedicated functional programmer, I have done some
experiments with writing web software in the functional language Haskell:
- WWWBrowser - a web browser (1994)
This is a simple web browser. Since it fetched
inlined images in parallel, it could display web pages faster than
NCSA Mosaic (the dominant browser at the time).
It is described in the chapter
WWWBrowser - a WWW
client of my PhD thesis.
- wwwchecklinks (~1994)
This is a tool for web page authors.
wwwchecklinks searches a document
hierarchy and reports broken links.
It also produces a cross reference list.
- InternetLib (~1994)
- A library containing the key components needed to build
Trams and other web-related software.
Some other software
- A GUI toolkit for Haskell, which
and I implemented, mostly during 1991-1995, but I
still make some additions and improvements now and then.
We have also implemented some games and other
small programs using Fudgets. For some examples, see
the Fudgets demos page.
- Alfa (1996-2004)
- A proof assistant with a graphical user interface, implemented
in Haskell using Fudgets. My work on Alfa mostly concerns the
graphical user interface and plugging everything together.
GF are used in Alfa.
- The Programatica Haskell front-end (2001-2006)
- This is essentially a Haskell compiler front-end that I spent a lot of
time working on as a PostDoc in the
- An prototype operating system implemented in Haskell as part of
the Programatica project, presented at the Haskell Symposium 2004 and
at ICFP 2005.
- An automatic make tool supplied with
hbc, written in LML. It has
served as the starting point for
supplied with NHC,
a more compiler independent version of
- A successor of
hbcmake. It has a graphical user
interface and it can compile in parallell on several machines on
a local network. Although I used it myself (e.g., to compile
Alfa) I never considered it quite finished and so it has not
been released to the public.
- Reg (1999-)
- A small tool that I created for my own personal use for manipulating
registers (i.e. tables or relations as in relational databases)
stored in text files. It can convert to and from various formats, e.g.
CSV, TSV, Unix Mailbox, Unix password file, URL-encoded-queries,
and even JSON.
I bought my first computer when I was 15 years old, and since then I
have enjoyed writing programs of various kinds. The programming languages I
used in the beginning were mostly BASIC and 6502 assembler. As an
undergraduate student at Chalmers University I
was introduced to functional programming and was fascinated, but I continued to
write most of my programs in C until I was introduced to the Lazy ML compiler
as a PhD student.
Nowadays, I write most of my programs in
and only rarely resort to C or Shell scripts.
Comparing programming languages is fun. My favourite web page on this
topic is 99
Bottles of Beer on the Wall. This page shows the same programming
example in hundreds of diffrent languages!