Software

All programs listed here are released under various open source licenses. Improvements and bug reports are welcome, send them to .

Roundtrip allows the definition of bidirectional (de-)serialization specifications. The specification language is based on the ideas described in the paper Invertible Syntax Descriptions: Unifying Parsing and Pretty Printing by Tillmann Rendel and Klaus Ostermann, Haskell Symposium 2010.

The Haskell version of roundtrip is split into several packages:

There is also an experimental scala implementation of roundtrip.
Source code vailable via darcs:
   darcs get --set-scripts-executable \
    http://darcs.factisresearch.com/pub/roundtrip-scala

Send patches using darcs send to

Xmlgen is a pure Haskell library with a convenient API for generating XML documents. It provides support for all functionality defined by the XML information set and offers good performance and low memory usage.

Xmlgen is available from hackage. There's a blog article providing a short tutorial.

Source code vailable via github:
   git clone git://github.com/skogsbaer/xmlgen.git

The Darcs Patch Manager (DPM for short) is a tool that simplifies working with the revision control system darcs. It is most effective when used in an environment where developers do not push their patches directly to the main repository but where patches undergo a reviewing process before they are actually applied.

DPM is available from hackage. There's a blog article providing a short tutorial.

Source code vailable via darcs:
   darcs get --set-scripts-executable \
    http://www.stefanwehr.de/darcs/DPM
Send patches using darcs send to

The Haskell Test Framework (HTF for short) lets you define unit tests, QuickCheck properties, and black box tests in an easy and convenient way. The HTF uses a custom preprocessor that collects test definitions automatically. Furthermore, the preprocessor allows the HTF to report failing test cases with exact file name and line number information. HTF is made available under terms of the LGPL.

The HTF is available from hackage, there is also a short tutorial.

Source code vailable via github:
   git clone git://github.com/skogsbaer/HTF.git

The JavaGI project develops an extension to Java's interface concept. See the project homepage for more details, including the implementation of a full-blown compiler based on the Eclipse Java Compiler and a plugin for the Eclipse IDE. The compiler and the Eclipse plugin are made available under terms of the Eclipse Public License.

hscurses is a Haskell binding to the NCurses library, a library of functions that manage an application's display on character-cell terminals. hscurses also provides some basic widgets implemented on top of the ncurses binding, such as a text input widget and a table widget. The hscurses library is made available under terms of the LGPL.

The binding was originally written by John Meacham http://repetae.net/john/. Tuomo Valkonen http://modeemi.fi/~tuomov/ and Don Stewart http://www.cse.unsw.edu.au/~dons improved it and I finally added some basic widgets and packed it up as a standalone library.

The hscurses library is available from hackage.

Source code vailable via github:
   git clone git://github.com/skogsbaer/hscurses.git

The simple address book (short: sab) is a text-based addressbook. It offers a lightweight way of storing, manipulating, and querying addresses of all kinds. The addresses are stored in a plain text file, using a human-readable format, and manipulated with an ordinary text editor. The simple address book can be used as a query command for the mutt email client. Moreover, it exports birthday dates as commands for the remind program and in .ical format.

Source code vailable via darcs:
   darcs get --set-scripts-executable \
    http://www.stefanwehr.de/darcs/sab
Send patches using darcs send to

The tool adjust adjusts source locations in error messages. It is common practice to preprocess input files before sending them to the program that does the real job. As a result of this practice, error messages are often expressed in terms of the file generated by the preprocessor. However, it is desirable that error messages point to the original source file.

The adjust tool solves this problem by rewriting source locations in error messages, provided the files generated by the preprocessor contain file directives. Such file directives specify where lines in the preprocessor output come from originally. Many preprocessors (e.g. cpp) generate file directives.

The format of line directives and error messages is customizable, so that adjust works with many preprocessors and for error messages produced by many programs. Special support is available for lhs2TeX (http://www.cs.uu.nl/~andres/lhs2tex/): adjust recognizes code sections and handles them properly. You need to invoke lhs2TeX with the option --file-directives to enable file directives in lhs2TeX's output.

To use adjust you need to pipe the error messages generated by some program through adjust. For example, here is how you would use adjust in combination with lhs2TeX:

      # preprocess the .lhs file
      lhs2TeX foo.lhs > foo.tex

      # invoke LaTeX on the generated .tex file
      latex -file-line-error-style foo.tex | adjust
    

Source code vailable via darcs:
   darcs get --set-scripts-executable \
    http://www.stefanwehr.de/darcs/adjust
Send patches using darcs send to

sref is a tool for including source code from external files into a LaTeX document. The files containing the source code are scanned, and specially marked regions are extracted and written to separate files. You can then use LaTeX's \input or \VerbatimInput command to include these files into your document. It is possible to postprocess the extracted source code. Furthermore, sref can emit dependency information suitable for the make tool.

sref is a good choice when literate programming is not suitable, but you still want to be able to run the code in your paper.

Source code vailable via darcs:
   darcs get --set-scripts-executable \
    http://www.stefanwehr.de/darcs/sref
Send patches using darcs send to

Reactive objects are a convenient abstraction for writing programs which have to interact with a concurrent environment. A reactive object has two characteristics: the abandonment of all blocking operations and the unification of the concepts state and process. The former allows a reactive object to accept input from multiple sources without imposing any ordering on the input events. The latter prevents race conditions because the state of an object is only manipulated from the process belonging to the object.

Only a few programming languages exist that make the concept of reactive objects available to programmers. Unfortunately, all those systems seem to be either not actively maintained anymore or not really matured yet. In this paper we demonstrate how reactive objects can be incorporated into the existing general purpose programming language Haskell by making use of common extensions to Haskell. Our implementation is heavily inspired by the O'Haskell programming language. While O'Haskell is a standalone programming language not compatible with Haskell, our implementation comes as a Haskell library that smoothly integrates the concept of reactive objects into the world of regular functional programming.

Requirements: GHC 6.4
Source code vailable via darcs:
   darcs get --set-scripts-executable \
    http://www.stefanwehr.de/darcs/rhaskell
Send patches using darcs send to

Paper:
Stefan Heimann and Matthias Neubauer
Reactive Objects for Haskell
Informal proceedings of the Fifth Symposium on Trends in Functional Languages (TFP 2004). Munich, Germany. November 2004.
.ps.gz, .pdf, bibtex

voc is a commandline-based vocable trainer written in OCaml.

Requirements: OCaml 3.07 or above
Download

(http://cvsshell.sourceforge.net)

CvsShell is a console-based cvs-client written in python.

(http://lunar-eclipse.sourceforge.net)

Some (hopefully) useful plugins for eclipse. I am one of the authors of the editor enhancements plugin. This plugin adds some enhancements to the builtin editor. Its features are influenced by Emacs.

table is a python module for constructing tables and exporting them into LaTeX, HTML or CSV format.

Requirements: Python 2.2 or above
Documentation, Download

HtmlImage is a jEdit plugin. It creates for a given image HTML the <img/> tag with the correct width and height attributes.

Requirements: jEdit 4.1 or above
Download Jar-File, Download Source

Last modified: 2012-08-29T08:35:29+02:00