pandora-0.3.9: A box of patterns and paradigms
Safe HaskellSafe-Inferred
LanguageHaskell2010

Pandora.Pattern.Functor.Extendable

Synopsis

Documentation

class Covariant t => Extendable t where Source #

When providing a new instance, you should ensure it satisfies:
* Duplication interchange: comap (comap f) . duplicate ≡ duplicate . comap f
* Extension interchange: extend f ≡ comap f . duplicate

Minimal complete definition

(=>>)

Methods

(=>>) :: t a -> (t a -> b) -> t b infixl 1 Source #

Infix and flipped version of extend, the dual of >>=

(<<=) :: (t a -> b) -> t a -> t b infixr 1 Source #

Flipped version of >>=, the dual of =<<

extend :: (t a -> b) -> t a -> t b Source #

Prefix and flipped version of =>>, the dual of bind

duplicate :: t a -> (t :. t) := a Source #

Clone existing structure, the dual of join

(=<=) :: (t b -> c) -> (t a -> b) -> t a -> c infixr 1 Source #

Right-to-left Cokleisli composition

(=>=) :: (t a -> b) -> (t b -> c) -> t a -> c infixr 1 Source #

Left-to-right Cokleisli composition

($=>>) :: Covariant u => ((u :. t) := a) -> (t a -> b) -> (u :. t) := b Source #

Experimental methods

(<<=$) :: Covariant u => ((u :. t) := a) -> (t a -> b) -> (u :. t) := b Source #

Instances

Instances details
Extendable Identity Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Functor.Identity

Methods

(=>>) :: Identity a -> (Identity a -> b) -> Identity b Source #

(<<=) :: (Identity a -> b) -> Identity a -> Identity b Source #

extend :: (Identity a -> b) -> Identity a -> Identity b Source #

duplicate :: Identity a -> (Identity :. Identity) := a Source #

(=<=) :: (Identity b -> c) -> (Identity a -> b) -> Identity a -> c Source #

(=>=) :: (Identity a -> b) -> (Identity b -> c) -> Identity a -> c Source #

($=>>) :: Covariant u => ((u :. Identity) := a) -> (Identity a -> b) -> (u :. Identity) := b Source #

(<<=$) :: Covariant u => ((u :. Identity) := a) -> (Identity a -> b) -> (u :. Identity) := b Source #

Extendable (Proxy :: Type -> Type) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Functor.Proxy

Methods

(=>>) :: Proxy a -> (Proxy a -> b) -> Proxy b Source #

(<<=) :: (Proxy a -> b) -> Proxy a -> Proxy b Source #

extend :: (Proxy a -> b) -> Proxy a -> Proxy b Source #

duplicate :: Proxy a -> (Proxy :. Proxy) := a Source #

(=<=) :: (Proxy b -> c) -> (Proxy a -> b) -> Proxy a -> c Source #

(=>=) :: (Proxy a -> b) -> (Proxy b -> c) -> Proxy a -> c Source #

($=>>) :: Covariant u => ((u :. Proxy) := a) -> (Proxy a -> b) -> (u :. Proxy) := b Source #

(<<=$) :: Covariant u => ((u :. Proxy) := a) -> (Proxy a -> b) -> (u :. Proxy) := b Source #

Extendable t => Extendable (Jack t) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Transformer.Jack

Methods

(=>>) :: Jack t a -> (Jack t a -> b) -> Jack t b Source #

(<<=) :: (Jack t a -> b) -> Jack t a -> Jack t b Source #

extend :: (Jack t a -> b) -> Jack t a -> Jack t b Source #

duplicate :: Jack t a -> (Jack t :. Jack t) := a Source #

(=<=) :: (Jack t b -> c) -> (Jack t a -> b) -> Jack t a -> c Source #

(=>=) :: (Jack t a -> b) -> (Jack t b -> c) -> Jack t a -> c Source #

($=>>) :: Covariant u => ((u :. Jack t) := a) -> (Jack t a -> b) -> (u :. Jack t) := b Source #

(<<=$) :: Covariant u => ((u :. Jack t) := a) -> (Jack t a -> b) -> (u :. Jack t) := b Source #

Extendable (Product s) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Functor.Product

Methods

