86
Haskell Communities and Activities Report http://www.haskell.org/communities/ Sixteenth Edition — May 2009 Janis Voigtländer (ed.) Peter Achten Andy Adams-Moran Lloyd Allison Tiago Miguel Laureano Alves Krasimir Angelov Heinrich Apfelmus Emil Axelsson Arthur Baars Justin Bailey Alistair Bayley Jean-Philippe Bernardy Clifford Beshers Gwern Branwen Joachim Breitner Niklas Broberg Björn Buckwalter Denis Bueno Andrew Butterfield Roman Cheplyaka Olaf Chitil Jan Christiansen Sterling Clover Alberto Gómez Corona Duncan Coutts Jácome Cunha Nils Anders Danielsson Atze Dijkstra Robert Dockins Chris Eidhof Conal Elliott Henrique Ferreiro García Marc Fontaine Nicolas Frisby Peter Gavin Patai Gergely Brett G. Giles Andy Gill George Giorgidze Dimitry Golubovsky Daniel Gorin Jurriaan Hage Bastiaan Heeren Claude Heiland-Allen Aycan Irican Judah Jacobson Jan Martin Jansen Wolfgang Jeltsch Florian Haftmann Kevin Hammond Enzo Haussecker Christopher Lane Hinson Guillaume Hoffmann Martin Hofmann Creighton Hogg Csaba Hruska Liyang HU Paul Hudak Graham Hutton Farid Karimipour Garrin Kimmell Oleg Kiselyov Lennart Kolmodin Slawomir Kolodynski Michal Konečný Eric Kow Stephen Lavelle Sean Leather Huiqing Li Bas Lijnse Ben Lippmeier Andres Löh Rita Loogen Ian Lynagh John MacFarlane Christian Maeder José Pedro Magalhães Ketil Malde Blažević Mario Simon Marlow Michael Marte Bart Massey Simon Michael Arie Middelkoop Ivan Lazar Miljenovic Neil Mitchell Maarten de Mol Dino Morelli Matthew Naylor Rishiyur Nikhil Thomas van Noort Johan Nordlander Jeremy O’Donoghue Patrick O. Perry Jens Petersen Simon Peyton Jones Dan Popa Fabian Reck Claus Reinke Alexey Rodriguez Alberto Ruiz David Sabel Ingo Sander Uwe Schmidt Martijn Schrage Tom Schrijvers Paulo Silva Ben Sinclair Ganesh Sittampalam Martijn van Steenbergen Dominic Steinitz Don Stewart Jon Strait Martin Sulzmann Doaitse Swierstra Wouter Swierstra Hans van Thiel Henning Thielemann Wren Ng Thornton Phil Trinder Jared Updike Marcos Viera Miguel Vilaca David Waern Malcolm Wallace Jinjing Wang Kim-Ee Yeoh Brent Yorgey

