Features of the Programatica Haskell Tools

This page summarizes the features of the Programatica Haskell Toolkit, which is

See the Usage page for how to use the tools.

It should also be possible for Haskell programmers to reuse our Haskell front-end in their own Haskell programs, but at the moment there is very little documentation to support this, unfortunately. (But it has been used in HaRe -- the Haskell refactorer tool from the University of Kent.)

Summary of functionality

Supported language

The tools support Haskell 98 as described in the Haskell 98 Language and Libraries: the Revised Report. It also supports a number of extensions to varying degree.

Unusually well-supported standard language features

Common Haskell Language extensions

Available functionality: P=lexing/parsing/scoping, T=type checking
Y=supported, y=partially supported, n=not supported (yet), blank=n/a.
PTFeature
Y Hierarchical module names (i.e. "." in module names)
Yy Haskell Hierachical Libraries
y Foreign Function Interface
YY Multi-parameter classes
YY Overlapping instances (as in Hugs)
Yy Functional dependencies (see Type Classes with Functional Dependencies)
Yn Rank-n polymorphism (use of the forall keywords in type expression)
Yn Existentially quantified types (use of the forall keyword in data constructor specifications)
YY The horrible n+k patterns
nn Pattern guards
nn Infix type constructors
nn Type signatures in patterns, scoped type variables
yn Generalised derived instances for newtypes
nn Generalised Algebraic Data Types
nn mdo

Programatica specific language extensions

Supported Libraries

The Programatica Haskell Tools are packaged with two sets of libraries:

The command pfesetup sets up a project using the Haskell 98 libraries by default. By supplying the flag +h or hierarchical a project using the hierarchical libraries is created instead.

Limitations

The tools currently don't implement exhaustive checking for static errors and might let things like duplicate definitions or repeated variables in patterns slip through silently. (Implementing this has been given low priority, since it has been assumed that the tools will be used as a complement to other Haskell compilers/interpreters, rather than a replacement.)