(=>>) :: Product s a -> (Product s a -> b) -> Product s b Source #

(<<=) :: (Product s a -> b) -> Product s a -> Product s b Source #

extend :: (Product s a -> b) -> Product s a -> Product s b Source #

duplicate :: Product s a -> (Product s :. Product s) := a Source #

(=<=) :: (Product s b -> c) -> (Product s a -> b) -> Product s a -> c Source #

(=>=) :: (Product s a -> b) -> (Product s b -> c) -> Product s a -> c Source #

($=>>) :: Covariant u => ((u :. Product s) := a) -> (Product s a -> b) -> (u :. Product s) := b Source #

(<<=$) :: Covariant u => ((u :. Product s) := a) -> (Product s a -> b) -> (u :. Product s) := b Source #

Extendable t => Extendable (Tap t) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Transformer.Tap

Methods

(=>>) :: Tap t a -> (Tap t a -> b) -> Tap t b Source #

(<<=) :: (Tap t a -> b) -> Tap t a -> Tap t b Source #

extend :: (Tap t a -> b) -> Tap t a -> Tap t b Source #

duplicate :: Tap t a -> (Tap t :. Tap t) := a Source #

(=<=) :: (Tap t b -> c) -> (Tap t a -> b) -> Tap t a -> c Source #

(=>=) :: (Tap t a -> b) -> (Tap t b -> c) -> Tap t a -> c Source #

($=>>) :: Covariant u => ((u :. Tap t) := a) -> (Tap t a -> b) -> (u :. Tap t) := b Source #

(<<=$) :: Covariant u => ((u :. Tap t) := a) -> (Tap t a -> b) -> (u :. Tap t) := b Source #

Extendable (Tap ((Stream <:.:> Stream) := (:*:))) Source # 
Instance details

Defined in Pandora.Paradigm.Structure.Some.Stream

Extendable (Tap ((List <:.:> List) := (:*:))) Source # 
Instance details

Defined in Pandora.Paradigm.Structure.Some.List

Methods

(=>>) :: Tap ((List <:.:> List) := (:*:)) a -> (Tap ((List <:.:> List) := (:*:)) a -> b) -> Tap ((List <:.:> List) := (:*:)) b Source #

(<<=) :: (Tap ((List <:.:> List) := (:*:)) a -> b) -> Tap ((List <:.:> List) := (:*:)) a -> Tap ((List <:.:> List) := (:*:)) b Source #

extend :: (Tap ((List <:.:> List) := (:*:)) a -> b) -> Tap ((List <:.:> List) := (:*:)) a -> Tap ((List <:.:> List) := (:*:)) b Source #

duplicate :: Tap ((List <:.:> List) := (:*:)) a -> (Tap ((List <:.:> List) := (:*:)) :. Tap ((List <:.:> List) := (:*:))) := a Source #

(=<=) :: (Tap ((List <:.:> List) := (:*:)) b -> c) -> (Tap ((List <:.:> List) := (:*:)) a -> b) -> Tap ((List <:.:> List) := (:*:)) a -> c Source #

(=>=) :: (Tap ((List <:.:> List) := (:*:)) a -> b) -> (Tap ((List <:.:> List) := (:*:)) b -> c) -> Tap ((List <:.:> List) := (:*:)) a -> c Source #

($=>>) :: Covariant u => ((u :. Tap ((List <:.:> List) := (:*:))) := a) -> (Tap ((List <:.:> List) := (:*:)) a -> b) -> (u :. Tap ((List <:.:> List) := (:*:))) := b Source #

(<<=$) :: Covariant u => ((u :. Tap ((List <:.:> List) := (:*:))) := a) -> (Tap ((List <:.:> List) := (:*:)) a -> b) -> (u :. Tap ((List <:.:> List) := (:*:))) := b Source #

Covariant t => Extendable (Construction t) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Transformer.Construction

Methods

(=>>) :: Construction t a -> (Construction t a -> b) -> Construction t b Source #

(<<=) :: (Construction t a -> b) -> Construction t a -> Construction t b Source #

extend :: (Construction t a -> b) -> Construction t a -> Construction t b Source #

duplicate :: Construction t a -> (Construction t :. Construction t) := a Source #

