HasFuse
Haskell with FUNDIO-based side effects
News

03-Dec-2003
A new paper about applying the FUNDIO semantics to Haskell is available: See [1]
22-Oct-2003:
HasFuse has been updated, version 1.1 is available. Changes from version 1.0 to 1.1 and the source of older versions can be found in the archive.

About HasFuse

  • HasFuse allows you to use non-strict direct-call I/O within Haskell.
  • HasFuse is a modification of the Glasgow Haskell Compiler (GHC).
  • HasFuse compiles programs which uses unsafePerformIOin a `safe` way.
  • The semantics are given by the FUNDIO-calculus [3].
  • In [1] and [2] is described how we applied the FUNDIO-semantics to Haskell.

Download

Building instructions

You need

  • the HasFuse source (see above)
  • the source of GHCversion 5.04.3 (for a local copy of the source see above)
  • everything what's required to build GHC (another GHC, Happy). See GHC building guide.
Then extract both source archives (GHC and HasFuse).
Let's assume:
  • GHC is in a tree with top-level directory fptools and
  • HasFuse in a tree with top-level directory hasfuse.
Merge the source trees. This can easily be done, by copying the HasFuse files over the GHC files.
For example you can do this step with:

cp -r hasfuse/* fptools/

After that, you can create a build tree or use the source tree with top-level directory fptools for building.
Building HasFuse is now identical to building GHC, so you should use the GHC documentation especially the
GHC building guide for this step.

Perhaps, this works: Go to the fptools directory and type

autoconf
(cd ghc && autoconf)

Then create the mk/build.mk (probably an empty file is enough) After that, type

./configure
gmake

After building you should have a ghc-inplace at fptools/ghc/compiler/ghc-inplace
(or in your buildtree-path) which can be used to compile programs with HasFuse.

License

HasFuse is provided "as is" and comes with ABSOLUTELY NO WARRANTY.
HasFuse is a small modification of the GHC source code, so it respects the GHC license.

Documentation

David Sabel,
"A Guide Through HasFuse"
Institut für Informatik, J.W. Goethe-Universität Frankfurt am Main, 2003
PDF, PostScript, compressed PostScript

A list of modifications of the GHC source code
Textfile, PDF

Related papers

[1]
David Sabel,
"Realising nondeterministic I/O in the Glasgow Haskell Compiler"
Institut für Informatik, J.W. Goethe-Universität Frankfurt am Main, Frank-report-17, 2003
PDF, PostScript, compressed PostScript, BibTeX entry
[2]
David Sabel,
"Realisierung der Ein-/Ausgabe in einem Compiler für Haskell bei Verwendung einer nichtdeterministischen Semantik",
Institut für Informatik, J.W. Goethe-Universität Frankfurt am Main, Diplomarbeit (in german), 2003
PDF, PostScript, compressed PostScript

The Haskell examples of this work can be found here.
[3]
Manfred Schmidt-Schauß,
"FUNDIO: A Lambda-Calculus with a letrec, case, Constructors, and an IO-Interface: Approaching a Theory of unsafePerformIO"
Institut für Informatik, J.W. Goethe-Universität Frankfurt am Main, Frank-report-16, 2003
PDF, PostScript, compressed PostScript, BibTeX entry

Contact

HasFuse was developed by David Sabel.
For further questions or a bug-report, you can mail to sabel@cs.uni-frankfurt.de.


$Author: sabel $, $Date: 2004/08/01 18:11:45 $

uni ffm © 1997, 2004