Be welcome, oh wanderer on electronic paths, to a part of my online home relating to my Haskell activities. This webspace is a partially evaluated [thunk], mainly project pages and code -- if you happen to need any of my material that isn't available here, please let me know (<username> @ community.haskell.org). Most of my old publications and talks should be available here, and there are also some first simple screencasts / demos for some of the projects.
The list of projects below is incomplete - if you are looking for a project of mine not listed here, try asking, it might still be around somewhere. Most of these projects are dormant as I currently have to spend most of my time on non-Haskell interests, so these pages are more of an archive than a representation of current developments. This state is hopefully not going to last forever. If you are interested in funding further development to reduce the delay, please get in touch (especially for Haskell-Coloured Petri Nets or Haskell program transformations a la HaRe). Otherwise, please be patient (and keep reporting haskellmode suggestions / regressions via its issue tracker).
|Haskell Mode Plugins for Vim||Support for editing Haskell code in Vim, with quickfix mode, documentation lookup, insert mode completions, adding of imports and qualifiers, .. [screencasts]||Maintained on code.haskell.org by myself.|
|GHood||Graphical animation of Haskell object observations. Visualize the relative strictness of demands across observation probes added to your program. Both standalone GUI and in-browser applet, so you can document strictness issues by putting graphical animations on your web pages (the project page includes a few online examples).||Maintained on hackage by Hugo Pacheco.|
|HaRe / RFP||The Haskell Refactorer (developed in our EPSRC project "Refactoring Functional Programs", with Simon Thompson and Huiqing Li). Our original tool supported module-aware refactorings over full Haskell'98 code, accessible from either Emacs or Vim. [screencast]||Dormant (greatly needed, but the reality of a GHC-/Cabal-based development environment these days is rather different from a source-based Haskell'98 world; the ideas should be reimplemented on top of the GHC Api, with some integration work needed to adapt to challenges posed by GHC Api/Cabal, but this needs proper funding). Occasionally updated to build with newer GHCs.|
|FunWorlds||Functional Programming and Virtual Worlds. Variants of functional reactive programming, with a simple VRML-inspired scene graph rendered via OpenGL/Glut (early versions generated VRML+ECMAScript for in-browser rendering, see screencast).||Last updated to build with GHC 6.10.|
|SimpleGo||Simple Monte-Carlo Go player, according to the computer-go mailing list's reference specification, supporting human-vs-bot and bot-vs-bot play via Go Transfer Protocol GTP (GoGui is a useful set of tools and interface for playing GTP-based bots). Nice to be able to combine learning about Go, modern AI/search techniques, and Haskell performance, all in one small project!-)||Not currently in development. 50% win rate against the Java reference bot implementation, so it should be fairly correct. Not nearly as fast as the fastest Haskell-based MC Go player I know, yet.|
|HCAR||Haskell Communities and Activities Reports (biannually, since November 2001).||Maintained and developed on haskell.org by current editor Janis Voigtlaender.|
|.ghci||Getting more out of GHCi, via useful command definitions for capturing and filtering command output. Originally presented in this email tutorial on haskell-cafe. See Haskell wiki page for more GHCi tips.||In development, every now and then. Mostly just used.|
|JustBrowsing (single file, cabal package)||Sometimes, when all you want is some cheap and cheerful GUI or some simple graphic, Haskell's full-featured GUI lib bindings can be overkill. One alternative is to augment your Haskell program with a rudimentary web server, and use a web browser as a GUI, even though both server and browser run on the same machine. This is not a new idea, but has come up in the web vs os/browser vs gui competitions, so you might even be able to write (or you might already have) a Haskell-independent GUI. This code provides a silly little Haskell code example, not pretty, but demonstrating many of the ingredients. The blog entry "Gui libs? No thanks, I'm just browsing" discusses the idea in a bit more detail.||Updated for GHC-6.12.3 (Opera, Firefox, Safari).|
|ghc-syb||Scrap Your Boilerplate instances for GHC Api types, to enable generic GHC Api AST traversals (this is part of the old experimental package syb-utils, the other part has moved into the standard syb package, though it might not yet be enabled there - see syb home page/issue tracker).||Maintained on hackage by Thomas Schilling.|
|Data.Label Data.Label.TH labels.hs||Non-atomic "atoms" for type-level programming. Addresses the old type-sharing issue for record labels and type tags (if the same labels/tags are defined in separate modules, they represent separate types, preventing shared uses), by constructing "atoms" from smaller parts. The parts can be shared (no need to know all possible uses in advance), and Template Haskell QuasiQuoting can be used to deconstruct actual uses of labels and type tags into the parts imported from Data.Label.||Added 14/04/2009, updated for GHC-6.12.3 and GHC-7.1.|
|Data.Record||Extensible concatenable records library for GHC (expanded version of the old haskell prime #92 attachment; compare ghc wiki page ExtensibleRecords for other recent proposals). See comments and examples inside for documentation.||Needs organization/API design, and indication of external interest. These days, most people seem to hack their own versions as needed, or use HList. Updated for GHC-6.12.3 and GHC-7.1.|
|R.hs||While still in Mark Jones' Languages and Programming group in Nottingham (around 1998), I was thinking about referential transparency and overloading, and stumbled on a way to make numerical operations return a representation of their applications in addition to the actual numeric result. Useful for visualizing foldl vs foldr and stuff. More generally speaking, evaluating an expression can return either its value, or its representation, supporting applications that would otherwise need reflection.||No further development planned. These days, there are more complete variants available on hackage.org (also in lambdabot?).|