[Haskell-cafe] Observations from ListLike
jgoerzen at complete.org
Mon Sep 17 15:37:11 EDT 2007
I just announced ListLike on haskell at haskell.org. Rather than repeat
that announcement here, I'd like to make a few observations that came
out of the development of this program:
* I wrote extensive QuickCheck cases for this and wrapped them in HUnit
for better display and future extensibility. Two bugs in the GHC
base libraries were discovered as a result (one has been fixed
already in HEAD, one not)
* Hugs programs that use cpphs can't use ByteString
* It would be really nice if QuickCheck supported I/O and some version
of HUnit's TestLabel to generate hierarchical names when failures
* It would also be much nicer if QuickCheck defined Arbitrary instances
for Word8 and Char. On Hugs, QuickCheck also lacks an instance of
Maybe, but GHC has it for some reason.
* Testing functions like foldl in Hugs, where QuickCheck is supplying
the list and the function, cause Hugs to crash with stack errors.
Testing some functions over ByteStrings cause Hugs to crash
complaining of being out of ForeignPtrs. I have yet to figure out how
to fix either problem; raising the heap size doesn't help.
* I had some cases in String.hs where Hugs did not permit me to
define the default functions within the class declaration. However,
I could define the functions outside, with the exact same type
signature as they'd have inside, and within the class declaration,
just say something like "words = myWords" to refer to the external
declaration. GHC worked fine both ways.
It seems that Hugs has a number of issues with code like ListLike that
uses some more advanced Haskell features, even though Hugs nominally
supports them. If you look through my Mercurial changelogs, you'll see
"fix blah for hugs" messages all over. Which is too bad, because Hugs
seems more portable (especially to embedded devices) than GHC.
More information about the Haskell-Cafe