darcs-2.12.5: a distributed, interactive, smart revision control system

Safe Haskell | Safe
Language | Haskell2010

Darcs.UI.Options.Iso

Contents

- Isomorphisms

Synopsis

- data Iso a b = Iso (a -> b) (b -> a)
- class IsoFunctor f where
- under :: Functor f => Iso a b -> Iso (f a) (f b)
- cps :: Iso a b -> Iso (a -> c) (b -> c)

# Isomorphisms

data Iso a b #

Lightweight type ismomorphisms (a.k.a. invertible functions). If

    Iso fw bw :: Iso a b

then `fw` and `bw` are supposed to satisfy

    fw . bw = id = bw . fw

Constructors

Iso (a -> b) (b -> a) |

class IsoFunctor f where #

Lift an isomorphism between `a` and `b` to one between `f a` and `f b`. Like `Functor`, except we can only map invertible functions (i.e. an Isomorphisms).

Minimal complete definition

imap

Methods

imap :: Iso a b -> f a -> f b #

Instances

IsoFunctor (RawOptSpec f) # |
Methods imap :: Iso a b -> RawOptSpec f a -> RawOptSpec f b #
IsoFunctor (OptSpec d f a) # |
Methods imap :: Iso a b -> OptSpec d f a a -> OptSpec d f a b #

under :: Functor f => Iso a b -> Iso (f a) (f b) #

Apply an iso under a functor.

cps :: Iso a b -> Iso (a -> c) (b -> c) #

Apply an iso under cps (which is a cofunctor).