Difference between revisions of "Catch"

From HaskellWiki
Jump to navigation Jump to search
(Added related work)
 
Line 33: Line 33:
   
 
* The [https://hackage.haskell.org/package/total total] package does not search for incomplete pattern matches, but it does allow you to write compiler-checked exhaustive pattern matches. [http://www.haskellforall.com/2015/01/total-100-exhaustive-pattern-matching.html Blog post here].
 
* The [https://hackage.haskell.org/package/total total] package does not search for incomplete pattern matches, but it does allow you to write compiler-checked exhaustive pattern matches. [http://www.haskellforall.com/2015/01/total-100-exhaustive-pattern-matching.html Blog post here].
  +
  +
* [https://hackage.haskell.org/package/exhaustive exhaustive] Does the same, but without lenses.
   
 
==Success stories:==
 
==Success stories:==

Latest revision as of 08:17, 6 August 2015

Introduction

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:

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.

Related work:

  • Liquid Haskell - Annotate your functions with invariants that are checked at compile-time.
  • The total package does not search for incomplete pattern matches, but it does allow you to write compiler-checked exhaustive pattern matches. Blog post here.

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