Catch

From HaskellWiki
Revision as of 18:37, 23 June 2007 by BrettGiles (talk | contribs) (Creating with contents of note from Neil, June 8 to haskell list)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Do you sometimes encounter the dreaded "pattern match failure: head []" message? Do you have incomplete patterns which sometimes fail? Do you have incomplete patterns which you know don't fail, but still get compiler warnings about them? Would you like to statically ensure the absence of all calls to error?

Location

For the last few years I've been working on a pattern-match checker for Haskell, named Catch. I'm now happy to make a release:

Hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/catch-0.1 Homepage: http://www-users.cs.york.ac.uk/~ndm/catch/ User manual: http://www.cs.york.ac.uk/fp/darcs/catch/catch.htm

While a darcs version is available, I strongly recommend the use of the tarball on hackage.

Features:

  • Detects all incomplete patterns and calls to error
  • Full support for Haskell, through the use of Yhc as a front end
  • Automatic - no annotations are required
  • Fast - checking times of under 5 seconds (excluding Yhc compilation)are typical

Drawbacks:

  • Requires Yhc to be installed, which doesn't accept most Haskell extensions. This will be fixed once GHC.Core is available as a standalone library. The underlying tool is not limited to Haskell 98 in any way.

Success stories:

  • The darcs version of HsColour has been proven free of pattern match errors, and Catch was able to find three previously unknown crashes which could be triggered by a malformed document.
  • System.FilePath has been checked, and is free of pattern-match errors.
  • XMonad's central StackSet.hs module has been checked repeatedly, as it has evolved. Unfortunately currently this module goes beyond Haskell 98, but this should be fixed shortly.

If you have any experiences with Catch, I'd be very interested to hear them.

Thanks Neil