(=<=) :: (Construction t b -> c) -> (Construction t a -> b) -> Construction t a -> c Source #

(=>=) :: (Construction t a -> b) -> (Construction t b -> c) -> Construction t a -> c Source #

($=>>) :: Covariant u => ((u :. Construction t) := a) -> (Construction t a -> b) -> (u :. Construction t) := b Source #

(<<=$) :: Covariant u => ((u :. Construction t) := a) -> (Construction t a -> b) -> (u :. Construction t) := b Source #

Extendable (Store s) Source # 
Instance details

Defined in Pandora.Paradigm.Inventory.Store

Methods

(=>>) :: Store s a -> (Store s a -> b) -> Store s b Source #

(<<=) :: (Store s a -> b) -> Store s a -> Store s b Source #

extend :: (Store s a -> b) -> Store s a -> Store s b Source #

duplicate :: Store s a -> (Store s :. Store s) := a Source #

(=<=) :: (Store s b -> c) -> (Store s a -> b) -> Store s a -> c Source #

(=>=) :: (Store s a -> b) -> (Store s b -> c) -> Store s a -> c Source #

($=>>) :: Covariant u => ((u :. Store s) := a) -> (Store s a -> b) -> (u :. Store s) := b Source #

(<<=$) :: Covariant u => ((u :. Store s) := a) -> (Store s a -> b) -> (u :. Store s) := b Source #

Semigroup e => Extendable (Imprint e) Source # 
Instance details

Defined in Pandora.Paradigm.Inventory.Imprint

Methods

(=>>) :: Imprint e a -> (Imprint e a -> b) -> Imprint e b Source #

(<<=) :: (Imprint e a -> b) -> Imprint e a -> Imprint e b Source #

extend :: (Imprint e a -> b) -> Imprint e a -> Imprint e b Source #

duplicate :: Imprint e a -> (Imprint e :. Imprint e) := a Source #

(=<=) :: (Imprint e b -> c) -> (Imprint e a -> b) -> Imprint e a -> c Source #

(=>=) :: (Imprint e a -> b) -> (Imprint e b -> c) -> Imprint e a -> c Source #

($=>>) :: Covariant u => ((u :. Imprint e) := a) -> (Imprint e a -> b) -> (u :. Imprint e) := b Source #

(<<=$) :: Covariant u => ((u :. Imprint e) := a) -> (Imprint e a -> b) -> (u :. Imprint e) := b Source #

Extendable (Equipment e) Source # 
Instance details

Defined in Pandora.Paradigm.Inventory.Equipment

Methods

(=>>) :: Equipment e a -> (Equipment e a -> b) -> Equipment e b Source #

(<<=) :: (Equipment e a -> b) -> Equipment e a -> Equipment e b Source #

extend :: (Equipment e a -> b) -> Equipment e a -> Equipment e b Source #

duplicate :: Equipment e a -> (Equipment e :. Equipment e) := a Source #

(=<=) :: (Equipment e b -> c) -> (Equipment e a -> b) -> Equipment e a -> c Source #

(=>=) :: (Equipment e a -> b) -> (Equipment e b -> c) -> Equipment e a -> c Source #

($=>>) :: Covariant u => ((u :. Equipment e) := a) -> (Equipment e a -> b) -> (u :. Equipment e) := b Source #

(<<=$) :: Covariant u => ((u :. Equipment e) := a) -> (Equipment e a -> b) -> (u :. Equipment e) := b Source #

Extendable (Tagged tag) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Functor.Tagged

Methods

(=>>) :: Tagged tag a -> (Tagged tag a -> b) -> Tagged tag b Source #

(<<=) :: (Tagged tag a -> b) -> Tagged tag a -> Tagged tag b Source #

extend :: (Tagged tag a -> b) -> Tagged tag a -> Tagged tag b Source #

duplicate :: Tagged tag a -> (Tagged tag :. Tagged tag) := a Source #

(=<=) :: (Tagged tag b -> c) -> (Tagged tag a -> b) -> Tagged tag a -> c Source #

(=>=) :: (Tagged tag a -> b) -> (Tagged tag b -> c) -> Tagged tag a -> c Source #

