Safe Haskell  None 

Language  Haskell2010 
Extensions 

Synopsis
 data Arr f a b where
 arrArr :: (b > c) > Arr f b c
 mapArr :: f b c > Arr f a b > Arr f a c
 foldArr :: forall f arr a b. Arrow arr => (forall x y. f x y > arr x y) > Arr f a b > arr a b
 newtype A f a b = A {}
 fromA :: A f a b > Arr f a b
 toA :: Arr f a b > A f a b
 class FreeAlgebra2 (m :: (k > k > Type) > k > k > Type) where
 liftFree2 :: forall f (a :: k) (b :: k). AlgebraType0 m f => f a b > m f a b
 foldNatFree2 :: forall d f (a :: k) (b :: k). (AlgebraType m d, AlgebraType0 m f) => (forall (x :: k) (y :: k). f x y > d x y) > m f a b > d a b
 codom2 :: forall (f :: k > k > Type). AlgebraType0 m f => Proof (AlgebraType m (m f)) (m f)
 forget2 :: forall (f :: k > k > Type). AlgebraType m f => Proof (AlgebraType0 m f) (m f)
 wrapFree2 :: (AlgebraType0 m f, FreeAlgebra2 m, Monad (m f a)) => f a (m f a b) > m f a b
 foldFree2 :: forall k m f (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType m f) => m f a b > f a b
 hoistFree2 :: forall k m f g (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType0 m g, AlgebraType0 m f) => (forall (x :: k) (y :: k). f x y > g x y) > m f a b > m g a b
 joinFree2 :: forall k m (f :: k > k > Type) (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType0 m f) => m (m f) a b > m f a b
 bindFree2 :: forall k m f (g :: k > k > Type) (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType0 m g, AlgebraType0 m f) => m f a b > (forall (x :: k) (y :: k). f x y > m g x y) > m g a b
