Haskell Weekly News: April 17, 2006

Submitted by dons on Sun, 04/16/2006 - 11:18pm.

Greetings, and thanks for reading issue 33 of HWN, a weekly newsletter covering developments in the Haskell community. Each Monday, new editions are posted to the Haskell mailing list and to The Haskell Sequence. RSS is also available. Headlines also go to haskell.org.


  • Halfs, a Haskell filesystem. Isaac Jones announced the first release of Halfs, a filesystem written in Haskell. Halfs can be mounted and used like any other Linux filesystem, or used as a library. Halfs is a fork (and a port) of the filesystem developed by Galois Connections. In addition, Halfs comes with a virtual machine to make using it extremely easy. You don't need an extra partition or a thumb drive, or even Linux (Windows and Mac OS can emulate the virtual machine). See more at the Halfs site.

  • DrIFT-2.2.0. John Meacham released DrIFT-2.2.0, the type sensitive preprocessor for Haskell. It extracts type declarations and directives from modules. The directives cause rules to be fired on the parsed type declarations, generating new code which is then appended to the bottom of the input file. Read more here.

  • MissingH 0.14.2. John Goerzen announced version 0.14.2 of MissingH, the library of "missing" Haskell code. Now including support for shell globs, POSIX-style wildcards and more. Check here for more details.

  • HAppS - Haskell Application Server 0.8 Einar Karttunen announced HAppS 0.8. The Haskell Application Server version 0.8 contains a complete rewrite of the ACID and HTTP functionalities. Features include:

    • MACID - Monadic framework for ACID transactions.
    • An HTTP Server (outperforms Apache/PHP in informal benchmarks).
    • An SMTP Server.
    • Mail delivery agent.
    • DNS resolver in pure Haskell
    • XML and XSLT. Separate application logic from presentation using XML/XSLT.
    • And more..
    More information on the the HAppS page.

  • Index-aware linear algebra. Frederik Eaton announced an index-aware linear algebra library written in Haskell. The library exposes index types and ranges so that static guarantees can be made about the library operations (e.g. an attempt to add two incompatibly sized matrices is a static error). Frederik's motivation is that a good linear algebra library which embeds knowledge of the mathematical structures in the type system, such that misuse is a static error, could mean Haskell makes valuable contribution in the area of technical computing, currently dominated by interpreted, weakly typed languages.

  • Crypto-3.0.3. Dominic Steinitz announced Crypto-3.0.3, a new version of the Haskell Cryptography Library. Version 3.0.3 supports: DES, Blowfish, AES, Cipher Block Chaining (CBC), PKCS#5 and nulls padding, SHA-1, MD5 , RSA, OAEP-based encryption (Bellare-Rogaway), PKCS#1v1.5 signature scheme, ASN.1, PKCS#8, X.509 Identity Certificates, X.509 Attribute Certificates. See here for more.


This section covers activity on Haskell' standardisation process.


  • QuickCheck. Koen Claessen hinted that a "brand new" version of QuickCheck with lots of cool features is soon to be released.

  • Accurate event scheduling. Henning Thielemann asked about how to improve the accuracy of event scheduling, while working on Haskore, the Haskell music system. John Meacham suggested a binding to the Linux real time clock interface, while Tomasz Zielonka pointed to a library he has been developing using software transactional memory actions for accurate timeouts. He also mentioned the new registerDelay function in the GHC head. Measurements indicated that the average error from the expected waiting time dropped from 0.010140108245s to 0.00080999391s. Quite good results.

  • Good fusion. A casual remar k about an alternative version of the inits function lead to a huge discussion about using fusion to improve code quality.

Code watch

  • Sun Apr 2 14:59:11 PDT 2006 simonpj
    Improve newtype deriving

    Ross Paterson pointed out a useful generalisation of GHC's newtype-deriving mechanism. This implements it. The idea is to allow newtype Wrap m a = Wrap (m a) deriving (Monad, Eq) where the representation type doesn't start with a type constructor.

  • Tue Apr 11 05:04:41 PDT 2006 simonpj
    Allow IO to be wrapped in a newtype in foreign import/export

    Up to now, the silent unwrapping of newtypes in foreign import/export has been limited to data values. But it's useful for the IO monad itself:

            newtype MyIO a = MIO (IO a)
            foreign import foo :: Int -> MyIO Int
    This patch allows the IO monad to be wrapped too.

Contributing to HWN

You can help us create new editions of this newsletter. Please see the contributing information, send stories to dons -at- cse.unsw.edu.au. The darcs repository is available at darcs get http://www.cse.unsw.edu.au/~dons/code/hwn