[Haskell-cafe] The applicative instances for Either?

Daniel Fischer daniel.is.fischer at googlemail.com
Sat Sep 17 11:10:24 CEST 2011


On Saturday 17 September 2011, 08:42:42, Ketil Malde wrote:
> Hi,
> 
> I have a program that makes use of the applicative instance for Either
> String.  I used to define these instances locally, but at some point,
> they became part of Control.Applicative.  I have limited the
> dependencies to 'base >= 4', but apparently, some version 4s of base
> include this instance, some do not, and it causes problems for people
> trying to compile the program.
> 
> Is there any information, or otherwise accessible source specifying
> exactly when this was changed,

Commited on 18th June 2010 to HEAD ;)
Checking the sources, it wasn't in base-4.2.0.2 (ghc-6.12.3), but it was in 
base-4.3.1.0 (ghc-7.0.2), so it was introduced with base-4.3

> so that I can have more precise
> dependencies?  And is there a simple way to handle this conditionally,
> either within cabal, or using CPP?

Simplest way would be CPP, I think. Cabal provides a MIN_VERSION_foo macro, 
so

-- The extra parentheses might be necessary, some Cabal version(s)
-- had a buggy MIN_VERSION macro, I don't remember the details

#if  !(MIN_VERSION_base(4,3,0))
instance Applicative (Either e) where
    ...
#endif

You can have a flag based on which the version of the module with or 
without the instance is imported, but the above seems much simpler





More information about the Haskell-Cafe mailing list