22 Jul 11:57
Re: Advice sought for 6.9 and Arrow/Category
From: Spencer Janssen <spencerjanssen <at> gmail.com>
Subject: Re: Advice sought for 6.9 and Arrow/Category
Newsgroups: gmane.comp.lang.haskell.glasgow.user
Date: 2008-07-22 09:57:18 GMT
Subject: Re: Advice sought for 6.9 and Arrow/Category
Newsgroups: gmane.comp.lang.haskell.glasgow.user
Date: 2008-07-22 09:57:18 GMT
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
RSS Feed