
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
On Tue, Jul 15, 2008 at 4:43 PM, Conal Elliott
All code that defines Arrow instance breaks, because (>>>) is not a method of Arrow. I have a lot of such instances, so I'm now adding #if directives to test for ghc-6.9 or later. - Conal
On Mon, Jul 14, 2008 at 8:38 PM, Don Stewart
wrote: conal:
I want to use ghc-6.9 for improved support of type families, but I see that the change to the Arrow interface breaks some of my libraries (since (>>>) is no longer a method of Arrow). Will this change really be in
(>>>) has been reexported from Control.Category through Arrow for a few months. Does that fix things, or is your code still broken?
-- Don