darcs patch: Make Gen an instance of Applicative

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Wed May 9 07:16:08 EDT 2007

On Tue, 2007-05-08 at 23:57 +0200, Bjorn Bringert wrote:
> I like this, but I'm afraid the compatibility price might be too  
> high. AFAIK, Control.Applicative is only available in base >= 2.0 ,  
> which means that QuickCheck 2 wouldn't work with Haskell  
> implementations which come with base < 2.0. This means that no  
> program which wants to be testable with older implementations can  
> switch to QC2.

Yeah, I guess that's true. The applicative stuff is of course just pure
Haskell code, it could be packaged for older systems that don't have
base 2.0. Ironically the intention of putting it into base was to make
it more available, not less so.

It's a shame that this blocks progress. This would need Cabal
configurations to be able to say that we depend on base > 2.0 or a
separate Control.Applicative package. Or as people have suggested
before, what we really want to say is that we depend on a particular
interface and that happens to be provided by base 2.0. But that's such a
huge can of worms. Ho hum.

> Is this acceptable instead: return f `ap` a `ap` b `ap` c ? That's  
> already possible, right?

Yeah, you can. It's not nearly as nice though and it doesn't let you use
the other applicative functions that rely on the type class.


More information about the Libraries mailing list