Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Data.Profunctor.Traversing
Synopsis
- class (Choice p, Strong p) => Traversing p where
- newtype CofreeTraversing p a b = CofreeTraversing {
- runCofreeTraversing :: forall f. Traversable f => p (f a) (f b)
- data FreeTraversing p a b where
- FreeTraversing :: Traversable f => (f y -> b) -> p x y -> (a -> f x) -> FreeTraversing p a b
- dimapWandering :: Traversing p => (a' -> a) -> (b -> b') -> p a b -> p a' b'
- lmapWandering :: Traversing p => (a -> b) -> p b c -> p a c
- rmapWandering :: Traversing p => (b -> c) -> p a b -> p a c
- firstTraversing :: Traversing p => p a b -> p (a, c) (b, c)
- secondTraversing :: Traversing p => p a b -> p (c, a) (c, b)
- leftTraversing :: Traversing p => p a b -> p (Either a c) (Either b c)
- rightTraversing :: Traversing p => p a b -> p (Either c a) (Either c b)
Documentation
class (Choice p, Strong p) => Traversing p where #
Note: Definitions in terms of wander
are much more efficient!
Methods
traverse' :: Traversable f => p a b -> p (f a) (f b) #
Laws:
traverse'
≡wander
traverse
traverse'
.
rmap
f ≡rmap
(fmap
f).
traverse'
traverse'
.
traverse'
≡dimap
Compose
getCompose
.
traverse'
dimap
Identity
runIdentity
.
traverse'
≡id
wander :: (forall f. Applicative f => (a -> f b) -> s -> f t) -> p a b -> p s t #
This combinator is mutually defined in terms of traverse'
Instances
Monad m => Traversing (Kleisli m) # | |
Defined in Data.Profunctor.Traversing | |
Profunctor p => Traversing (CofreeMapping p) # | |
Defined in Data.Profunctor.Mapping Methods traverse' :: Traversable f => CofreeMapping p a b -> CofreeMapping p (f a) (f b) # wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> CofreeMapping p a b -> CofreeMapping p s t # | |
Traversing (FreeMapping p) # | |
Defined in Data.Profunctor.Mapping Methods traverse' :: Traversable f => FreeMapping p a b -> FreeMapping p (f a) (f b) # wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> FreeMapping p a b -> FreeMapping p s t # | |
Profunctor p => Traversing (CofreeTraversing p) # | |
Defined in Data.Profunctor.Traversing Methods traverse' :: Traversable f => CofreeTraversing p a b -> CofreeTraversing p (f a) (f b) # wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> CofreeTraversing p a b -> CofreeTraversing p s t # | |
Traversing (FreeTraversing p) # | |
Defined in Data.Profunctor.Traversing Methods traverse' :: Traversable f => FreeTraversing p a b -> FreeTraversing p (f a) (f b) # wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> FreeTraversing p a b -> FreeTraversing p s t # | |
Traversing p => Traversing (Coyoneda p) # | |
Traversing p => Traversing (Yoneda p) # | |
Monoid m => Traversing (Forget m :: Type -> Type -> Type) # | |
Applicative m => Traversing (Star m) # | |
Traversing (->) # | |
Defined in Data.Profunctor.Traversing | |
(Functor f, Traversing p) => Traversing (Tannen f p) # | |
(Functor f, Traversing p) => Traversing (Cayley f p) # | |
(Traversing p, Traversing q) => Traversing (Procompose p q) # | |
Defined in Data.Profunctor.Composition Methods traverse' :: Traversable f => Procompose p q a b -> Procompose p q (f a) (f b) # wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> Procompose p q a b -> Procompose p q s t # |
newtype CofreeTraversing p a b #
Constructors
CofreeTraversing | |
Fields
|
Instances
data FreeTraversing p a b where #
FreeTraversing -| CofreeTraversing
Constructors
FreeTraversing :: Traversable f => (f y -> b) -> p x y -> (a -> f x) -> FreeTraversing p a b |
Instances
ProfunctorMonad FreeTraversing # | |
Defined in Data.Profunctor.Traversing Methods proreturn :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> FreeTraversing p # projoin :: forall (p :: Type -> Type -> Type). Profunctor p => FreeTraversing (FreeTraversing p) :-> FreeTraversing p # | |
ProfunctorFunctor FreeTraversing # | |
Defined in Data.Profunctor.Traversing Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> FreeTraversing p :-> FreeTraversing q # | |
Choice (FreeTraversing p) # | |
Defined in Data.Profunctor.Traversing Methods left' :: FreeTraversing p a b -> FreeTraversing p (Either a c) (Either b c) # right' :: FreeTraversing p a b -> FreeTraversing p (Either c a) (Either c b) # | |
Strong (FreeTraversing p) # | |
Defined in Data.Profunctor.Traversing Methods first' :: FreeTraversing p a b -> FreeTraversing p (a, c) (b, c) # second' :: FreeTraversing p a b -> FreeTraversing p (c, a) (c, b) # | |
Traversing (FreeTraversing p) # | |
Defined in Data.Profunctor.Traversing Methods traverse' :: Traversable f => FreeTraversing p a b -> FreeTraversing p (f a) (f b) # wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> FreeTraversing p a b -> FreeTraversing p s t # | |
Profunctor (FreeTraversing p) # | |
Defined in Data.Profunctor.Traversing Methods dimap :: (a -> b) -> (c -> d) -> FreeTraversing p b c -> FreeTraversing p a d # lmap :: (a -> b) -> FreeTraversing p b c -> FreeTraversing p a c # rmap :: (b -> c) -> FreeTraversing p a b -> FreeTraversing p a c # (#.) :: forall a b c q. Coercible c b => q b c -> FreeTraversing p a b -> FreeTraversing p a c # (.#) :: forall a b c q. Coercible b a => FreeTraversing p b c -> q a b -> FreeTraversing p a c # | |
Functor (FreeTraversing p a) # | |
Defined in Data.Profunctor.Traversing Methods fmap :: (a0 -> b) -> FreeTraversing p a a0 -> FreeTraversing p a b # (<$) :: a0 -> FreeTraversing p a b -> FreeTraversing p a a0 # |
Profunctor in terms of Traversing
dimapWandering :: Traversing p => (a' -> a) -> (b -> b') -> p a b -> p a' b' #
A definition of dimap
for Traversing
instances that define
an explicit wander
.
lmapWandering :: Traversing p => (a -> b) -> p b c -> p a c #
lmapWandering
may be a more efficient implementation
of lmap
than the default produced from dimapWandering
.
rmapWandering :: Traversing p => (b -> c) -> p a b -> p a c #
rmapWandering
is the same as the default produced from
dimapWandering
.
Strong in terms of Traversing
firstTraversing :: Traversing p => p a b -> p (a, c) (b, c) #
secondTraversing :: Traversing p => p a b -> p (c, a) (c, b) #
Choice in terms of Traversing
leftTraversing :: Traversing p => p a b -> p (Either a c) (Either b c) #
rightTraversing :: Traversing p => p a b -> p (Either c a) (Either c b) #