Advice sought for 6.9 and Arrow/Category

Spencer Janssen spencerjanssen at gmail.com
Tue Jul 22 05:57:18 EDT 2008


On Tue, Jul 15, 2008 at 05:45:55PM +0200, Conal Elliott wrote:
> By the way, here's how I'm changing my code to work with the new and old
> arrow interface.  I'd appreciate any suggested improvements.
> 
> The old code (example):
> 
>     import Control.Arrow
> 
>     [...]
> 
>     instance Arrow (~>) => Arrow (Bijection (~>)) where
>       Bi ab ba >>> Bi bc cb = Bi (ab >>> bc) (cb >>> ba)
>       [...]
> 
> The new code:
> 
>     #if __GLASGOW_HASKELL__ >= 609
>     import Control.Category
>     import Prelude hiding ((.), id)
>     #endif
>     import Control.Arrow
> 
>     [...]
> 
>     #if __GLASGOW_HASKELL__ >= 609
>     instance Category (~>) => Category (Bijection (~>)) where
>       id = Bi id id
>       Bi bc cb . Bi ab ba = Bi (bc . ab) (ba . cb)
>     #endif
> 
>     instance Arrow (~>) => Arrow (Bijection (~>)) where
>     #if __GLASGOW_HASKELL__ < 609
>       Bi ab ba >>> Bi bc cb = Bi (ab >>> bc) (cb >>> ba)
>     #endif
>     [...]
> 
> I'm testing for ghc version.  Could I somehow test for the base-library
> version instead?   - Conal

Yes.  Here is a snippet from binary.cabal:

    flag applicative-in-base

    library
      if flag(applicative-in-base)
        build-depends: base >= 2.0
        cpp-options: -DAPPLICATIVE_IN_BASE
      else
        build-depends: base < 2.0


Cheers,
Spencer Janssen


More information about the Glasgow-haskell-users mailing list