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
- caseF :: (f a -> b) -> (g a -> b) -> (f :+: g) a -> b
- class sub :<: sup where
- 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).
(:<:) f g => f :<: ((:+:) h g) | |
f :<: ((:+:) f g) | |
(Functor f, Functor g) => Functor ((:+:) f g) | |
(Foldable f, Foldable g) => Foldable ((:+:) f g) | |
(Traversable f, Traversable g) => Traversable ((:+:) 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) |
|
(HasVars f v0, HasVars g v0) => HasVars ((:+:) f g) v | |
(Desugar f h, Desugar g h) => Desugar ((:+:) f g) h | |
DistAnn s p s' => DistAnn ((:+:) f s) p ((:+:) ((:&:) f p) s') | |
RemA s s' => RemA ((:+:) ((:&:) f p) s) ((:+:) f s') | |
(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.
class sub :<: sup where Source
Signature containment relation for automatic injections. The left-hand must
be an atomic signature, where as the right-hand side must have a list-like
structure. Examples include f :<: f :+: g
and g :<: f :+: (g :+: h)
,
non-examples include f :+: g :<: f :+: (g :+: h)
and
f :<: (f :+: g) :+: h
.
data (f :&: a) e infixr 7 Source
This data type adds a constant product (annotation) to a signature.
(f e) :&: a infixr 7 |
DistAnn f p ((:&:) f p) | |
Functor f => Functor ((:&:) f a) | |
Foldable f => Foldable ((:&:) f a) | |
Traversable f => Traversable ((:&:) f a) | |
(ShowF f, Show p) => ShowF ((:&:) f p) | |
(ArbitraryF f, Arbitrary p) => ArbitraryF ((:&:) f p) | |
(NFDataF f, NFData a) => NFDataF ((:&:) f a) | |
RemA ((:&:) f p) f | |
DistAnn s p s' => DistAnn ((:+:) f s) p ((:+:) ((:&:) f p) s') | |
RemA s s' => RemA ((:+:) ((:&:) f p) s) ((:+:) f s') |