Application letters at the Haskell workshop: suggestion

Ashley Yakeley
Thu, 13 Sep 2001 18:14:31 -0700

At 2001-09-13 16:00, Lennart Augustsson wrote:

>I have been writing substantial Haskell programs and I use *NO* experimental
>features.  What I'm currently working on is over 20000 lines of Haskell 98.
>No extensions whatsoever.  (It even compiles and runs with all available
>Haskell implementations.)
>Granted, I write mostly compiler like programs (files in, files out), but 
>is still a lot you can do in Haskell just as it is.  Sometimes it might 
>bending slightly backwards to get it done, though.

Just as an alternative voice to this orgy of macho austerity...

I'm currently working on two Haskell projects. _JVM-Bridge_ is a bridge 
from Haskell to the Java virtual machine. I use FFI (obviously), and in 
one place existential types. I admit I haven't really needed more for 
that project, but also I've tried to minimise extension use for the sake 
of possible porting etc.

_Truth_, by contrast, is heavily dependent on class functional 
dependencies and probably even Hugs -98 wouldn't be able to deal with it. 
_Truth_ is a largely experimental project the nominal goal of which is to 
represent access to all information. 'Experimental' here means it's not 
likely to do anything useful anytime soon and frankly more resembles a 
work of art at this point. It's based on a solution I found to a problem 
I posed to this list ten months ago ("Imperative Object Destruction") 
that involves statically typing bits of imperative code based on what 
'objects' they destroy, make use of, and create.

Even with all the clever stuff I do with fundeps, the code would be 
simpler, cleaner and more general with certain extra extensions: most 
obviously if GHC were a bit smarter about whether or not instances 
overlap, but perhaps I could also make use of extensible algebraic 
datatypes. Empty datatypes would be nice for aesthetic reasons too, but 
of course there's a trivial workaround (providing a dummy constructor).

>PS. OK, a small confession, that program contains one unsafePerformIO for
>performance reasons.  It works fine without it, but 5% slower.

On the other hand, I don't do any unsafe anything anywhere. But I'm 
nowhere near performance tuning...

Ashley Yakeley, Seattle WA