Haskell Communities and Activities Report · This is the 16th edition of the Haskell Communities and Activities Report. There are a number of completely new entries and many small

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • Haskell Communities and Activities Reporthttp://www.haskell.org/communities/

    Sixteenth Edition — May 2009

    Janis Voigtländer (ed.)Peter Achten Andy Adams-Moran Lloyd Allison

    Tiago Miguel Laureano Alves Krasimir Angelov Heinrich ApfelmusEmil Axelsson Arthur Baars Justin BaileyAlistair Bayley Jean-Philippe Bernardy Clifford BeshersGwern Branwen Joachim Breitner Niklas Broberg

    Björn Buckwalter Denis Bueno Andrew ButterfieldRoman Cheplyaka Olaf Chitil Jan Christiansen

    Sterling Clover Alberto Gómez Corona Duncan CouttsJácome Cunha Nils Anders Danielsson Atze DijkstraRobert Dockins Chris Eidhof Conal Elliott

    Henrique Ferreiro García Marc Fontaine Nicolas FrisbyPeter Gavin Patai Gergely Brett G. GilesAndy Gill George Giorgidze Dimitry Golubovsky

    Daniel Gorin Jurriaan Hage Bastiaan HeerenClaude Heiland-Allen Aycan Irican Judah Jacobson

    Jan Martin Jansen Wolfgang Jeltsch Florian HaftmannKevin Hammond Enzo Haussecker Christopher Lane Hinson

    Guillaume Hoffmann Martin Hofmann Creighton HoggCsaba Hruska Liyang HU Paul Hudak

    Graham Hutton Farid Karimipour Garrin KimmellOleg Kiselyov Lennart Kolmodin Slawomir Kolodynski

    Michal Konečný Eric Kow Stephen LavelleSean Leather Huiqing Li Bas Lijnse

    Ben Lippmeier Andres Löh Rita LoogenIan Lynagh John MacFarlane Christian Maeder

    José Pedro Magalhães Ketil Malde Blažević MarioSimon Marlow Michael Marte Bart MasseySimon Michael Arie Middelkoop Ivan Lazar MiljenovicNeil Mitchell Maarten de Mol Dino Morelli

    Matthew Naylor Rishiyur Nikhil Thomas van NoortJohan Nordlander Jeremy O’Donoghue Patrick O. Perry

    Jens Petersen Simon Peyton Jones Dan PopaFabian Reck Claus Reinke Alexey RodriguezAlberto Ruiz David Sabel Ingo SanderUwe Schmidt Martijn Schrage Tom SchrijversPaulo Silva Ben Sinclair Ganesh Sittampalam

    Martijn van Steenbergen Dominic Steinitz Don StewartJon Strait Martin Sulzmann Doaitse Swierstra

    Wouter Swierstra Hans van Thiel Henning ThielemannWren Ng Thornton Phil Trinder Jared Updike

    Marcos Viera Miguel Vilaca David WaernMalcolm Wallace Jinjing Wang Kim-Ee Yeoh

    Brent Yorgey

    http://www.haskell.org/communities/

  • 2

  • Preface

    This is the 16th edition of the Haskell Communities and Activities Report. There are a numberof completely new entries and many small updates. As usual, fresh entries are formatted usinga blue background, while updated entries have a header with a blue background. Entries onwhich no activity has been reported for a year or longer have been dropped. Please do revivethem next time if you have news on them.

    My aim for October is to significantly increase the percentage of blue throughout the pagesof the report. Clearly, there are two ways to achieve this: have more blue or have less white.My preference is the former option, and I count on the community to make it feasible. In anycase, I will tend to be less conservative than this time around: I plan to drop, or simply replacewith pointers to previous versions, entries that see no update between now and then. A call fornew entries and updates to existing ones will be issued on the usual mailing lists.

    Now enjoy the current report and see what other Haskellers have been up to in the last halfyear. Any kind of feedback is of course very welcome 〈[email protected]〉, as are thoughts on theplan outlined above.

    Janis Voigtländer, Technische Universität Dresden, Germany

    3

    mailto: hcar at haskell.org

  • Contents

    1 Information Sources 91.1 Book: Programming in Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2 The Monad.Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3 Haskell Wikibook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.4 Monad Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.5 Oleg’s Mini tutorials and assorted small projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.6 Haskell Cheat Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.7 The Happstack Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2 Implementations 122.1 The Glasgow Haskell Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 nhc98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 The Helium compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4 UHC, Utrecht Haskell Compiler (previously: EHC, “Essential Haskell” compiler) . . . . . . . . . . 142.5 Hugs as Yhc Core Producer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.6 Haskell frontend for the Clean compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.7 SAPL, Simple Application Programming Language . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.8 The Reduceron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.9 Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.9.1 Haskell in Gentoo Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.9.2 Fedora Haskell SIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.9.3 GHC on OpenSPARC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    3 Language 183.1 Extensions of Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.1 Haskell Server Pages (HSP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.2 GpH — Glasgow Parallel Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.3 Eden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.1.4 XHaskell project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.1.5 HaskellActor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.1.6 HaskellJoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2 Related Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2.1 Curry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2.2 Agda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.3 Clean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.4 Timber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.3 Type System / Program Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.3.1 Free Theorems for Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.3.2 The Disciplined Disciple Compiler (DDC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4 Tools 244.1 Scanning, Parsing, Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1.1 Alex version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1.2 Happy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1.3 UUAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.2 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.1 Haddock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.2 lhs2TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.3 Testing, Debugging, and Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.3.1 SmallCheck and Lazy SmallCheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.3.2 EasyCheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3.3 checkers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4

  • 4.3.4 Gast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3.5 Concurrent Haskell Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3.6 Hpc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3.7 SourceGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3.8 HLint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.3.9 hp2any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.4 Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.4.1 Hoogle — Haskell API Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.4.2 HEAT: The Haskell Educational Advancement Tool . . . . . . . . . . . . . . . . . . . . . . . . . . 284.4.3 Haskell Mode Plugins for Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.4.4 yi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.4.5 HaRe — The Haskell Refactorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.4.6 DarcsWatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.4.7 cpphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    5 Libraries 315.1 Cabal and Hackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.2 Haskell Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.3 Auxiliary Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.3.1 libmpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.3.2 hmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.3.3 The Neon Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.3.4 unamb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.3.5 leapseconds-announced . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.4 Processing Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.4.1 hint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.4.2 mueval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.4.3 hscolour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5 Parsing and Transforming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5.1 HStringTemplate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5.2 CoreErlang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5.3 parse-dimacs: A DIMACS CNF Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5.4 InterpreterLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.5.5 KURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355.5.6 Typed Transformations of Typed Abstract Syntax (TTTAS) . . . . . . . . . . . . . . . . . . . . . 355.5.7 ChristmasTree (previously: GRead) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.5.8 Utrecht Parser Combinator Library: Old version . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.5.9 Utrecht Parser Combinator Library: New version . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.6 Mathematical Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.6.1 Halculon: units and physical constants database . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.6.2 Numeric prelude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.6.3 vector-space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.6.4 Nat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.6.5 AERN-Real and friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.6.6 Haskell BLAS Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.6.7 logfloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.6.8 fad: Forward Automatic Differentiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.7 Data types and data structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.7.1 HList — a library for typed heterogeneous collections . . . . . . . . . . . . . . . . . . . . . . . . . 405.7.2 Edison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.7.3 MemoTrie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.7.4 bytestring-trie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.8 Data processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.8.1 The Haskell Cryptographic Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.8.2 The Haskell ASN.1 Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.8.3 MultiSetRewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.8.4 Graphalyze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.8.5 Takusen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    5

  • 5.9 Generic and Type-Level Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.9.1 uniplate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.9.2 Scrap Your Boilerplate (SYB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.9.3 Extensible and Modular Generics for the Masses (EMGM) . . . . . . . . . . . . . . . . . . . . . . . 435.9.4 multirec: Generic programming with systems of recursive datatypes . . . . . . . . . . . . . . . . . 445.9.5 Generic rewriting library for regular datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.9.6 2LT: Two-Level Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.9.7 Data.Label — “atoms” for type-level programming . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.10 User interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.10.1 Gtk2Hs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.10.2 HQK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.10.3 wxHaskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.10.4 Shellac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.10.5 Haskeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.11 Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.11.1 diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.11.2 FieldTrip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.11.3 LambdaCube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.12 Music . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.12.1 Haskore revision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.12.2 Euterpea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.13 Web and XML programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.13.1 Haskell XML Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.13.2 HaXml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.13.3 tagsoup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.14 System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.14.1 hinotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.14.2 hlibev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    6 Applications and Projects 536.1 For the Masses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536.1.1 Darcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536.1.2 xmonad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536.2 Education . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546.2.1 Exercise Assistants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546.2.2 Holmes, plagiarism detection for Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546.2.3 Lambda Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546.2.4 INblobs — Interaction Nets interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.2.5 Soccer-Fun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.3 Web Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.3.1 Holumbus Search Engine Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.3.2 Top Writer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3.3 Bamboo blog engine (previously: Panda) / Hack Webserver interface . . . . . . . . . . . . . . . . . 576.3.4 InputYourData.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3.5 Hircules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.3.6 HCluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.3.7 JavaScript Monadic Writer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.3.8 Haskell DOM Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.4 Data Management and Visualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.4.1 Pandoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.4.2 tiddlyisar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.4.3 HaExcel — From Spreadsheets to Relational Databases and Back . . . . . . . . . . . . . . . . . . . 606.4.4 Between Types and Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606.4.5 SdfMetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606.4.6 The Proxima 2.0 generic editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.5 Functional Reactive Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.5.1 Grapefruit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.5.2 Reactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    6

  • 6.5.3 Functional Hybrid Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626.5.4 Elerea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.6 Audio and Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.6.1 Audio signal processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.6.2 hsProcMusic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.6.3 easyVision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.6.4 photoname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.6.5 Simplex-Based Spatial Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.6.6 n-Dimensional Convex Decomposition of Polytops . . . . . . . . . . . . . . . . . . . . . . . . . . . 656.6.7 DVD2473 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666.7 Proof Assistants and Reasoning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666.7.1 Galculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666.7.2 funsat: DPLL-style Satisfiability Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666.7.3 Saoithín: a 2nd-order proof assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.7.4 Inference Services for Hybrid Logics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.7.5 HyLoRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.7.6 HTab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.7.7 HGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.7.8 Sparkle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.7.9 Haskabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.8 Modeling and Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.8.1 Streaming Component Combinators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.8.2 Raskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696.8.3 iTasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696.8.4 CSP-M Tools at University of Düsseldorf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706.9 Hardware Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706.9.1 ForSyDe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706.9.2 Lava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.9.3 Wired . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.9.4 Oread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.10 Natural Language Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.10.1 NLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.10.2 GenI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.10.3 Grammatical Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.11 Inductive Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.11.1 Inductive Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.11.2 IgorII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.12 Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.12.1 Bioinformatics tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.12.2 Roguestar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.12.3 Hpysics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.12.4 hledger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.12.5 LQPL — A quantum programming language compiler and emulator . . . . . . . . . . . . . . . . . 756.12.6 Yogurt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.12.7 Dyna 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    7 Commercial Users 777.1 Well-Typed LLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.2 SeeReason Partners, LLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.3 Credit Suisse Global Modeling and Analytics Group . . . . . . . . . . . . . . . . . . . . . . . . . . 777.4 Bluespec tools for design of complex chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.5 Galois, Inc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.6 IVU Traffic Technologies AG Rostering Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.7 Tupil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807.8 Aflexi Content Delivery Network (CDN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807.9 Industrial Haskell Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    7

  • 8 Research and User Groups 818.1 Functional Programming Lab at the University of Nottingham . . . . . . . . . . . . . . . . . . . . 818.2 Artificial Intelligence and Software Technology at Goethe-University Frankfurt . . . . . . . . . . . 828.3 Functional Programming at the University of Kent . . . . . . . . . . . . . . . . . . . . . . . . . . . 828.4 Foundations and Methods Group at Trinity College Dublin . . . . . . . . . . . . . . . . . . . . . . 838.5 Formal Methods at DFKI Bremen and University of Bremen . . . . . . . . . . . . . . . . . . . . . 838.6 SCIence project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.7 Haskell at K.U.Leuven, Belgium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848.8 Haskell in Romania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848.9 Assorted Small Portland State University Haskell Bits . . . . . . . . . . . . . . . . . . . . . . . . . 858.10 fp-syd: Functional Programming in Sydney, Australia. . . . . . . . . . . . . . . . . . . . . . . . . . 86

    8

  • 1 Information Sources

    1.1 Book: Programming in Haskell

    Report by: Graham Hutton

    Haskell is one of the leading languages for teachingfunctional programming, enabling students to writesimpler and cleaner code, and to learn how to structureand reason about programs. This introduction is idealfor beginners: it requires no previous programming ex-perience and all concepts are explained from first prin-ciples via carefully chosen examples. Each chapter in-cludes exercises that range from the straightforward toextended projects, plus suggestions for further readingon more advanced topics. The presentation is clearand simple, and benefits from having been refined andclass-tested over several years.

    Features include: freely accessible PowerPoint slidesfor each chapter; solutions to exercises, and examina-tion questions (with solutions) available to instructors;downloadable code that is compliant with the latestHaskell release.Publication details:◦ Published by Cambridge University Press, 2007.

    Paperback: ISBN 0521692695; Hardback: ISBN:0521871727; eBook: ISBN 051129218X; Kindle:ASIN B001FSKE6Q.

    In-depth review:◦ Duncan Coutts, The Monad.Reader (→ 1.2),

    http://www.haskell.org/sitewiki/images/0/03/TMR-Issue7.pdf

    Further reading

    http://www.cs.nott.ac.uk/~gmh/book.html

    1.2 The Monad.Reader

    Report by: Wouter Swierstra

    There are plenty of academic papers about Haskell andplenty of informative pages on the HaskellWiki. Unfor-tunately, there is not much between the two extremes.That is where The Monad.Reader tries to fit in: moreformal than a Wiki page, but more casual than a jour-nal article.

    There are plenty of interesting ideas that maybe donot warrant an academic publication — but that doesnot mean these ideas are not worth writing about!Communicating ideas to a wide audience is much moreimportant than concealing them in some esoteric jour-nal. Even if it has all been done before in the Journal

    of Impossibly Complicated Theoretical Stuff, explain-ing a neat idea about “warm fuzzy things” to the restof us can still be plain fun.

    The Monad.Reader is also a great place to writeabout a tool or application that deserves more atten-tion. Most programmers do not enjoy writing manuals;writing a tutorial for The Monad.Reader, however, isan excellent way to put your code in the limelight andreach hundreds of potential users.

    Since the last HCAR there have been two new is-sues, including another “Summer of Code” special.With your submissions, I expect we can keep publishingquarterly issues of the Monad.Reader. Check out theMonad.Reader homepage for all the information youneed to start writing your article.

    Further reading

    http://www.haskell.org/haskellwiki/The_Monad.Reader

    1.3 Haskell Wikibook

    Report by: Heinrich ApfelmusParticipants: Eric Kow, David House, Joeri van Eekelen,

    and other contributorsStatus: active development

    The goal of the Haskell wikibook project is to build acommunity textbook about Haskell that is at once free(as in freedom and in beer), gentle, and comprehensive.We think that the many marvelous ideas of lazy func-tional programming can and thus should be accessibleto everyone in a central place.

    Currently, the wikibook is slowly advancing in breathrather than depth, with a new sketch of a chapter onpolymorphism and higher rank types, and a new pageon Monoids. Additional authors and contributors thathelp writing new contents or simply spot mistakes andask those questions we had never thought of are morethan welcome!

    Further reading

    ◦ http://en.wikibooks.org/wiki/Haskell◦ Mailing list: 〈[email protected]

    1.4 Monad Tutorial

    Report by: Hans van ThielStatus: stable, might be expanded later

    9

    http://www.haskell.org/sitewiki/images/0/03/TMR-Issue7.pdfhttp://www.haskell.org/sitewiki/images/0/03/TMR-Issue7.pdfhttp://www.cs.nott.ac.uk/~gmh/book.htmlhttp://www.haskell.org/haskellwiki/The_Monad.Readerhttp://en.wikibooks.org/wiki/Haskellmailto: wikibook at haskell.org

  • The “Greenhorn’s Guide to becoming a Monad Cow-boy” is yet another monad tutorial. It covers the basics,with simple examples, and includes monad transform-ers and monadic functions. The didactic style is a vari-ation on the “for dummies” format. Estimated learningtime, for a monad novice, is 2–3 days. It is available athttp://www.muitovar.com/monad/moncow.xhtml

    Further reading

    http://www.muitovar.com/

    1.5 Oleg’s Mini tutorials andassorted small projects

    Report by: Oleg Kiselyov

    The collection of various Haskell mini tutorials andassorted small projects (http://okmij.org/ftp/Haskell/)has received two additions:

    Monadic Regions

    Monadic Regions is a technique for managing resourcessuch as memory areas, file handles, database connec-tions, etc. Regions offer an attractive alternative toboth manual allocation of resources and garbage col-lection. Unlike the latter, region-based resource man-agement makes resource disposal and finalization pre-dictable. We can precisely identify the program pointswhere allocated resources are freed and finalization ac-tions are run. Like other automatic resource manage-ments schemes, regions statically assure us that no re-source is used after it is disposed of, no resource is freedtwice, and all resources are eventually deallocated.

    We first describe a very simple implementation ofMonadic Regions for the particular case of file IO, stat-ically ensuring that there are no attempts to access analready closed file handle, and all open file handles areeventually closed. Many handles can be open simulta-neously; the type system enforces the proper nestingof their regions. The technique has no run-time over-head and induces no run-time errors, requiring only therank-2–type extension to Haskell 98. The technique un-derlies safe database interfaces of Takusen.

    The simplicity of the implementation comes with alimitation: it is impossible to store file handles in refer-ence cells and return them from an inner region, evenwhen it is safe to do so. We show that practice oftenrequires more flexible region policies.

    With Chung-chieh Shan, we developed a novel, im-proved, and extended implementation of the Fluet andMorrisett’s calculus of nested regions in Haskell, withfile handles as resources. Our library supports regionpolymorphism and implicit region subtyping, alongwith higher-order functions, mutable state, recursion,

    and run-time exceptions. A program may allocate ar-bitrarily many resources and dispose of them in anyorder, not necessarily LIFO. Region annotations arepart of an expression’s inferred type. Our implemen-tation assures timely deallocation even when resourceshave markedly different lifetimes and the identity of thelongest-living resource is determined only dynamically.

    For contrast, we also implement a Haskell libraryfor manual resource management, where deallocation isexplicit and safety is assured by a form of linear types.We implement the linear typing in Haskell with thehelp of phantom types and a parameterized monad tostatically track the type-state of resources.http://okmij.org/ftp/Haskell/regions.html

    Variable (type)state “monad”

    The familiar State monad lets us represent computa-tions with a state that can be queried and updated.The state must have the same type during the entirecomputation however. One sometimes wants to ex-press a computation where not only the value but alsothe type of the state can be updated – while main-taining static typing. We wish for a parameterized“monad” that indexes each monadic type by an initial(type)state and a final (type) state. The effect of an ef-fectful computation thus becomes apparent in the typeof the computation, and so can be statically reasonedabout.

    In a parameterized monad m p q a, m is a type con-structor of three type arguments. The argument a isthe type of values produced by the monadic compu-tation. The two other arguments describe the type ofthe computation state before and after the computa-tion is executed. As in ordinary monad, bind is re-quired to be associative and ret to be the left and theright unit of bind. All ordinary monads are particularcase of parameterized monads, when p and q are thesame and constant throughout the computation. Likethe ordinary class monad, parameterized monads areimplementable in Haskell 98.

    The web page describes various applications of thetype-state Monad:

    ◦ IO-like monad that statically enforces a locking pro-tocol;

    ◦ statically tracking ticks so to enforce timing and pro-tocol restrictions when writing device drivers andtheir generators;

    ◦ implementing a form of linear types for resourcemanagement.

    http://okmij.org/ftp/Computation/monads.html#param-monad

    10

    http://www.muitovar.com/monad/moncow.xhtmlhttp://www.muitovar.com/http://okmij.org/ftp/Haskell/http://okmij.org/ftp/Haskell/regions.htmlhttp://okmij.org/ftp/Computation/monads.html#param-monadhttp://okmij.org/ftp/Computation/monads.html#param-monad

  • 1.6 Haskell Cheat Sheet

    Report by: Justin Bailey

    The “Haskell Cheat Sheet” covers the syntax, key-words, and other language elements of Haskell 98. Itis intended for beginning to intermediate Haskell pro-grammers and can even serve as a memory aid to ex-perts.

    The cheat sheet is distributed as a PDF and exe-cutable source file in one package. It is available fromHackage and can be installed with cabal.

    Further reading

    http://cheatsheet.codeslower.com

    1.7 The Happstack Tutorial

    Report by: Creighton Hogg

    The Happstack Tutorial aims to be a definitive, up-to-date, resource for how to use the Happstack libraries.I have recently taken over the project from ThomasHartman. An instance of the Happstack Tutorial isrunning as a stand-alone website, but in order to trulydig into writing Happstack applications you can cabalinstall it from Hackage and experiment with it locally.

    Happstack Tutorial is updated along with the Happ-stack Hackage releases, but the darcs head is generallycompatible with the darcs head of Happstack.

    I am adding a few small tutorials to the package withevery release and am always looking for more feedbackfrom beginning Happstack users.

    Further reading

    ◦ http://tutorial.happstack.com◦ http://patch-tag.com/repo/happstack-tutorial

    11

    http://cheatsheet.codeslower.comhttp://tutorial.happstack.comhttp://patch-tag.com/repo/happstack-tutorial

  • 2 Implementations

    2.1 The Glasgow Haskell Compiler

    Report by: Simon Peyton JonesParticipants: many others

    The last six months have been busy ones for GHC.

    The GHC 6.10 branch

    We finally released GHC 6.10.1 on 4 November 2008,with a raft of new features we discussed in the October2008 status report.

    A little over five months later we released GHC6.10.2, with more than 200 new patches fixing morethan 100 tickets raised against 6.10.1. We hoped thatwould be it for the 6.10 branch, but we slipped up and6.10.2 contained a couple of annoying regressions (con-cerning Control-C and editline). By the time you readthis, GHC 6.10.3 (fixing these regressions) should beout, after which we hope to shift all our attention tothe 6.12 branch.

    The new build system

    Our old multi-makefile build system had grown old,crufty, hard to understand. And it did not even workvery well. So we embarked on a plan to re-implementthe build system. Rather than impose the new systemon everyone immediately, Ian and Simon (Marlow) didall the development on a branch, and invited othersto give it a whirl. Finally, on 25 April 2009, we went“live” on the HEAD.

    The new design is described on the Wiki. It stilluses make, but it is now based on a non-recursivemake strategy. This means that dependency tracking isvastly more accurate than before, so that if something“should” be built it “will” be built.

    The new build system is also much less dependenton Cabal than it was before. We now use Cabal onlyto read package meta-data from the .cabal file,and emit a bunch of Makefile bindings. Everything elseis done in make. You can read more about the designrationale on the Wiki.

    We also advertised our intent to switch to Git asour version control system (VCS). We always plannedto change the build system first, and only then tacklethe VCS. Since then, there has been lots of activityon the Darcs front, so it is not clear how high prioritymaking this change is. We would welcome your opinion(〈[email protected]〉).

    The GHC 6.12 branch

    The main list of new features in GHC 6.12 remainsmuch the same as it was in our last status report. Hap-pily, there has been progress on all fronts.

    Parallel performance

    Simon Marlow has been working on improving perfor-mance for parallel programs, and there will be signifi-cant improvements to be had in 6.12 compared to 6.10.In particular

    ◦ There is an implementation of lock-free work-stealingqueues, used for load-balancing of sparks and also inthe parallel GC. Initial work on this was done by JostBerthold.

    ◦ The parallel GC itself has been tuned to retain lo-cality in parallel programs. Some speedups are dra-matic.

    ◦ The overhead for running a spark is much lower, assparks are now run in batches rather than creatinga new thread for each one. This makes it possible totake advantage of parallelism at a much finer granu-larity than before.

    ◦ There is optional “eager-blackholing”, with the new-feager-blackholing flag, which can help elimi-nate duplicate computation in parallel programs.

    Our recent ICFP submission Runtime Support forMulticore Haskell describes all these in more detail,and gives extensive measurements.

    Things are not in their final state yet: for example,we still need to work on tuning the default flag settingsto get good performance for more programs withoutany manual tweaking. There are some larger possibili-ties on the horizon too, such as redesigning the garbagecollector to support per-CPU independent GC, whichwill reduce the synchronization overheads of the cur-rent stop-the-world strategy.

    Parallel profiling

    GHC 6.12 will feature parallel profiling in the formof ThreadScope, under development by Satnam Singh,Donnie Jones and Simon Marlow. Support has beenadded to GHC for lightweight runtime tracing (workoriginally done by Donnie Jones), which is used byThreadScope to generate profiles of the program’s real-time execution behavior. This work is still in the veryearly stages, and there are many interesting directionswe could take this in.

    12

    mailto: cvs-ghc at haskell.orghttp://ghcmutterings.wordpress.com/2009/03/03/new-paper-runtime-support-for-multicore-haskell/http://ghcmutterings.wordpress.com/2009/03/03/new-paper-runtime-support-for-multicore-haskell/http://raintown.org/?page_id=132

  • Data Parallel Haskell

    Data Parallel Haskell remains under very active devel-opment by Manuel Chakravarty, Gabriele Keller, Ro-man Leshchinskiy, and Simon Peyton Jones. The cur-rent state of play is documented on the Wiki. We alsowrote a substantial paper Harnessing the multicores:nested data parallelism in Haskell for FSTTCS 2008;you may find this paper a useful tutorial on the wholeidea of nested data parallelism.

    The system currently works well for small programs,such as computing a dot product or the product of asparse matrix with a dense vector. For such applica-tions, the generated code is as close to hand writtenC code as GHC’s current code generator enables usto be (i.e., within a factor of 2 or 3). We ran threesmall benchmarks on an 8-core x86 server and on an 8-core UltraSPARC T2 server, from which we derived twocomparative figures: a comparison between x86 and T2on a memory-intensive benchmark (dot product) anda summary of the speedup of three benchmarks on x86and T2. Overall, we achieved good absolute perfor-mance and good scalability on the hardware we tested.

    Our next step is to scale the implementation up toproperly handle larger programs. In particular, weare currently working on improving the interaction be-tween vectorized code, the aggressively-inlined arraylibrary, and GHC’s standard optimization phases. Thecurrent main obstacle is excessively long compile times,due to a temporary code explosion during optimization.Moreover, Gabriele started to work on integrating spe-cialized support for regular multi-dimensional arraysinto the existing framework for nested data parallelism.

    Type system improvements

    The whole area of GADTs, indexed type families, andassociated types remains in a ferment of development.It is clear that type families are jolly useful: manypeople are using them even though they are only par-tially supported by GHC 6.10. (You might enjoy aprogrammers-eye-view tutorial Fun with type functionsthat Oleg, Ken, and Simon wrote in April 2009.)

    But these new features have made the type infer-ence engine pretty complicated, and Simon PJ, ManuelChakravarty, Tom Schrijvers, Dimitrios Vytiniotis, andMartin Sulzmann have been busy thinking about waysto make type inference simpler and more uniform. OurICFP’08 paper Type checking with open type functionswas a first stab (which we subsequently managed tosimplify quite a bit). Our new paper (to be presentedat ICFP’09) Complete and decidable type inference forGADTs tackles a different part of the problem. And weare not done yet; for example, our new inference frame-work is designed to smoothly accommodate Dimitrios’work on FPH: First class polymorphism for Haskell(ICFP’08).

    Other developments

    ◦ Max Bolingbroke has revised and simplified his Dy-namically Loaded Plugins summer of code project,and we (continue to) plan to merge it into 6.12. Partof this is already merged: a new, modular systemfor annotations, rather like Java or C# attributes.These attributes are persisted into interface files, canbe examined and created by plugins, or by GHC APIclients.

    ◦ John Dias has continued work on rewriting GHC’sbackend. You can find an overview of the new ar-chitecture on the Wiki. He and Norman and Simonwrote Dataflow optimisation made simple, a paperabout the dataflow optimization framework that thenew back end embodies. Needless to say, the act ofwriting the paper has made us re-design the frame-work, so at the time of writing it still is not on GHC’smain compilation path. But it will be.

    ◦ Shared Libraries are inching ever closer to being com-pleted. Duncan Coutts has taken up the reins andis pushing our shared library support towards a fullyworking state. This project is supported by the In-dustrial Haskell Group.

    ◦ Unicode text I/O support is at the testing stage, andshould be merged in in time for 6.12.1.

    2.2 nhc98

    Report by: Malcolm WallaceStatus: stable, maintained

    nhc98 is a small, easy to install, compiler for Haskell’98.nhc98 is still very much alive and working, although itdoes not see many new features these days. We expecta new public release (1.22) soon, to coincide with therelease of ghc-6.10.x, in particular to ensure that theincluded libraries are compatible across compilers.

    Further reading

    ◦ http://haskell.org/nhc98◦ darcs get http://darcs.haskell.org/nhc98

    2.3 The Helium compiler

    Report by: Jurriaan HageParticipants: Bastiaan Heeren, Arie Middelkoop

    Helium is a compiler that supports a substantial sub-set of Haskell 98 (but, e.g., n+k patterns are missing).Type classes are restricted to a number of built-in typeclasses and all instances are derived. The advantage of

    13

    http://research.microsoft.com/~simonpj/papers/ndphttp://research.microsoft.com/~simonpj/papers/ndphttp://justtesting.org/post/83014052/this-is-the-performance-of-a-dot-product-of-twohttp://justtesting.org/post/83014052/this-is-the-performance-of-a-dot-product-of-twohttp://justtesting.org/post/85103645/these-graphs-summarise-the-performance-of-datahttp://justtesting.org/post/85103645/these-graphs-summarise-the-performance-of-datahttp://research.microsoft.com/~simonpj/papers/assoc-typeshttp://research.microsoft.com/~simonpj/papers/assoc-typeshttp://research.microsoft.com/~simonpj/papers/gadthttp://research.microsoft.com/~simonpj/papers/gadthttp://research.microsoft.com/~simonpj/papers/boxy/http://research.microsoft.com/~simonpj/papers/boxy/http://research.microsoft.com/~simonpj/papers/c--http://www.haskell.org/pipermail/glasgow-haskell-users/2009-February/016558.htmlhttp://haskell.org/nhc98http://darcs.haskell.org/nhc98

  • Helium is that it generates novice friendly error feed-back. The latest versions of the Helium compiler areavailable for download from the new website locatedat http://www.cs.uu.nl/wiki/Helium. This website alsoexplains in detail what Helium is about, what it offers,and what we plan to do in the near and far future.

    We are still working on making version 1.7 available,mainly a matter of updating the documentation andtesting the system. Internally little has changed, butthe interface to the system has been standardized, andthe functionality of the interpreters has been improvedand made consistent. We have made new options avail-able (such as those that govern where programs arelogged to). The use of Helium from the interpreters isnow governed by a configuration file, which makes theuse of Helium from the interpreters quite transparentfor the programmer. It is also possible to use differ-ent versions of Helium side by side (motivated by thedevelopment of Neon (→ 5.3.3)).

    A student has added parsing and static checking fortype class and instance definitions to the language, buttype inferencing and code generating still need to beadded. The work on the documentation has progressedquite a bit, but there has been little testing thus far,especially on a platform such as Windows.

    2.4 UHC, Utrecht Haskell Compiler(previously: EHC, “Essential Haskell”compiler)

    Report by: Atze DijkstraParticipants: Jeroen Fokker, Doaitse Swierstra, Arie

    Middelkoop, Lucília Camarão deFigueiredo, Carlos Camarão de Figueiredo

    Status: active development

    What is UHC? and EHC? UHC is the UtrechtHaskell Compiler, supporting almost all Haskell 98 fea-tures plus many experimental extensions. The first re-lease of UHC was announced on April 18 at the 5thHaskell Hackathon, held in Utrecht.

    EHC is the Essential Haskell Compiler project, a se-ries of compilers of which the last is UHC, plus an as-pectwise organized infrastructure for facilitating exper-imentation and extension.

    The end-user will probably only be aware of UHCas a Haskell compiler, whereas compiler writers will bemore aware of the internals known as EHC. The nameEHC however will disappear over time, both EHC andUHC together will be branded as UHC.

    UHC in its current state still very much is work inprogress. Although we feel it is stable enough to offerthe public, much work needs to be done to make it us-able for serious development work. By design its strongpoint is the internal aspectwise organization which westarted as EHC. UHC also offers more advanced and ex-perimental features like higher-ranked polymorphism,

    partial type signatures, and local instances.

    Under the hood For the description of UHC an At-tribute Grammar system (AG) is used as well as otherformalisms allowing compact notation like parser com-binators. For the description of type rules, and the gen-eration of an AG implementation for those type rules,we use the Ruler system. For source code managementwe use Shuffle, which allows partitioning the systeminto a sequence of steps and aspects. (Both Ruler andShuffle are included in UHC).

    The implementation of UHC also tackles other issues:

    ◦ To deal with the inherent complexity of a compilerthe implementation of UHC is organized as a seriesof increasingly complex steps. Each step correspondsto a Haskell subset which itself is an extension of theprevious step. The first step starts with the essen-tials, namely typed lambda calculus; the last stepcorresponds to UHC.

    ◦ Independent of each step the implementation is or-ganized into a set of aspects. Currently the typesystem and code generation are defined as aspects,which can then be left out so the remaining part canbe used as a barebones starting point.

    ◦ Each combination of step + aspects corresponds toan actual, that is, an executable compiler. Each ofthese compilers is a compiler in its own right.

    ◦ The description of the compiler uses code fragmentswhich are retrieved from the source code of the com-pilers. In this way the description and source codeare kept synchronized.

    Part of the description of the series of EH compilersis available as a PhD thesis.

    What is UHC’s status, what is new?

    ◦ UHC has seen daylight as a first release. At thetime of this writing the current release is 1.0.1, fixingreported installation problems.

    ◦ Previously started work is still continuing: GRINbackend, full program analysis (Jeroen Fokker), typesystem formalization and automatic generation fromtype rules (Lucília Camarão de Figueiredo, Arie Mid-delkoop).

    What will happen with UHC in the near future? Weplan to do the following:

    ◦ Improving installation of UHC and its use as aHaskell compiler: use of Cabal, adding missingHaskell 98 features.

    ◦ Work on adding static analyses (such as strictnessanalysis), to enable optimizations.

    14

    http://www.cs.uu.nl/wiki/Helium

  • Further reading

    ◦ UHC Homepage: http://www.cs.uu.nl/wiki/UHC/WebHome

    ◦ Attribute grammar system: http://www.cs.uu.nl/wiki/HUT/AttributeGrammarSystem

    ◦ Parser combinators: http://www.cs.uu.nl/wiki/HUT/ParserCombinators

    ◦ Shuffle: http://www.cs.uu.nl/wiki/Ehc/Shuffle◦ Ruler: http://www.cs.uu.nl/wiki/Ehc/Ruler

    2.5 Hugs as Yhc Core Producer

    Report by: Dimitry GolubovskyStatus: experimental

    Background

    Hugs is one of the oldest implementations of Haskellknown, an interactive compiler and bytecode inter-preter. Yhc is a fork of nhc98 (→ 2.2). Yhc Core isan intermediate form Yhc uses to represent a compiledHaskell program.

    Yhc converts each Haskell module to a binary YhcCore file. Core modules are linked together, and allredundant (unreachable) code is removed. The LinkedCore is ready for further conversions by backends.

    Hugs loads Haskell modules into memory and storesthem in a way to some degree similar to Yhc Core.Hugs is capable to dump its internal storage structurein textual form (let us call it Hugs Core). The outputlooks similar to Yhc Core, pretty-printed. This was ini-tially intended for debugging purposes, however severalHugs CVS (now darcs) log records related such outputto some “Snowball Haskell compiler” ca. 2001.

    The experiment

    The goal of the experiment described here was to con-vert Hugs Core into Yhc Core, so Hugs might becomea frontend for existing and future Yhc Core optimiz-ers and backends. At least one benefit is clear: Hugsis well maintained to be compatible with recent ver-sions of Haskell libraries and supports many of Haskelllanguage extensions that Yhc does not yet support.

    The necessary patches were pushed to the main Hugsrepository in June 2008, thanks to Ross Paterson forreviewing them. The following changes were made:

    1. A configuration option was added to enable the gen-eration of Hugs Core.

    2. The toplevel Makefile was modified to build an ad-ditional executable, corehugs.

    3. Consistency of Hugs Core output in terms of namingof modules and functions was improved.

    The corehugs program converts Haskell source filesinto Hugs Core files, one for one. All functions anddata constructors are preserved in the output, whetherreachable or not. Unreachable items will be removedlater using Yhc Core tools.

    The conversion of Hugs Core to Yhc Core is per-formed outside of Hugs using the hugs2yc package.The package provides a parser for the syntax of HugsCore and an interface to the Yhc Core Linker. All HugsCore files written by corehugs are read in and parsed,resulting in the set of Yhc Core modules in memory.The modules are linked together using the Yhc CoreLinker, and all unreachable items are removed at thispoint. A “driver” program that uses the package maysave the linked Yhc Core in a file, or pass it on to abackend. The code of the hugs2yc package is compat-ible to both Hugs and GHC.

    Availability

    In order to use the new Hugs functionality, obtainHugs from the “HEAD” darcs repo, see http://hackage.haskell.org/trac/hugs/wiki/GettingTheSource. However,Hugs obtained in such a way may not always compile.This Google Code project: http://code.google.com/p/corehugs/ hosts specialized snapshots of Hugs that aremore likely to build on a random computer and also in-clude additional packages necessary to work with YhcCore.

    Future plans

    Further effort will be taken to standardize various as-pects of Yhc Core, especially the specification of prim-itives, because all backends must implement them uni-formly. This Google spreadsheet: http://tinyurl.com/prim-normal-set contains the proposal for an unified setof Yhc Core primitives.

    Work is in progress on various backends for YhcCore, including JavaScript, Erlang, Python, JVM,.NET, and others. This Wiki page: http://tinyurl.com/ycore-conv-infra summarizes their development status.

    There were no significant changes, additions, or im-provements made to the project since November 2008.After more testing and bugfixing, the Cabal packagewith Hugs front-end to Yhc Core was released on Hack-age. Also, the corehugs project page was updatedwith new custom Hugs snapshot (as of February 16,2009); this snapshot is recommended for experimentswith Yhc Core.

    Further reading

    ◦ Yhc Core conversion infrastructurehttp://tinyurl.com/ycore-conv-infra

    ◦ Download Hugs specialized snapshotshttp://code.google.com/p/corehugs/

    15

    http://www.cs.uu.nl/wiki/UHC/WebHomehttp://www.cs.uu.nl/wiki/UHC/WebHomehttp://www.cs.uu.nl/wiki/HUT/AttributeGrammarSystemhttp://www.cs.uu.nl/wiki/HUT/AttributeGrammarSystemhttp://www.cs.uu.nl/wiki/HUT/ParserCombinatorshttp://www.cs.uu.nl/wiki/HUT/ParserCombinatorshttp://www.cs.uu.nl/wiki/Ehc/Shufflehttp://www.cs.uu.nl/wiki/Ehc/Rulerhttp://hackage.haskell.org/trac/hugs/wiki/GettingTheSourcehttp://hackage.haskell.org/trac/hugs/wiki/GettingTheSourcehttp://code.google.com/p/corehugs/http://code.google.com/p/corehugs/http://tinyurl.com/prim-normal-sethttp://tinyurl.com/prim-normal-sethttp://tinyurl.com/ycore-conv-infrahttp://tinyurl.com/ycore-conv-infrahttp://tinyurl.com/ycore-conv-infrahttp://code.google.com/p/corehugs/

  • ◦ Proposed specification of the Normal Set of primi-tiveshttp://tinyurl.com/prim-normal-set

    ◦ A brief example of using corehugshttp://code.google.com/p/corehugs/wiki/Demonstration

    ◦ The hugs2yc package on Hackagehttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/hugs2yc

    ◦ The corehugs project downloads pagehttp://code.google.com/p/corehugs/downloads/list

    2.6 Haskell frontend for the Cleancompiler

    Report by: Thomas van NoortParticipants: John van Groningen, Rinus PlasmeijerStatus: active development

    We are currently working on a frontend for the Cleancompiler (→ 3.2.3) that supports a subset of Haskell 98.This will allow Clean modules to import Haskell mod-ules, and vice versa. Furthermore, we will be able touse some of Clean’s features in Haskell code, and viceversa. For example, we could define a Haskell modulewhich uses Clean’s uniqueness typing, or a Clean mod-ule which uses Haskell’s newtypes. The possibilities areendless!

    Future plans

    Although a beta version of the new Clean compiler isreleased last year to the institution in Nijmegen, thereis still a lot of work to do before we are able to release itto the outside world. So we cannot make any promisesregarding the release date. Just keep an eye on theClean mailing lists for any important announcements!

    Further reading

    http://wiki.clean.cs.ru.nl/Mailing_lists

    2.7 SAPL, Simple ApplicationProgramming Language

    Report by: Jan Martin JansenStatus: experimental, active development

    SAPL is an experimental interpreter for a lazy func-tional intermediate language. The language is more orless equivalent to the core language of Clean (→ 3.2.3).SAPL implementations in C and Java exist. It is possi-ble the write SAPL programs directly, but the preferreduse is to generate SAPL. We already implemented anexperimental version of the Clean compiler that gen-erates SAPL as well. The Java version of the SAPL

    interpreter can be loaded as a PlugIn in web appli-cations. Currently we use it to evaluate tasks fromthe iTask 6.8.3 system at the client side and to handle(mouse) events generated by a drawing canvas PlugIn.

    Future plans

    For the near future we have planned to make the Cleanto SAPL compiler available in the standard Clean dis-tribution. Also some further performance improve-ments of SAPL are planned.

    Further reading

    ◦ http://home.hetnet.nl/~janmartinjansen/saplinter◦ http://home.hetnet.nl/~janmartinjansen/lambda◦ http://www.st.cs.ru.nl/Onderzoek/Publicaties/

    publicaties.html

    2.8 The Reduceron

    Report by: Matthew NaylorParticipants: Colin Runciman, Jason ReichStatus: experimental

    Since the last HCAR, we have started a 15-monthproject to further explore the potential of the Reduc-eron. I have begun implementation of a new design,and I presented initial results in talks at HFL’09 and atBirmingham University. Slides of both talks are avail-able online. Once complete, we will have a rather nippysequential reducer, and we plan to see if special-purposearchitectural features can also aid garbage collectionand parallel reduction.

    There have also been some other developments in theproject. I have made a new Lava (→ 6.9.2) clone sup-porting multi-output primitives, RAMs, easy creationof new primitives and back-ends, behavioral descrip-tion, and sized-vectors. And Jason Reich is workingon a supercompiler for the Reduceron’s core language,exploring some of Neil Mitchell’s ideas from Supero.

    Further reading

    http://www.cs.york.ac.uk/fp/reduceron/

    2.9 Platforms

    2.9.1 Haskell in Gentoo Linux

    Report by: Lennart Kolmodin

    Gentoo Linux is working towards supporting GHC6.10.3 and the Haskell Platform (→ 5.2), and at the

    16

    http://tinyurl.com/prim-normal-sethttp://code.google.com/p/corehugs/wiki/Demonstrationhttp://code.google.com/p/corehugs/wiki/Demonstrationhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/hugs2ychttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/hugs2ychttp://code.google.com/p/corehugs/downloads/listhttp://wiki.clean.cs.ru.nl/Mailing_listshttp://home.hetnet.nl/~janmartinjansen/saplinterhttp://home.hetnet.nl/~janmartinjansen/lambdahttp://www.st.cs.ru.nl/Onderzoek/Publicaties/publicaties.htmlhttp://www.st.cs.ru.nl/Onderzoek/Publicaties/publicaties.htmlhttp://www.cs.york.ac.uk/fp/reduceron/

  • time of writing both are available hard masked inportage. For previous GHC versions we have binariesavailable for alpha, amd64, hppa, ia64, sparc, and x86.

    Browse the packages in portage at http://packages.gentoo.org/category/dev-haskell?full_cat.

    The GHC architecture/version matrix is available athttp://packages.gentoo.org/package/dev-lang/ghc.

    Please report problems in the normal Gentoo bugtracker at bugs.gentoo.org.

    There is also a Haskell overlay providing another 300packages. Thanks to the haskell developers using Cabaland Hackage (→ 5.1), we have been able to write atool called “hackport” (initiated by Henning Günther)to generate Gentoo packages that rarely need muchtweaking.

    The overlay is available at http://haskell.org/haskellwiki/Gentoo. Using Darcs (→ 6.1.1), it is easy tokeep updated and send patches. It is also available viathe Gentoo overlay manager “layman”. If you choose touse the overlay, then problems should be reported onIRC (#gentoo-haskell on freenode), where we coor-dinate development, or via email 〈[email protected]〉.

    Lately a few of our developers have shifted focus, andonly a few developers remain. If you would like to help,which would include working on the Gentoo Haskellframework, hacking on hackport, writing ebuilds, andsupporting users, please contact us on IRC or email asnoted above.

    2.9.2 Fedora Haskell SIG

    Report by: Jens PetersenParticipants: Yaakov Nemoy, Bryan Sullivan, Konrad

    Meyer, Fedora Haskell SIGStatus: on-going

    The Fedora Haskell SIG is an effort to provide goodsupport for Haskell in Fedora.

    A new cabal2spec package now generates rpm-specfiles for Fedora’s Haskell Packaging Guidelines fromCabal packages, making it easier than ever to pack-age Haskell for Fedora. cabal2spec has been ported toHaskell by Konrad and Yaakov.

    Fedora 11 will ship with ghc-6.10.2, cabal-install andan improved set of rpm macros at the end of May 2009.

    For Fedora 12 we are planning to include xmonadand hopefully haskell-platform. The latest ghc.spec indevelopment already supports building ghc-6.11 withshared libraries.

    Further reading

    http://fedoraproject.org/wiki/SIGs/Haskell

    2.9.3 GHC on OpenSPARC

    Report by: Ben LippmeierParticipants: Duncan Coutts, Darryl Gove, Roman

    LeshchinskiyStatus: winding down

    Through January–April this year I repaired GHC’sback end support for the SPARC architecture, andbenchmarked its performance on haskell.org’s shinynew SPARC T2 server. I also spent time refactoringGHC’s native code generator to make it easier to un-derstand and maintain, and thus less likely for piecesto suffer bit-rot in the future.

    The T2 architecture is interesting to functional pro-grammers because of its highly multi-threaded nature.The T2 has eight cores with eight hardware threadseach, for a total of 64 threads per processor. When oneof the threads suffers a cache miss, another can continueon with little context switching overhead. All threadson a particular core also share the same L1 cache, whichsupports fast thread synchronization. This is a perfectfit for parallel lazy functional programs, where mem-ory traffic is high, but new threads are only a paraway. The following graph shows the performance ofthe sumeuler benchmark from the nofib suite when run-ning on the T2. Note that the performance scales al-most linearly (perfectly) right up to the point where itruns out of hardware threads.

    The project is nearing completion, pending tying upsome loose ends, but the port is fully functional andavailable in the current head branch. More informa-tion, including benchmarking is obtainable form thelink below. The GHC on OpenSPARC project was gen-erously funded by Sun Microsystems.

    Further reading

    http://ghcsparc.blogspot.com

    17

    http://packages.gentoo.org/category/dev-haskell?full_cathttp://packages.gentoo.org/category/dev-haskell?full_cathttp://packages.gentoo.org/package/dev-lang/ghcbugs.gentoo.orghttp://haskell.org/haskellwiki/Gentoohttp://haskell.org/haskellwiki/Gentoomailto: haskell at gentoo.orghttp://fedoraproject.org/wiki/SIGs/Haskellhttp://ghcsparc.blogspot.com

  • 3 Language

    3.1 Extensions of Haskell

    3.1.1 Haskell Server Pages (HSP)

    Report by: Niklas BrobergStatus: active development

    Haskell Server Pages (HSP) is an extension of Haskelltargeted at writing dynamic web pages. Key featuresand selling points include:

    ◦ Use literal XML syntax in your Haskell code for cre-ating values of appropriate datatypes. (Note thoughthat writing literal XML is quite optional, if you, likeme, do not really enjoy that language.)

    ◦ Guarantees that XML output is well-formed (and anHTML output mode if that is what you need).

    ◦ A model that gives easy access to necessary environ-ment variables.

    ◦ Simple programming model that is easy to use evenfor non-experienced Haskell programmers, in partic-ular with a very simple transition from static XMLpages to dynamic HSP pages.

    ◦ Easy integration with a DSL called HJScript thatmakes it easy to write client-side (JavaScript) scripts.

    ◦ An extension of HAppS that can serve HSP pages onthe fly, making deployment of pages really simple.

    HSP is continuously released onto Hackage. It consistsof a series of interdependent packages with packagehsp as the main top-level starting point, and packagehapps-hsp for integration with HAppS. The best wayto keep up with development is to grab the darcs repos-itories, all located under http://code.haskell.org/HSP.

    Further reading

    http://haskell.org/haskellwiki/HSP

    3.1.2 GpH — Glasgow Parallel Haskell

    Report by: Phil TrinderParticipants: Abyd Al Zain, Mustafa Aswad, Jost

    Berthold, Jamie Gabbay, Murray Gross,Hossein Haeri, Kevin Hammond, Vladimir

    Janjic, Hans-Wolfgang Loidl

    Status

    A complete, GHC-based implementation of the parallelHaskell extension GpH and of evaluation strategies is

    available. Extensions of the runtime-system and lan-guage to improve performance and support new plat-forms are under development.

    System Evaluation and Enhancement

    ◦ Both GpH and Eden parallel Haskells are being usedfor parallel language research and in the SCIEnceproject (see below).

    ◦ We are making comparative evaluations of a range ofGpH implementations and other parallel functionallanguages (Eden and Feedback Directed ImplicitParallelism (FDIP)) on multicore architectures.

    ◦ We are teaching parallelism to undergraduates usingGpH at Heriot-Watt and Phillips Universität Mar-burg.

    ◦ We are developing a big step operational semanticsfor seq and using it to prove identities.

    GpH Applications

    As part of the SCIEnce EU FP6 I3 project (026133) (→8.6) (April 2006 – April 2011) we use GpH and Edenas middleware to provide access to computational gridsfrom Computer Algebra(CA) systems, including GAP,Maple MuPad and KANT. We have designed, imple-mented and are evaluating the SymGrid-Par interfacethat facilitates the orchestration of computational al-gebra components into high-performance parallel ap-plications.

    In recent work we have demonstrated that SymGrid-Par is capable of exploiting a variety of modern paral-lel/multicore architectures without any change to theunderlying CA components; and that SymGrid-Par iscapable of orchestrating heterogeneous computationsacross a high-performance computational Grid.

    Implementations

    The GUM implementation of GpH is available in twomain development branches.

    ◦ The focus of the development has switched to ver-sions tracking GHC releases, currently GHC 6.8, andthe development version is available upon request tothe GpH mailing list (see the GpH web site).

    ◦ The stable branch (GUM-4.06, based on GHC-4.06)is available for RedHat-based Linux machines. Thestable branch is available from the GHC CVS repos-itory via tag gum-4-06.

    18

    http://code.haskell.org/HSPhttp://haskell.org/haskellwiki/HSPhttp://www.macs.hw.ac.uk/~dsg/gph/#GPHhttp://www.macs.hw.ac.uk/~dsg/gph/papers/html/Strategies/strategies.htmlhttp://www.macs.hw.ac.uk/~dsg/gph/http://www.mathematik.uni-marburg.de/~eden/http://www.symbolic-computation.org/http://www.symbolic-computation.org/http://www.macs.hw.ac.uk/~trinder/ParDistr/http://www.mathematik.uni-marburg.de/~loogen/Lehre/ws02/pfp/vor02WSpfp.shtmlhttp://www.mathematik.uni-marburg.de/~loogen/Lehre/ws02/pfp/vor02WSpfp.shtmlhttp://www.macs.hw.ac.uk/~dsg/gph/

  • We are exploring new, prescient scheduling mecha-nisms for GpH.

    Our main hardware platforms are Intel-based Be-owulf clusters and multicores. Work on ports to otherarchitectures is also moving on (and available on re-quest):

    ◦ A port to a Mosix cluster has been built in theMetis project at Brooklyn College, with a first ver-sion available on request from Murray Gross.

    Further reading

    ◦ GpH Home Page: http://www.macs.hw.ac.uk/~dsg/gph/

    ◦ Stable branch binary snapshot: ftp://ftp.macs.hw.ac.uk/pub/gph/gum-4.06-snap-i386-unknown-linux.tar

    ◦ Stable branch installation instructions: ftp://ftp.macs.hw.ac.uk/pub/gph/README.GUM

    Contact

    [email protected]〉, 〈[email protected]

    3.1.3 Eden

    Report by: Rita LoogenParticipants: in Madrid: Ricardo Peña, Yolanda

    Ortega-Mallén, Mercedes Hidalgo,Fernando Rubio, Alberto de la Encina,

    Lidia Sánchez-Gilin Marburg: Jost Berthold, Mischa

    Dieterle, Oleg Lobachev, ThomasHorstmeyer, Johannes May

    Status: ongoing

    Eden extends Haskell with a small set of syntactic con-structs for explicit process specification and creation.While providing enough control to implement paral-lel algorithms efficiently, it frees the programmer fromthe tedious task of managing low-level details by intro-ducing automatic communication (via head-strict lazylists), synchronization, and process handling.

    Eden’s main constructs are process abstractions andprocess instantiations. The function process :: (a-> b) -> Process a b embeds a function of type (a-> b) into a process abstraction of type Process a bwhich, when instantiated, will be executed in paral-lel. Process instantiation is expressed by the prede-fined infix operator ( # ) :: Process a b -> a ->b. Higher-level coordination is achieved by definingskeletons, ranging from a simple parallel map to so-phisticated replicated-worker schemes. They have beenused to parallelize a set of non-trivial benchmark pro-grams.

    Survey and standard reference

    Rita Loogen, Yolanda Ortega-Mallén, and Ri-cardo Peña: Parallel Functional Programming in Eden,Journal of Functional Programming 15(3), 2005, pages431–475.

    Implementation

    A major revision of the parallel Eden runtime envi-ronment for GHC 6.8.1 is available from the Mar-burg group on request. Support for Glasgow parallelHaskell (→ 3.1.2) is currently being added to this ver-sion of the runtime environment. It is planned for thefuture to maintain a common parallel runtime environ-ment for Eden, GpH, and other parallel Haskells. Pro-gram executions can be visualized using the Eden traceviewer tool EdenTV. Recent results show that the sys-tem behaves equally well on workstation clusters andon multi-core machines.

    Recent and Forthcoming Publications

    ◦ Jost Berthold, Mischa Dieterle, Oleg Lobachev,Rita Loogen: Distributed Memory Programming onMany-Cores - A Case Study Using Eden Divide-&-Conquer Skeletons, in Workshop on Many-Cores atARCS ’09, Delft, NL, March 2009, VDE Verlag 2009.

    ◦ Mischa Dieterle, Jost Berthold, and Rita Loogen:Implementing Parallel Google Map-Reduce in Eden,in: EuroPar 2009, Delft, NL, August 2009, to appearin LNCS.

    ◦ Jost Berthold, Mischa Dieterle, Oleg Lobachev, RitaLoogen: Parallel FFT With Eden Skeletons, inPaCT 2009, Novosibirsk, Russia, September 2009,to appear in LNCS.

    ◦ Thomas Horstmeyer, Rita Loogen: Grace — Graph-based Communication in Eden, in Draft Proceedingsof TFP, Kormarno, June 2009.

    ◦ Oleg Lobachev, Rita Loogen: Benchmarking ParallelHaskells Using Scientific Computing Algorithms, inDraft Proceedings of TFP, Kormarno, June 2009.

    ◦ Lidia Sánchez-Gil, Mercedes Hidalgo-Herrero,Yolanda Ortega-Mallén: An Operational Seman-tics for Distributed Lazy Evaluation, in DraftProceedings of TFP, Kormarno, June 2009.

    Further reading

    http://www.mathematik.uni-marburg.de/~eden

    3.1.4 XHaskell project

    Report by: Martin SulzmannParticipants: Kenny Zhuo Ming Lu

    XHaskell is an extension of Haskell which combinesparametric polymorphism, algebraic data types, and

    19

    http://www.sci.brooklyn.cuny.edu/~metis/http://www.macs.hw.ac.uk/~dsg/gph/http://www.macs.hw.ac.uk/~dsg/gph/ftp://ftp.macs.hw.ac.uk/pub/gph/gum-4.06-snap-i386-unknown-linux.tarftp://ftp.macs.hw.ac.uk/pub/gph/gum-4.06-snap-i386-unknown-linux.tarftp://ftp.macs.hw.ac.uk/pub/gph/README.GUMftp://ftp.macs.hw.ac.uk/pub/gph/README.GUMmailto: gph at macs.hw.ac.ukmailto: mgross at dorsai.orghttp://www.mathematik.uni-marburg.de/~eden

  • type classes with XDuce style regular expression types,subtyping, and regular expression pattern matching.The latest version can be downloaded via http://code.google.com/p/xhaskell/

    Latest developments

    We are still in the process of turning XHaskell into alibrary (rather than stand-alone compiler). We expectresults (a Hackage package) by August’09.

    3.1.5 HaskellActor

    Report by: Martin Sulzmann

    The focus of the HaskellActor project is onErlang-style concurrency abstractions. See fordetails: http://sulzmann.blogspot.com/2008/10/actors-with-multi-headed-receive.html.

    Novel features of HaskellActor include

    ◦ Multi-headed receive clauses, with support for

    ◦ guards, and

    ◦ propagation

    The HaskellActor implementation (as a library ex-tension to Haskell) is available via http://hackage.haskell.org/cgi-bin/hackage-scripts/package/actor.

    The implementation is stable, but there is plenty ofroom for optimizations and extensions (e.g. regularexpressions in patterns). If this sounds interesting toanybody (students!), please contact me.

    Latest developments

    We are currently collecting “real-world” exampleswhere the HaskellActor extension (multi-headed receiveclauses) proves to be useful.

    3.1.6 HaskellJoin

    Report by: Martin Sulzmann

    HaskellJoin is a (library) extension of Haskell to sup-port join patterns. Novelties are

    ◦ guards and propagation in join patterns,

    ◦ efficient parallel execution model which exploits mul-tiple processor cores.

    Latest developments

    Olivier Pernet (a student of Susan Eisenbach) is cur-rently working on a nicer monadic interface to theHaskellJoin library.

    Further reading

    ◦ http://sulzmann.blogspot.com/2008/12/parallel-join-patterns-with-guards-and.htmlThe paper version is dated December’08. I will up-date the paper in the next couple of weeks.

    ◦ http://hackage.haskell.org/cgi-bin/hackage-scripts/package/join

    3.2 Related Languages

    3.2.1 Curry

    Report by: Jan ChristiansenParticipants: Bernd Braßel, Michael Hanus, Wolfgang

    Lux, Sebastian Fischer, and othersStatus: active development

    Curry is a functional logic programming language withHaskell syntax. In addition to the standard features offunctional programming like higher-order functions andlazy evaluation, Curry supports features known fromlogic programming. This includes programming withnon-determinism, free variables, constraints, declara-tive concurrency, and the search for solutions. Al-though Haskell and Curry share the same syntax, thereis one main difference with respect to how function dec-larations are interpreted. In Haskell the order in whichdifferent rules are given in the source program has aneffect on their meaning. In Curry, in contrast, the rulesare interpreted as equations, and overlapping rules in-duce a non-deterministic choice and a search over theresulting alternatives. Furthermore, Curry allows tocall functions with free variables as arguments so thatthey are bound to those values that are demanded forevaluation, thus providing for function inversion.

    There are three major implementations of Curry.While the original implementation PAKCS (PortlandAachen Kiel Curry System) compiles to Prolog, MCC(Münster Curry Compiler) generates native code via astandard C compiler. The Kiel Curry System (KiCS)compiles Curry to Haskell aiming to provide nearlyas good performance for the purely functional part asmodern compilers for Haskell do. From these imple-mentations only MCC will provide type classes in thenear future. Type classes are not part of the currentdefinition of Curry, though there is no conceptual con-flict with the logic extensions.

    Recently, new compilation schemes for translatingCurry to Haskell have been developed that promise sig-nificant speedups compared to both the former KiCSimplementation and other existing implementations ofCurry.

    There have been research activities in the area offunctional logic programming languages for more thana decade. Nevertheless, there are still a lot of inter-esting research topics regarding more efficient compila-

    20

    http://code.google.com/p/xhaskell/http://code.google.com/p/xhaskell/http://sulzmann.blogspot.com/2008/10/actors-with-multi-headed-receive.htmlhttp://sulzmann.blogspot.com/2008/10/actors-with-multi-headed-receive.htmlhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/actorhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/actorhttp://sulzmann.blogspot.com/2008/12/parallel-join-patterns-with-guards-and.htmlhttp://sulzmann.blogspot.com/2008/12/parallel-join-patterns-with-guards-and.htmlhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/joinhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/join

  • tion techniques and even semantic questions in the areaof language extensions like encapsulation and functionpatterns. Besides activities regarding the language it-self, there is also an active development of tools con-cerning Curry (e.g., the documentation tool Curry-Doc, the analysis environment CurryBrowser, the ob-servation debuggers COOSy and iCODE, the debuggerB.I.O. (http://www-ps.informatik.uni-kiel.de/currywiki/tools/oracle_debugger), EasyCheck (→ 4.3.2), and Cy-CoTest). Because Curry has a functional subset, thesetools can canonically be transferred to the functionalworld.

    Further reading

    ◦ http://www.curry-language.org/◦ http://wiki.curry-language.org/

    3.2.2 Agda

    Report by: Nils Anders DanielssonParticipants: Ulf Norell and many othersStatus: actively developed

    Do you crave for highly expressive types, but do notwant to resort to type-class hackery? Then Agda mightprovide a view of what the future has in store for you.

    Agda is a dependently typed functional program-ming language (developed using Haskell). The lan-guage has inductive families, i.e. GADTs which can beindexed by values and not just types. Other good-ies include coinductive types, parameterized modules,mixfix operators, and an interactive Emacs interface(the type checker can assist you in the development ofyour code).

    A lot of work remains in order for Agda to become afull-fledged programming language (good libraries, ma-ture compilers, documentation, etc.), but already in itscurrent state it can provide lots of fun as a platformfor experiments in dependently typed programming.

    New since last time:

    ◦ Versions 2.2.0 and 2.2.2 have been released. The pre-vious release was in 2007, so the new versions includelots of changes.

    ◦ Agda is now available on Hackage (cabal installAgda-executable).

    ◦ Highlighted, hyperlinked HTML can be generatedfrom Agda source code using agda –html.

    ◦ The Agda Wiki is better organized, so it should beeasier for a newcomer to find relevant information.

    Further reading

    The Agda Wiki: http://wiki.portal.chalmers.se/agda/

    3.2.3 Clean

    Report by: Thomas van NoortParticipants: Rinus Plasmeijer, John van GroningenStatus: active development

    Clean is a general purpose, state-of-the-art, pure andlazy functional programming language designed formaking real-world applications. Clean is the only func-tional language in the world which offers uniquenesstyping. This type system makes it possible in a purefunctional language to incorporate destructive updatesof arbitrary data structures (including arrays) and tomake direct interfaces to the outside imperative world.

    Here is a short list with notable features:

    ◦ Clean is a lazy, pure, and higher-order functional pro-gramming language with explicit graph rewriting se-mantics.

    ◦ Although Clean is by default a lazy language, one cansmoothly turn it into a strict language to obtain op-timal time/space behavior: functions can be definedlazy as well as (partially) strict in their arguments;any (recursive) data structure can be defined lazy aswell as (partially) strict in any of its arguments.

    ◦ Clean is a strongly typed language based on an ex-tension of the well-known Milner/Hindley/Mycrofttype inferencing/checking scheme including the com-mon higher-order types, polymorphic types, abstracttypes, algebraic types, type synonyms, and existen-tially quantified types.

    ◦ The uniqueness type system in Clean makes it possi-ble to develop efficient applications. In particular, itallows a refined control over the single threaded useof objects which can influence the time and spacebehavior of programs. The uniqueness type systemcan be also used to incorporate destructive updatesof objects within a pure functional framework. It al-lows destructive transformation of state informationand enables efficient interfacing to the non-functionalworld (to C but also to I/O systems like X-Windows)offering direct access to file systems and operatingsystems.

    ◦ Clean supports type classes and type constructorclasses to make overloaded use of functions and op-erators possible.

    ◦ Clean offers records and (destructively updateable)arrays and files.

    ◦ Clean has pattern matching, guards, list comprehen-sions, array comprehensions and a lay-out sensitivemode.

    ◦ Clean offers a sophisticated I/O library with whichwindow based interactive applications (and the han-dling of menus, dialogs, windows, mouse, keyboard,

    21

    http://www-ps.informatik.uni-kiel.de/currywiki/tools/oracle_debuggerhttp://www-ps.informatik.uni-kiel.de/currywiki/tools/oracle_debuggerhttp://www.curry-language.org/http://wiki.curry-language.org/http://wiki.portal.chalmers.se/agda/

  • timers, and events raised by sub-applications) canbe specified compactly and elegantly on a very highlevel of abstraction.

    ◦ There is a Clean IDE and there are many librariesavailable offering additional functionality.

    Future plans

    Please see the entry on a Haskell frontend for the Cleancompiler (→ 2.6) for the future plans.

    Further reading

    ◦ http://clean.cs.ru.nl/◦ http://wiki.clean.cs.ru.nl/

    3.2.4 Timber

    Report by: Johan NordlanderParticipants: Björn von Sydow, Andy Gill, Magnus

    Carlsson, Per Lindgren, and othersStatus: actively developed

    Timber is a general programming language derivedfrom Haskell, with the specific aim of supporting devel-opment of complex event-driven systems. It allows pro-grams to be conveniently structured in terms of objectsand reactions, and the real-time behavior of reactionscan furthermore be precisely controlled via platform-independent timing constraints. This property makesTimber particularly suited to both the specification andthe implementation of real-time embedded systems.

    Timber shares most of Haskell’s syntax but intro-duces new primitive constructs for defining classes of re-active objects and their methods. These constructs livein the Cmd monad, which is a replacement of Haskell’stop-level monad offering mutable encapsulated state,implicit concurrency with automatic mutual exclusion,synchronous as well as asynchronous communication,and deadline-based scheduling. In addition, the Tim-ber type system supports nominal subtyping betweenrecords as well as datatypes, in the style of its precursorO’Haskell.

    A particularly notable difference between Haskelland Timber is that Timber uses a strict evaluation or-der. This choice has primarily been motivated by adesire t