Free arrow
Id :: Arr f a a  
Arr :: (b > c) > Arr f a b > Arr f a c  
Prod :: Arr f a b > Arr f a c > Arr f a (b, c) 
Instances
Arrow (Arr f) Source #  
FreeAlgebra2 Arr Source #  
Defined in Control.Arrow.Free liftFree2 :: forall f (a :: k) (b :: k). AlgebraType0 Arr f => f a b > Arr f a b # foldNatFree2 :: forall d f (a :: k) (b :: k). (AlgebraType Arr d, AlgebraType0 Arr f) => (forall (x :: k) (y :: k). f x y > d x y) > Arr f a b > d a b # codom2 :: forall (f :: k > k > Type). AlgebraType0 Arr f => Proof (AlgebraType Arr (Arr f)) (Arr f) # forget2 :: forall (f :: k > k > Type). AlgebraType Arr f => Proof (AlgebraType0 Arr f) (Arr f) #  
Category (Arr f :: Type > Type > Type) Source #  
Semigroup (Arr f o o) Source #  
Monoid (Arr f o o) Source #  
type AlgebraType0 Arr (f :: l) Source #  
Defined in Control.Arrow.Free  
type AlgebraType Arr (c :: Type > Type > Type) Source #  
Defined in Control.Arrow.Free 
foldArr :: forall f arr a b. Arrow arr => (forall x y. f x y > arr x y) > Arr f a b > arr a b Source #
Free arrow (CPS style)
Free arrow using CPS style.
Instances
Arrow (A f) Source #  
FreeAlgebra2 A Source #  
Defined in Control.Arrow.Free liftFree2 :: forall f (a :: k) (b :: k). AlgebraType0 A f => f a b > A f a b # foldNatFree2 :: forall d f (a :: k) (b :: k). (AlgebraType A d, AlgebraType0 A f) => (forall (x :: k) (y :: k). f x y > d x y) > A f a b > d a b # codom2 :: forall (f :: k > k > Type). AlgebraType0 A f => Proof (AlgebraType A (A f)) (A f) # forget2 :: forall (f :: k > k > Type). AlgebraType A f => Proof (AlgebraType0 A f) (A f) #  
Category (A f :: Type > Type > Type) Source #  
Semigroup (A f o o) Source #  
Monoid (A f o o) Source #  
type AlgebraType0 A (f :: l) Source #  
Defined in Control.Arrow.Free  
type AlgebraType A (c :: Type > Type > Type) Source #  
Defined in Control.Arrow.Free 
fromA :: A f a b > Arr f a b Source #
Inverse of
, which also is a specialisatin of fromA
.hoistFreeH2
toA :: Arr f a b > A f a b Source #
Isomorphism from
to Arr
, which is a specialisation of
A
.hoistFreeH2
Free interface reexports
class FreeAlgebra2 (m :: (k > k > Type) > k > k > Type) where #
Free algebra class similar to
and FreeAlgebra1
, but
for types of kind FreeAlgebra
k > k > Type
.
liftFree2 :: forall f (a :: k) (b :: k). AlgebraType0 m f => f a b > m f a b #
Lift a graph f
satsifying the constraint
to a free
its object AlgebraType0
m f
.
foldNatFree2 :: forall d f (a :: k) (b :: k). (AlgebraType m d, AlgebraType0 m f) => (forall (x :: k) (y :: k). f x y > d x y) > m f a b > d a b #
This represents the theorem that m f
is indeed free object (as
in propositions as types). The types of kind k > k > Type
form
a category, where an arrow from f :: k > k > Type
to d :: k >
k > Type
is represented by type forall x y. f x y > d x y
.
foldNatFree2
states that whenever we have such a morphism and d
satisfies the constraint AlgebraType m d
then we can construct
a morphism from m f
to d
.
foldNatFree2 nat (liftFree2 tr) = nat tr
foldNatFree2 nat . foldNatFree2 nat' = foldNatFree2 (foldNatFree2 nat . nat')
codom2 :: forall (f :: k > k > Type). AlgebraType0 m f => Proof (AlgebraType m (m f)) (m f) #
A proof that for each f
satisfying AlgebraType0 m f
, m f
satisfies AlgebraType m (m f)
constrant. This means that m
is
a well defined functor from the full subcategory of types of kind k
> k > Type
which satisfy the AlgebraType0 m
constraint to the full
subcategory of types of the same kind which satifsfy the constraint
AlgebraType m
.
forget2 :: forall (f :: k > k > Type). AlgebraType m f => Proof (AlgebraType0 m f) (m f) #
A proof that each type f :: k > k > Type
satisfying the Algebra
m f
constraint also satisfies AlgebraType0 m f
. This states that
there is a well defined forgetful functor from the category of types
of kind k > k > Type
which satisfy the AlgebraType m
to the
category of types of the same kind which satisfy the AlgebraType0 m
constraint.
Instances
FreeAlgebra2 (ListTr :: (k > k > Type) > k > k > Type) Source #  
Defined in Control.Category.Free.Internal liftFree2 :: forall f (a :: k0) (b :: k0). AlgebraType0 ListTr f => f a b > ListTr f a b # foldNatFree2 :: forall d f (a :: k0) (b :: k0). (AlgebraType ListTr d, AlgebraType0 ListTr f) => (forall (x :: k0) (y :: k0). f x y > d x y) > ListTr f a b > d a b # codom2 :: forall (f :: k0 > k0 > Type). AlgebraType0 ListTr f => Proof (AlgebraType ListTr (ListTr f)) (ListTr f) # forget2 :: forall (f :: k0 > k0 > Type). AlgebraType ListTr f => Proof (AlgebraType0 ListTr f) (ListTr f) #  
FreeAlgebra2 (Queue :: (k > k > Type) > k > k > Type) Source #  
Defined in Control.Category.Free.Internal liftFree2 :: forall f (a :: k0) (b :: k0). AlgebraType0 Queue f => f a b > Queue f a b # foldNatFree2 :: forall d f (a :: k0) (b :: k0). (AlgebraType Queue d, AlgebraType0 Queue f) => (forall (x :: k0) (y :: k0). f x y > d x y) > Queue f a b > d a b # codom2 :: forall (f :: k0 > k0 > Type). AlgebraType0 Queue f => Proof (AlgebraType Queue (Queue f)) (Queue f) # forget2 :: forall (f :: k0 > k0 > Type). AlgebraType Queue f => Proof (AlgebraType0 Queue f) (Queue f) #  
FreeAlgebra2 (C :: (k > k > Type) > k > k > Type) Source #  
Defined in Control.Category.Free liftFree2 :: forall f (a :: k0) (b :: k0). AlgebraType0 C f => f a b > C f a b # foldNatFree2 :: forall d f (a :: k0) (b :: k0). (AlgebraType C d, AlgebraType0 C f) => (forall (x :: k0) (y :: k0). f x y > d x y) > C f a b > d a b # codom2 :: forall (f :: k0 > k0 > Type). AlgebraType0 C f => Proof (AlgebraType C (C f)) (C f) # forget2 :: forall (f :: k0 > k0 > Type). AlgebraType C f => Proof (AlgebraType0 C f) (C f) #  
Monad m => FreeAlgebra2 (EffCat m :: (k > k > Type) > k > k > Type) Source #  
Defined in Control.Category.FreeEffect liftFree2 :: forall f (a :: k0) (b :: k0). AlgebraType0 (EffCat m) f => f a b > EffCat m f a b # foldNatFree2 :: forall d f (a :: k0) (b :: k0). (AlgebraType (EffCat m) d, AlgebraType0 (EffCat m) f) => (forall (x :: k0) (y :: k0). f x y > d x y) > EffCat m f a b > d a b # codom2 :: forall (f :: k0 > k0 > Type). AlgebraType0 (EffCat m) f => Proof (AlgebraType (EffCat m) (EffCat m f)) (EffCat m f) # forget2 :: forall (f :: k0 > k0 > Type). AlgebraType (EffCat m) f => Proof (AlgebraType0 (EffCat m) f) (EffCat m f) #  
FreeAlgebra2 A Source #  
Defined in Control.Arrow.Free liftFree2 :: forall f (a :: k) (b :: k). AlgebraType0 A f => f a b > A f a b # foldNatFree2 :: forall d f (a :: k) (b :: k). (AlgebraType A d, AlgebraType0 A f) => (forall (x :: k) (y :: k). f x y > d x y) > A f a b > d a b # codom2 :: forall (f :: k > k > Type). AlgebraType0 A f => Proof (AlgebraType A (A f)) (A f) # forget2 :: forall (f :: k > k > Type). AlgebraType A f => Proof (AlgebraType0 A f) (A f) #  
FreeAlgebra2 Arr Source #  
Defined in Control.Arrow.Free liftFree2 :: forall f (a :: k) (b :: k). AlgebraType0 Arr f => f a b > Arr f a b # foldNatFree2 :: forall d f (a :: k) (b :: k). (AlgebraType Arr d, AlgebraType0 Arr f) => (forall (x :: k) (y :: k). f x y > d x y) > Arr f a b > d a b # codom2 :: forall (f :: k > k > Type). AlgebraType0 Arr f => Proof (AlgebraType Arr (Arr f)) (Arr f) # forget2 :: forall (f :: k > k > Type). AlgebraType Arr f => Proof (AlgebraType0 Arr f) (Arr f) # 
wrapFree2 :: (AlgebraType0 m f, FreeAlgebra2 m, Monad (m f a)) => f a (m f a b) > m f a b #
Version of wrap
from free
package but for graphs.
foldFree2 :: forall k m f (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType m f) => m f a b > f a b #
hoistFree2 :: forall k m f g (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType0 m g, AlgebraType0 m f) => (forall (x :: k) (y :: k). f x y > g x y) > m f a b > m g a b #
Hoist the underlying graph in the free structure. This is a higher
version of a functor (analogous to
, which defined functor
instance for fmapFree
instances) and it satisfies the functor laws:FreeAlgebra
hoistFree2 id = id
hoistFree2 f . hoistFree2 g = hoistFree2 (f . g)
joinFree2 :: forall k m (f :: k > k > Type) (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType0 m f) => m (m f) a b > m f a b #
FreeAlgebra2
m is a monad on some subcategory of graphs (types of kind
k > k > Type
@), joinFree
it is the join
of this monad.
foldNatFree2 nat . joinFree2 = foldNatFree2 (foldNatFree2 nat)
This property is analogous to foldMap f . concat = foldMap (foldMap f)
,
bindFree2 :: forall k m f (g :: k > k > Type) (a :: k) (b :: k). (FreeAlgebra2 m, AlgebraType0 m g, AlgebraType0 m f) => m f a b > (forall (x :: k) (y :: k). f x y > m g x y) > m g a b #
bind
of the monad defined by m
on the subcategory of graphs (types of
kind k > k > Type
).
foldNatFree2 nat (bindFree mf nat') = foldNatFree2 (foldNatFree2 nat . nat') mf