($=>>) :: Covariant u => ((u :. Tagged tag) := a) -> (Tagged tag a -> b) -> (u :. Tagged tag) := b Source #

(<<=$) :: Covariant u => ((u :. Tagged tag) := a) -> (Tagged tag a -> b) -> (u :. Tagged tag) := b Source #

Extendable (Schematic Monad t u) => Extendable (t :> u) Source # 
Instance details

Defined in Pandora.Paradigm.Controlflow.Effect.Transformer.Monadic

Methods

(=>>) :: (t :> u) a -> ((t :> u) a -> b) -> (t :> u) b Source #

(<<=) :: ((t :> u) a -> b) -> (t :> u) a -> (t :> u) b Source #

extend :: ((t :> u) a -> b) -> (t :> u) a -> (t :> u) b Source #

duplicate :: (t :> u) a -> ((t :> u) :. (t :> u)) := a Source #

(=<=) :: ((t :> u) b -> c) -> ((t :> u) a -> b) -> (t :> u) a -> c Source #

(=>=) :: ((t :> u) a -> b) -> ((t :> u) b -> c) -> (t :> u) a -> c Source #

($=>>) :: Covariant u0 => ((u0 :. (t :> u)) := a) -> ((t :> u) a -> b) -> (u0 :. (t :> u)) := b Source #

(<<=$) :: Covariant u0 => ((u0 :. (t :> u)) := a) -> ((t :> u) a -> b) -> (u0 :. (t :> u)) := b Source #

(Extendable t, Extendable u) => Extendable (Day t u) Source # 
Instance details

Defined in Pandora.Paradigm.Primary.Transformer.Day

Methods

(=>>) :: Day t u a -> (Day t u a -> b) -> Day t u b Source #

(<<=) :: (Day t u a -> b) -> Day t u a -> Day t u b Source #

extend :: (Day t u a -> b) -> Day t u a -> Day t u b Source #

duplicate :: Day t u a -> (Day t u :. Day t u) := a Source #

(=<=) :: (Day t u b -> c) -> (Day t u a -> b) -> Day t u a -> c Source #

(=>=) :: (Day t u a -> b) -> (Day t u b -> c) -> Day t u a -> c Source #

($=>>) :: Covariant u0 => ((u0 :. Day t u) := a) -> (Day t u a -> b) -> (u0 :. Day t u) := b Source #

(<<=$) :: Covariant u0 => ((u0 :. Day t u) := a) -> (Day t u a -> b) -> (u0 :. Day t u) := b Source #

Extendable (Schematic Comonad t u) => Extendable (t :< u) Source # 
Instance details

Defined in Pandora.Paradigm.Controlflow.Effect.Transformer.Comonadic

Methods

(=>>) :: (t :< u) a -> ((t :< u) a -> b) -> (t :< u) b Source #

(<<=) :: ((t :< u) a -> b) -> (t :< u) a -> (t :< u) b Source #

extend :: ((t :< u) a -> b) -> (t :< u) a -> (t :< u) b Source #

duplicate :: (t :< u) a -> ((t :< u) :. (t :< u)) := a Source #

(=<=) :: ((t :< u) b -> c) -> ((t :< u) a -> b) -> (t :< u) a -> c Source #

(=>=) :: ((t :< u) a -> b) -> ((t :< u) b -> c) -> (t :< u) a -> c Source #

($=>>) :: Covariant u0 => ((u0 :. (t :< u)) := a) -> ((t :< u) a -> b) -> (u0 :. (t :< u)) := b Source #

(<<=$) :: Covariant u0 => ((u0 :. (t :< u)) := a) -> ((t :< u) a -> b) -> (u0 :. (t :< u)) := b Source #

(Adjoint t' t, Extendable u) => Extendable ((t' <:<.>:> t) := u) Source # 
Instance details

Defined in Pandora.Paradigm.Schemes.TUT

Methods

