Safe Haskell | None |
---|---|
Language | Haskell2010 |
- class FunctorB b => TraversableB b where
- bsequence :: (Applicative f, TraversableB b) => b (Compose f g) -> f (b g)
- type CanDeriveGenericInstance b = (Generic (b (Target F)), Generic (b (Target G)), GTraversableB (Rep (b (Target F))), Rep (b (Target G)) ~ Repl (Target F) (Target G) (Rep (b (Target F))))
- class GTraversableB b
- gbtraverseDefault :: (Applicative t, CanDeriveGenericInstance b) => (forall a. f a -> t (g a)) -> b f -> t (b g)
Documentation
class FunctorB b => TraversableB b where Source #
Barbie-types that can be traversed from left to right. Instances should satisfy the following laws:
t .btraverse
f =btraverse
(t . f) -- naturalitybtraverse
Identity
=Identity
-- identitybtraverse
(Compose
.fmap
g . f) =Compose
.fmap
(btraverse
g) .btraverse
f -- composition
There is a default btraverse
implementation for Generic
types, so
instances can derived automatically.
btraverse :: Applicative t => (forall a. f a -> t (g a)) -> b f -> t (b g) Source #
btraverse :: (Applicative t, CanDeriveGenericInstance b) => (forall a. f a -> t (g a)) -> b f -> t (b g) Source #
TraversableB b => TraversableB (Barbie b) Source # | |
bsequence :: (Applicative f, TraversableB b) => b (Compose f g) -> f (b g) Source #
Evaluate each action in the structure from left to right, and collect the results.
type CanDeriveGenericInstance b = (Generic (b (Target F)), Generic (b (Target G)), GTraversableB (Rep (b (Target F))), Rep (b (Target G)) ~ Repl (Target F) (Target G) (Rep (b (Target F)))) Source #
Intuivively, the requirements to have
derived are:TraversableB
B
- There is an instance of
for everyGeneric
(B f)f
- If
f
is used as argument to some type in the definition ofB
, it is only on a Barbie-type with aTraversableB
instance. - Recursive usages of
B f
are allowed to appear as argument to aTraversable
(e.g. @Maybe
(B f)')
class GTraversableB b Source #
gbtraverse
GTraversableB (V1 *) Source # | |
GTraversableB (U1 *) Source # | |
(~) (* -> *) (K1 * i c) (Repl (Target F) (Target G) (K1 * i c)) => GTraversableB (K1 * i c) Source # | |
(GTraversableB l, GTraversableB r) => GTraversableB ((:+:) * l r) Source # | |
(GTraversableB l, GTraversableB r) => GTraversableB ((:*:) * l r) Source # | |
GTraversableB x => GTraversableB (M1 * i c x) Source # | |
gbtraverseDefault :: (Applicative t, CanDeriveGenericInstance b) => (forall a. f a -> t (g a)) -> b f -> t (b g) Source #