free-functors-1.1.2: Free functors, adjoint to functors that forget class constraints.
LicenseBSD-style (see the file LICENSE)
Maintainersjoerd@w3future.com
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Data.Functor.HHFree

Description

A free functor is left adjoint to a forgetful functor. In this package the forgetful functor forgets class constraints.

Compared to Data.Functor.HFree we have 2 two parameters.

Synopsis

Documentation

type (:~~>) f g = forall a b. f a b -> g a b Source #

Natural transformations.

newtype HHFree c f a b Source #

The higher order free functor over two type parameters for constraint c.

Constructors

HHFree 

Fields

Instances

Instances details
ProfunctorFunctor (HHFree c) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> HHFree c p :-> HHFree c q #

ProfunctorMonad (HHFree c) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

proreturn :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> HHFree c p #

projoin :: forall (p :: Type -> Type -> Type). Profunctor p => HHFree c (HHFree c p) :-> HHFree c p #

BifunctorMonad (HHFree c :: (Type -> Type -> Type) -> Type -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

bireturn :: forall (p :: k -> k1 -> Type). p :-> HHFree c p #

bibind :: forall (p :: k -> k1 -> Type) (q :: k -> k1 -> Type). (p :-> HHFree c q) -> HHFree c p :-> HHFree c q #

bijoin :: forall (p :: k -> k1 -> Type). HHFree c (HHFree c p) :-> HHFree c p #

BifunctorFunctor (HHFree c :: (Type -> Type -> Type) -> Type -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

bifmap :: forall (p :: k -> k1 -> Type) (q :: k -> k1 -> Type). (p :-> q) -> HHFree c p :-> HHFree c q #

c ~=> (Category :: (Type -> Type -> Type) -> Constraint) => Category (HHFree c a :: Type -> Type -> Type) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

id :: forall (a0 :: k). HHFree c a a0 a0 #

(.) :: forall (b :: k) (c0 :: k) (a0 :: k). HHFree c a b c0 -> HHFree c a a0 b -> HHFree c a a0 c0 #

c ~=> Bifunctor => Bifunctor (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

bimap :: (a0 -> b) -> (c0 -> d) -> HHFree c a a0 c0 -> HHFree c a b d #

first :: (a0 -> b) -> HHFree c a a0 c0 -> HHFree c a b c0 #

second :: (b -> c0) -> HHFree c a a0 b -> HHFree c a a0 c0 #

c ~=> Arrow => Arrow (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

arr :: (b -> c0) -> HHFree c a b c0 #

first :: HHFree c a b c0 -> HHFree c a (b, d) (c0, d) #

second :: HHFree c a b c0 -> HHFree c a (d, b) (d, c0) #

(***) :: HHFree c a b c0 -> HHFree c a b' c' -> HHFree c a (b, b') (c0, c') #

(&&&) :: HHFree c a b c0 -> HHFree c a b c' -> HHFree c a b (c0, c') #

c ~=> ArrowZero => ArrowZero (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

zeroArrow :: HHFree c a b c0 #

c ~=> ArrowPlus => ArrowPlus (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

(<+>) :: HHFree c a b c0 -> HHFree c a b c0 -> HHFree c a b c0 #

c ~=> ArrowChoice => ArrowChoice (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

left :: HHFree c a b c0 -> HHFree c a (Either b d) (Either c0 d) #

right :: HHFree c a b c0 -> HHFree c a (Either d b) (Either d c0) #

(+++) :: HHFree c a b c0 -> HHFree c a b' c' -> HHFree c a (Either b b') (Either c0 c') #

(|||) :: HHFree c a b d -> HHFree c a c0 d -> HHFree c a (Either b c0) d #

(forall (x :: Type -> Type -> Type). c x => ArrowApply x) => ArrowApply (HHFree c f) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

app :: HHFree c f (HHFree c f b c0, b) c0 #

c ~=> ArrowLoop => ArrowLoop (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

loop :: HHFree c a (b, d) (c0, d) -> HHFree c a b c0 #

c ~=> Biapplicative => Biapplicative (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

bipure :: a0 -> b -> HHFree c a a0 b #

(<<*>>) :: HHFree c a (a0 -> b) (c0 -> d) -> HHFree c a a0 c0 -> HHFree c a b d #

biliftA2 :: (a0 -> b -> c0) -> (d -> e -> f) -> HHFree c a a0 d -> HHFree c a b e -> HHFree c a c0 f #

(*>>) :: HHFree c a a0 b -> HHFree c a c0 d -> HHFree c a c0 d #

(<<*) :: HHFree c a a0 b -> HHFree c a c0 d -> HHFree c a a0 b #

c ~=> Choice => Choice (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

left' :: HHFree c a a0 b -> HHFree c a (Either a0 c0) (Either b c0) #

right' :: HHFree c a a0 b -> HHFree c a (Either c0 a0) (Either c0 b) #

c ~=> Closed => Closed (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

closed :: HHFree c a a0 b -> HHFree c a (x -> a0) (x -> b) #

c ~=> Strong => Strong (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

first' :: HHFree c a a0 b -> HHFree c a (a0, c0) (b, c0) #

second' :: HHFree c a a0 b -> HHFree c a (c0, a0) (c0, b) #

c ~=> Profunctor => Profunctor (HHFree c a) Source # 
Instance details

Defined in Data.Functor.HHFree

Methods

dimap :: (a0 -> b) -> (c0 -> d) -> HHFree c a b c0 -> HHFree c a a0 d #

lmap :: (a0 -> b) -> HHFree c a b c0 -> HHFree c a a0 c0 #

rmap :: (b -> c0) -> HHFree c a a0 b -> HHFree c a a0 c0 #

(#.) :: forall a0 b c0 q. Coercible c0 b => q b c0 -> HHFree c a a0 b -> HHFree c a a0 c0 #

(.#) :: forall a0 b c0 q. Coercible b a0 => HHFree c a b c0 -> q a0 b -> HHFree c a a0 c0 #

deriveHHFreeInstance :: Name -> Q [Dec] Source #

Derive the instance of HHFree c f a b for the class c,.

For example:

deriveHHFreeInstance ''Category

rightAdjunct :: c g => (f :~~> g) -> HHFree c f :~~> g Source #

counit :: c f => HHFree c f :~~> f Source #

counit = rightAdjunct id

leftAdjunct :: (HHFree c f :~~> g) -> f :~~> g Source #

leftAdjunct f = f . unit

transform :: (forall r. c r => (g :~~> r) -> f :~~> r) -> HHFree c f :~~> HHFree c g Source #

hfmap :: (f :~~> g) -> HHFree c f :~~> HHFree c g Source #

bind :: (f :~~> HHFree c g) -> HHFree c f :~~> HHFree c g Source #