(=>>) :: ((t' <:<.>:> t) := u) a -> (((t' <:<.>:> t) := u) a -> b) -> ((t' <:<.>:> t) := u) b Source #

(<<=) :: (((t' <:<.>:> t) := u) a -> b) -> ((t' <:<.>:> t) := u) a -> ((t' <:<.>:> t) := u) b Source #

extend :: (((t' <:<.>:> t) := u) a -> b) -> ((t' <:<.>:> t) := u) a -> ((t' <:<.>:> t) := u) b Source #

duplicate :: ((t' <:<.>:> t) := u) a -> (((t' <:<.>:> t) := u) :. ((t' <:<.>:> t) := u)) := a Source #

(=<=) :: (((t' <:<.>:> t) := u) b -> c) -> (((t' <:<.>:> t) := u) a -> b) -> ((t' <:<.>:> t) := u) a -> c Source #

(=>=) :: (((t' <:<.>:> t) := u) a -> b) -> (((t' <:<.>:> t) := u) b -> c) -> ((t' <:<.>:> t) := u) a -> c Source #

($=>>) :: Covariant u0 => ((u0 :. ((t' <:<.>:> t) := u)) := a) -> (((t' <:<.>:> t) := u) a -> b) -> (u0 :. ((t' <:<.>:> t) := u)) := b Source #

(<<=$) :: Covariant u0 => ((u0 :. ((t' <:<.>:> t) := u)) := a) -> (((t' <:<.>:> t) := u) a -> b) -> (u0 :. ((t' <:<.>:> t) := u)) := b Source #

(Semigroup e, Extendable u) => Extendable (((->) e :: Type -> Type) <.:> u) Source # 
Instance details

Defined in Pandora.Paradigm.Inventory.Imprint

Methods

(=>>) :: ((->) e <.:> u) a -> (((->) e <.:> u) a -> b) -> ((->) e <.:> u) b Source #

(<<=) :: (((->) e <.:> u) a -> b) -> ((->) e <.:> u) a -> ((->) e <.:> u) b Source #

extend :: (((->) e <.:> u) a -> b) -> ((->) e <.:> u) a -> ((->) e <.:> u) b Source #

duplicate :: ((->) e <.:> u) a -> (((->) e <.:> u) :. ((->) e <.:> u)) := a Source #

(=<=) :: (((->) e <.:> u) b -> c) -> (((->) e <.:> u) a -> b) -> ((->) e <.:> u) a -> c Source #

(=>=) :: (((->) e <.:> u) a -> b) -> (((->) e <.:> u) b -> c) -> ((->) e <.:> u) a -> c Source #

($=>>) :: Covariant u0 => ((u0 :. ((->) e <.:> u)) := a) -> (((->) e <.:> u) a -> b) -> (u0 :. ((->) e <.:> u)) := b Source #

(<<=$) :: Covariant u0 => ((u0 :. ((->) e <.:> u)) := a) -> (((->) e <.:> u) a -> b) -> (u0 :. ((->) e <.:> u)) := b Source #

Extendable u => Extendable ((:*:) e <:.> u) Source # 
Instance details

Defined in Pandora.Paradigm.Inventory.Equipment

Methods

(=>>) :: ((:*:) e <:.> u) a -> (((:*:) e <:.> u) a -> b) -> ((:*:) e <:.> u) b Source #

(<<=) :: (((:*:) e <:.> u) a -> b) -> ((:*:) e <:.> u) a -> ((:*:) e <:.> u) b Source #

extend :: (((:*:) e <:.> u) a -> b) -> ((:*:) e <:.> u) a -> ((:*:) e <:.> u) b Source #

duplicate :: ((:*:) e <:.> u) a -> (((:*:) e <:.> u) :. ((:*:) e <:.> u)) := a Source #

(=<=) :: (((:*:) e <:.> u) b -> c) -> (((:*:) e <:.> u) a -> b) -> ((:*:) e <:.> u) a -> c Source #

(=>=) :: (((:*:) e <:.> u) a -> b) -> (((:*:) e <:.> u) b -> c) -> ((:*:) e <:.> u) a -> c Source #

($=>>) :: Covariant u0 => ((u0 :. ((:*:) e <:.> u)) := a) -> (((:*:) e <:.> u) a -> b) -> (u0 :. ((:*:) e <:.> u)) := b Source #

(<<=$) :: Covariant u0 => ((u0 :. ((:*:) e <:.> u)) := a) -> (((:*:) e <:.> u) a -> b) -> (u0 :. ((:*:) e <:.> u)) := b Source #