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 | Haskell2010 |
Data.Comp.Ops
Description
This module provides operators on functors.
Synopsis
- 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 :: Type -> Type) (g :: Type -> Type) :: Emb where ...
- class Subsume (e :: Emb) (f :: Type -> Type) (g :: Type -> Type) 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).
Instances
DistAnn s p s' => DistAnn (f :+: s :: k -> Type) p ((f :&: p) :+: s' :: k -> Type) Source # | |
RemA s s' => RemA ((f :&: p) :+: s :: k -> Type) (f :+: s' :: k -> Type) Source # | |
(Foldable f, Foldable g) => Foldable (f :+: g) Source # | |
Defined in Data.Comp.Ops Methods fold :: Monoid m => (f :+: g) m -> m # foldMap :: Monoid m => (a -> m) -> (f :+: g) a -> m # foldMap' :: Monoid m => (a -> m) -> (f :+: g) a -> m # foldr :: (a -> b -> b) -> b -> (f :+: g) a -> b # foldr' :: (a -> b -> b) -> b -> (f :+: g) a -> b # foldl :: (b -> a -> b) -> b -> (f :+: g) a -> b # foldl' :: (b -> a -> b) -> b -> (f :+: g) a -> b # foldr1 :: (a -> a -> a) -> (f :+: g) a -> a # foldl1 :: (a -> a -> a) -> (f :+: g) a -> a # toList :: (f :+: g) a -> [a] # length :: (f :+: g) a -> Int # elem :: Eq a => a -> (f :+: g) a -> Bool # maximum :: Ord a => (f :+: g) a -> a # minimum :: Ord a => (f :+: g) a -> a # | |
(Traversable f, Traversable g) => Traversable (f :+: g) Source # | |
Defined in Data.Comp.Ops | |
(Functor f, Functor g) => Functor (f :+: g) Source # | |
(ArbitraryF f, ArbitraryF g) => ArbitraryF (f :+: g) Source # | Instances of |
(NFDataF f, NFDataF g) => NFDataF (f :+: g) Source # | |
(EqF f, EqF g) => EqF (f :+: g) Source # |
|
(OrdF f, OrdF g) => OrdF (f :+: g) Source # |
|
(ShowConstr f, ShowConstr g) => ShowConstr (f :+: g) Source # | |
Defined in Data.Comp.Show Methods showConstr :: (f :+: g) a -> String Source # | |
(ShowF f, ShowF g) => ShowF (f :+: g) Source # | |
(Render f, Render g) => Render (f :+: g) Source # | |
Defined in Data.Comp.Render | |
(Desugar f h, Desugar g h) => Desugar (f :+: g) h Source # | |
(HasVars f v, HasVars g v) => HasVars (f :+: g) v Source # | |
(Show (f a), Show (g a)) => Show ((f :+: g) a) Source # | |
(Eq (f a), Eq (g a)) => Eq ((f :+: g) a) Source # | |
(Ord (f a), Ord (g a)) => Ord ((f :+: g) a) Source # | |
Defined in Data.Comp.Sum |
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 :*: g) a infixr 8 Source #
Formal product of signatures (functors).
Constructors
(f a) :*: (g a) infixr 8 |
Instances
(Foldable f, Foldable g) => Foldable (f :*: g) Source # | |
Defined in Data.Comp.Ops Methods fold :: Monoid m => (f :*: g) m -> m # foldMap :: Monoid m => (a -> m) -> (f :*: g) a -> m # foldMap' :: Monoid m => (a -> m) -> (f :*: g) a -> m # foldr :: (a -> b -> b) -> b -> (f :*: g) a -> b # foldr' :: (a -> b -> b) -> b -> (f :*: g) a -> b # foldl :: (b -> a -> b) -> b -> (f :*: g) a -> b # foldl' :: (b -> a -> b) -> b -> (f :*: g) a -> b # foldr1 :: (a -> a -> a) -> (f :*: g) a -> a # foldl1 :: (a -> a -> a) -> (f :*: g) a -> a # toList :: (f :*: g) a -> [a] # length :: (f :*: g) a -> Int # elem :: Eq a => a -> (f :*: g) a -> Bool # maximum :: Ord a => (f :*: g) a -> a # minimum :: Ord a => (f :*: g) a -> a # | |
(Traversable f, Traversable g) => Traversable (f :*: g) Source # | |
Defined in Data.Comp.Ops | |
(Functor f, Functor g) => Functor (f :*: g) Source # | |
data (f :&: a) e infixr 7 Source #
This data type adds a constant product (annotation) to a signature.
Constructors
(f e) :&: a infixr 7 |
Instances
DistAnn (f :: k -> TYPE LiftedRep) p (f :&: p :: k -> Type) Source # | |
RemA (f :&: p :: k -> Type) (f :: k -> Type) Source # | |
Defined in Data.Comp.Ops | |
DistAnn s p s' => DistAnn (f :+: s :: k -> Type) p ((f :&: p) :+: s' :: k -> Type) Source # | |
RemA s s' => RemA ((f :&: p) :+: s :: k -> Type) (f :+: s' :: k -> Type) Source # | |
Foldable f => Foldable (f :&: a) Source # | |
Defined in Data.Comp.Ops Methods fold :: Monoid m => (f :&: a) m -> m # foldMap :: Monoid m => (a0 -> m) -> (f :&: a) a0 -> m # foldMap' :: Monoid m => (a0 -> m) -> (f :&: a) a0 -> m # foldr :: (a0 -> b -> b) -> b -> (f :&: a) a0 -> b # foldr' :: (a0 -> b -> b) -> b -> (f :&: a) a0 -> b # foldl :: (b -> a0 -> b) -> b -> (f :&: a) a0 -> b # foldl' :: (b -> a0 -> b) -> b -> (f :&: a) a0 -> b # foldr1 :: (a0 -> a0 -> a0) -> (f :&: a) a0 -> a0 # foldl1 :: (a0 -> a0 -> a0) -> (f :&: a) a0 -> a0 # toList :: (f :&: a) a0 -> [a0] # null :: (f :&: a) a0 -> Bool # length :: (f :&: a) a0 -> Int # elem :: Eq a0 => a0 -> (f :&: a) a0 -> Bool # maximum :: Ord a0 => (f :&: a) a0 -> a0 # minimum :: Ord a0 => (f :&: a) a0 -> a0 # | |
Traversable f => Traversable (f :&: a) Source # | |
Defined in Data.Comp.Ops | |
Functor f => Functor (f :&: a) Source # | |
(ArbitraryF f, Arbitrary p) => ArbitraryF (f :&: p) Source # | |
(NFDataF f, NFData a) => NFDataF (f :&: a) Source # | |
(ShowConstr f, Show p) => ShowConstr (f :&: p) Source # | |
Defined in Data.Comp.Show Methods showConstr :: (f :&: p) a -> String Source # | |
(ShowF f, Show p) => ShowF (f :&: p) Source # | |
HasVars f v => HasVars (f :&: a) v 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.
Methods
injectA :: p -> s a -> s' a Source #
Inject an annotation over a signature.
projectA :: s' a -> (s a, p) Source #
Project an annotation from a signature.