Sergey Mironov | 20 Aug 14:35 2012
Picon

fclabels > 0.5

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.
Erik Hesselink | 20 Aug 15:02 2012
Picon

Re: fclabels > 0.5

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 <ierton <at> gmail.com> 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
(Continue reading)

Sergey Mironov | 21 Aug 17:03 2012
Picon

Re: fclabels > 0.5

just what I was looking for, thanks!

2012/8/20 Erik Hesselink <hesselink <at> gmail.com>:
> 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 <ierton <at> gmail.com> 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 . (.)
>>
(Continue reading)


Gmane