| Copyright | (c) 2011 Patrick Bahr |
|---|---|
| License | BSD3 |
| Maintainer | Patrick Bahr <[email protected]> |
| Stability | experimental |
| Portability | non-portable (GHC Extensions) |
| Safe Haskell | None |
| Language | Haskell98 |
Data.Comp.Multi.Annotation
Description
This module defines annotations on signatures. All definitions are generalised versions of those in Data.Comp.Annotation.
- data (f :&: a) g e = (f g e) :&: a
- class DistAnn s p s' | s' -> s, s' -> p where
- class RemA s s' | s -> s' where
- liftA :: RemA s s' => (s' a :-> t) -> s a :-> t
- ann :: (DistAnn f p g, HFunctor f) => p -> CxtFun f g
- liftA' :: (DistAnn s' p s, HFunctor s') => (s' a :-> Cxt h s' a) -> s a :-> Cxt h s a
- stripA :: (RemA g f, HFunctor g) => CxtFun g f
- propAnn :: (DistAnn f p f', DistAnn g p g', HFunctor g) => Hom f g -> Hom f' g'
- project' :: (RemA f f', s :<: f') => Cxt h f a i -> Maybe (s (Cxt h f a) i)
Documentation
data (f :&: a) g e infixr 7 Source
This data type adds a constant product to a signature. Alternatively, this could have also been defined as
data (f :&: a) (g :: * -> *) e = f g e :&: a e
This is too general, however, for example for productHHom.
Constructors
| (f g e) :&: a infixr 7 |
Instances
| DistAnn f p ((:&:) * f p) Source | |
| HFunctor f => HFunctor ((:&:) * f a) Source | |
| HFoldable f => HFoldable ((:&:) * f a) Source | |
| HTraversable f => HTraversable ((:&:) * f a) Source | |
| RemA ((:&:) * f p) f Source | |
| DistAnn s p s' => DistAnn ((:+:) * f s) p ((:+:) * ((:&:) * f p) s') Source | |
| RemA s s' => RemA ((:+:) * ((:&:) * f p) s) ((:+:) * f s') Source |
class DistAnn s p s' | s' -> s, s' -> p where Source
This class defines how to distribute an annotation over a sum of signatures.
liftA :: RemA s s' => (s' a :-> t) -> s a :-> t Source
This function transforms a function with a domain constructed from a functor to a function with a domain constructed with the same functor but with an additional annotation.
ann :: (DistAnn f p g, HFunctor f) => p -> CxtFun f g Source
This function annotates each sub term of the given term with the given value (of type a).
liftA' :: (DistAnn s' p s, HFunctor s') => (s' a :-> Cxt h s' a) -> s a :-> Cxt h s a Source
This function transforms a function with a domain constructed from a functor to a function with a domain constructed with the same functor but with an additional annotation.