Copyright | (c) 2010-2011 Patrick Bahr, Tom Hvitved |
---|---|
License | BSD3 |
Maintainer | Patrick Bahr <paba@diku.dk> |
Stability | experimental |
Portability | non-portable (GHC Extensions) |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
This module provides operators on functors.
- data (f :+: g) e
- fromInl :: (f :+: g) e -> Maybe (f e)
- fromInr :: (f :+: g) e -> Maybe (g e)
- caseF :: (f a -> b) -> (g a -> b) -> (f :+: g) a -> b
- type family Elem f g :: Emb
- type family Choose e1 r :: Emb
- type family Sum' e1 r :: Emb
- data Proxy a = P
- class Subsume e f g where
- type (:<:) f g = Subsume (ComprEmb (Elem f g)) f g
- inj :: forall f g a. f :<: g => f a -> g a
- proj :: forall f g a. f :<: g => g a -> Maybe (f a)
- type (:=:) f g = (f :<: g, g :<: f)
- spl :: f :=: (f1 :+: f2) => (f1 a -> b) -> (f2 a -> b) -> f a -> b
- data (f :*: g) a = (f a) :*: (g a)
- ffst :: (f :*: g) a -> f a
- fsnd :: (f :*: g) a -> g a
- data (f :&: a) e = (f e) :&: a
- class DistAnn s p s' | s' -> s, s' -> p where
- class RemA s s' | s -> s' where
- remA :: s a -> s' a
Documentation
data (f :+: g) e infixr 6 Source
Formal sum of signatures (functors).
DistAnn k s p s' => DistAnn k ((:+:) k f s) p ((:+:) k ((:&:) k f p) s') | |
RemA k s s' => RemA k ((:+:) k ((:&:) k f p) s) ((:+:) k f s') | |
(Functor f, Functor g) => Functor ((:+:) * f g) | |
(Foldable f, Foldable g) => Foldable ((:+:) * f g) | |
(Traversable f, Traversable g) => Traversable ((:+:) * f g) | |
(ShowConstr f, ShowConstr g) => ShowConstr ((:+:) * f g) | |
(ShowF f, ShowF g) => ShowF ((:+:) * f g) | |
(ArbitraryF f, ArbitraryF g) => ArbitraryF ((:+:) * f g) | Instances of |
(NFDataF f, NFDataF g) => NFDataF ((:+:) * f g) | |
(EqF f, EqF g) => EqF ((:+:) * f g) |
|
(OrdF f, OrdF g) => OrdF ((:+:) * f g) |
|
(Render f, Render g) => Render ((:+:) * f g) | |
(HasVars f v0, HasVars g v0) => HasVars ((:+:) * f g) v | |
(Desugar f h, Desugar g h) => Desugar ((:+:) * f g) h | |
(Eq (f a), Eq (g a)) => Eq ((:+:) * f g a) | |
(Ord (f a), Ord (g a)) => Ord ((:+:) * f g a) | |
(Show (f a), Show (g a)) => Show ((:+:) * f g a) |
caseF :: (f a -> b) -> (g a -> b) -> (f :+: g) a -> b Source
Utility function to case on a functor sum, without exposing the internal representation of sums.
type (:<:) f g = Subsume (ComprEmb (Elem f g)) f g infixl 5 Source
A constraint f :<: g
expresses that the signature f
is
subsumed by g
, i.e. f
can be used to construct elements in g
.
data (f :&: a) e infixr 7 Source
This data type adds a constant product (annotation) to a signature.
(f e) :&: a infixr 7 |
DistAnn k f p ((:&:) k f p) | |
RemA k ((:&:) k f p) f | |
DistAnn k s p s' => DistAnn k ((:+:) k f s) p ((:+:) k ((:&:) k f p) s') | |
RemA k s s' => RemA k ((:+:) k ((:&:) k f p) s) ((:+:) k f s') | |
Functor f => Functor ((:&:) * f a) | |
Foldable f => Foldable ((:&:) * f a) | |
Traversable f => Traversable ((:&:) * f a) | |
(ShowConstr f, Show p) => ShowConstr ((:&:) * f p) | |
(ShowF f, Show p) => ShowF ((:&:) * f p) | |
(ArbitraryF f, Arbitrary p) => ArbitraryF ((:&:) * f p) | |
(NFDataF f, NFData a) => NFDataF ((:&:) * f a) |