Hi tom, I had problems installing version 0.1.2.1 on GHC 7.4.1:
Resolving dependencies... > Downloading rematch-0.1.2.1... > Configuring rematch-0.1.2.1... > Building rematch-0.1.2.1... > Preprocessing library rematch-0.1.2.1... > [1 of 4] Compiling Control.Rematch.Formatting ( > Control/Rematch/Formatting.hs, dist/build/Control/Rematch/Formatting.o ) > [2 of 4] Compiling Control.Rematch.Run ( Control/Rematch/Run.hs, > dist/build/Control/Rematch/Run.o ) > [3 of 4] Compiling Control.Rematch ( Control/Rematch.hs, > dist/build/Control/Rematch.o ) > [4 of 4] Compiling Control.Rematch.QuickCheck ( > Control/Rematch/QuickCheck.hs, dist/build/Control/Rematch/QuickCheck.o ) > > Control/Rematch/QuickCheck.hs:19:3: > `exhaustive' is not a (visible) method of class `Testable' > Failed to install rematch-0.1.2.1 > cabal: Error: some packages failed to install: > rematch-0.1.2.1 failed during the building phase. The exception was: > ExitFailure 1 > I installed v 0.1.2.0 without problems. Best regards, Petr 2013/4/16 Tom Crayford <tcrayf...@gmail.com> > I kept on running into this thing where I was calling error in quickcheck > to get good error messages about the things I was comparing. In Java land, > this stuff is handled by Hamcrest: a library for composable assertions with > good error messages. This library is basically a port of hamcrest's core > api, but I've been very pleased with how it turned out. > > I've been using this in tests for production code for a month or so now, > and I'm very pleased with it. > > Running a matcher (in this example in an hunit test) looks like this: > > expect [1] (is [1]) > > The core API is very simple: > > data Matcher a = Matcher { > match :: a -> Bool > -- ^ A function that returns True if the matcher should pass, False if > it should fail > , description :: String > -- ^ A description of the matcher (usually of its success conditions) > , describeMismatch :: a -> String > -- ^ A description to be shown if the match fails. > } > > This means you can add/write your own matchers happily, which occasionally > means you can write *very* nice test code (here's an example of using a > custom matcher for checking the state of an "issue" in a hypothetical issue > tracking app): > > expect latestIssue (hasState Resolved) > > -- I removed the supporting code to make this assertion actually run, > -- this email is already pretty long. > > There are numerous matchers (and functions for creating matchers) in the > rematch library, including some composition functions that provide good > failure messages. > > There are some shims to hook rematch into the common haskell test > frameworks (specifically hunit and quickcheck). > > The two libraries are up on hackage: > http://hackage.haskell.org/package/rematch > http://hackage.haskell.org/package/rematch-text > > The code is all up on github: > > http://github.com/tcrayford/rematch > > I get rather frustrated when my tests give bad failure explanations, and > using rematch goes a long way to fix that. > > Lastly, rematch is pretty isolated from test frameworks/etc, with a very > small and easy to understand surface api. Hopefully it'll help with the > thing I've seen in other languages (cough ruby cough) with every test > framework reinventing this idea, and not all frameworks having all the > matchers I want to use. > > Let me know if you have any feedback/thoughts > > Tom > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe