
Hi. I'm porting old code, which uses fclabels <0.5. Old fclabels define Iso typeclass as follows: class Iso f where iso :: a :<->: b -> f a -> f b iso (Lens a b) = osi (b <-> a) osi :: a :<->: b -> f b -> f a osi (Lens a b) = iso (b <-> a) Newer one defines iso: class Iso (~>) f where iso :: Bijection (~>) a b -> f a ~> f b instance Arrow (~>) => Iso (~>) (Lens (~>) f) where iso bi = arr ((\a -> lens (fw bi . _get a) (_set a . first (bw bi))) . unLens) instance Arrow (~>) => Iso (~>) (Bijection (~>) a) where iso = arr . (.) but no osi. I'm not a guru in categories, can you help me define osi? Thanks Sergey.

Untested, but this should be about right:
osi (Bij f b) = iso (Bij b f)
Erik
On Mon, Aug 20, 2012 at 2:35 PM, Sergey Mironov
Hi. I'm porting old code, which uses fclabels <0.5. Old fclabels define Iso typeclass as follows:
class Iso f where iso :: a :<->: b -> f a -> f b iso (Lens a b) = osi (b <-> a) osi :: a :<->: b -> f b -> f a osi (Lens a b) = iso (b <-> a)
Newer one defines iso:
class Iso (~>) f where iso :: Bijection (~>) a b -> f a ~> f b
instance Arrow (~>) => Iso (~>) (Lens (~>) f) where iso bi = arr ((\a -> lens (fw bi . _get a) (_set a . first (bw bi))) . unLens)
instance Arrow (~>) => Iso (~>) (Bijection (~>) a) where iso = arr . (.)
but no osi. I'm not a guru in categories, can you help me define osi?
Thanks Sergey.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

just what I was looking for, thanks!
2012/8/20 Erik Hesselink
Untested, but this should be about right:
osi (Bij f b) = iso (Bij b f)
Erik
On Mon, Aug 20, 2012 at 2:35 PM, Sergey Mironov
wrote: Hi. I'm porting old code, which uses fclabels <0.5. Old fclabels define Iso typeclass as follows:
class Iso f where iso :: a :<->: b -> f a -> f b iso (Lens a b) = osi (b <-> a) osi :: a :<->: b -> f b -> f a osi (Lens a b) = iso (b <-> a)
Newer one defines iso:
class Iso (~>) f where iso :: Bijection (~>) a b -> f a ~> f b
instance Arrow (~>) => Iso (~>) (Lens (~>) f) where iso bi = arr ((\a -> lens (fw bi . _get a) (_set a . first (bw bi))) . unLens)
instance Arrow (~>) => Iso (~>) (Bijection (~>) a) where iso = arr . (.)
but no osi. I'm not a guru in categories, can you help me define osi?
Thanks Sergey.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Erik Hesselink
-
Sergey Mironov