{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE PolyKinds         #-}
{-# LANGUAGE Rank2Types        #-}
{-# LANGUAGE TypeOperators     #-}

module Test.StateMachine.Types.Rank2
  ( Functor
  , fmap
  , gfmap
  , (<$>)
  , Foldable
  , foldMap
  , gfoldMap
  , Traversable
  , traverse
  , gtraverse
  )
  where

import qualified Control.Applicative as Rank1
import qualified Control.Monad       as Rank1
import qualified Data.Foldable       as Rank1
import           Data.Kind
                   (Type)
import qualified Data.Traversable    as Rank1
import           GHC.Generics
                   ((:*:)((:*:)), (:+:)(L1, R1), Generic1, K1(K1),
                   M1(M1), Rec1(Rec1), Rep1, U1(U1), from1, to1, (:.:)(Comp1))
import           Prelude             hiding
                   (Applicative(..), Foldable(..), Functor(..),
                   Traversable(..), (<$>))

------------------------------------------------------------------------

class Functor (f :: (k -> Type) -> Type) where
  fmap :: (forall x. p x -> q x) -> f p -> f q
  default fmap :: (Generic1 f, Functor (Rep1 f))
               => (forall x. p x -> q x) -> f p -> f q
  fmap = (forall (a :: k). p a -> q a) -> f p -> f q
forall {k} (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
(Generic1 f, Functor (Rep1 f)) =>
(forall (a :: k). p a -> q a) -> f p -> f q
gfmap

gfmap :: (Generic1 f, Functor (Rep1 f)) => (forall a. p a -> q a) -> f p -> f q
gfmap :: forall {k} (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
(Generic1 f, Functor (Rep1 f)) =>
(forall (a :: k). p a -> q a) -> f p -> f q
gfmap forall (a :: k). p a -> q a
f = Rep1 f q -> f q
forall k (f :: k -> *) (a :: k). Generic1 f => Rep1 f a -> f a
forall (a :: k -> *). Rep1 f a -> f a
to1 (Rep1 f q -> f q) -> (f p -> Rep1 f q) -> f p -> f q
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (a :: k). p a -> q a) -> Rep1 f p -> Rep1 f q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> Rep1 f p -> Rep1 f q
fmap p x -> q x
forall (a :: k). p a -> q a
f (Rep1 f p -> Rep1 f q) -> (f p -> Rep1 f p) -> f p -> Rep1 f q
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f p -> Rep1 f p
forall k (f :: k -> *) (a :: k). Generic1 f => f a -> Rep1 f a
forall (a :: k -> *). f a -> Rep1 f a
from1

(<$>) :: Functor f => (forall x. p x -> q x) -> f p -> f q
<$> :: forall {k} (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
(<$>) = (forall (x :: k). p x -> q x) -> f p -> f q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> f p -> f q
fmap
{-# INLINE (<$>) #-}

instance Functor U1 where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> U1 p -> U1 q
fmap forall (x :: k). p x -> q x
_ U1 p
U1 = U1 q
forall k (p :: k). U1 p
U1

instance Functor (K1 i c) where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> K1 i c p -> K1 i c q
fmap forall (x :: k). p x -> q x
_ (K1 c
c) = c -> K1 i c q
forall k i c (p :: k). c -> K1 i c p
K1 c
c

instance (Functor f, Functor g) => Functor (f :+: g) where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> (:+:) f g p -> (:+:) f g q
fmap forall (x :: k). p x -> q x
f (L1 f p
x) = f q -> (:+:) f g q
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 ((forall (x :: k). p x -> q x) -> f p -> f q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> f p -> f q
fmap p x -> q x
forall (x :: k). p x -> q x
f f p
x)
  fmap forall (x :: k). p x -> q x
f (R1 g p
y) = g q -> (:+:) f g q
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 ((forall (x :: k). p x -> q x) -> g p -> g q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> g p -> g q
fmap p x -> q x
forall (x :: k). p x -> q x
f g p
y)

instance (Functor f, Functor g) => Functor (f :*: g) where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> (:*:) f g p -> (:*:) f g q
fmap forall (x :: k). p x -> q x
f (f p
x :*: g p
y) = (forall (x :: k). p x -> q x) -> f p -> f q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> f p -> f q
fmap p x -> q x
forall (x :: k). p x -> q x
f f p
x f q -> g q -> (:*:) f g q
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*: (forall (x :: k). p x -> q x) -> g p -> g q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> g p -> g q
fmap p x -> q x
forall (x :: k). p x -> q x
f g p
y

instance (Rank1.Functor f, Functor g) => Functor (f :.: g) where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> (:.:) f g p -> (:.:) f g q
fmap forall (x :: k). p x -> q x
f (Comp1 f (g p)
fg) = f (g q) -> (:.:) f g q
forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1).
f (g p) -> (:.:) f g p
Comp1 ((g p -> g q) -> f (g p) -> f (g q)
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.fmap ((forall (x :: k). p x -> q x) -> g p -> g q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> g p -> g q
fmap p x -> q x
forall (x :: k). p x -> q x
f) f (g p)
fg)

instance Functor f => Functor (M1 i c f) where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> M1 i c f p -> M1 i c f q
fmap forall (x :: k). p x -> q x
f (M1 f p
x) = f q -> M1 i c f q
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 ((forall (x :: k). p x -> q x) -> f p -> f q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> f p -> f q
fmap p x -> q x
forall (x :: k). p x -> q x
f f p
x)

instance Functor f => Functor (Rec1 f) where
  fmap :: forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> Rec1 f p -> Rec1 f q
fmap forall (x :: k). p x -> q x
f (Rec1 f p
x) = f q -> Rec1 f q
forall k (f :: k -> *) (p :: k). f p -> Rec1 f p
Rec1 ((forall (x :: k). p x -> q x) -> f p -> f q
forall k (f :: (k -> *) -> *) (p :: k -> *) (q :: k -> *).
Functor f =>
(forall (x :: k). p x -> q x) -> f p -> f q
forall (p :: k -> *) (q :: k -> *).
(forall (x :: k). p x -> q x) -> f p -> f q
fmap p x -> q x
forall (x :: k). p x -> q x
f f p
x)

------------------------------------------------------------------------

class Foldable (f :: (k -> Type) -> Type) where
  foldMap :: Monoid m => (forall x. p x -> m) -> f p -> m
  default foldMap :: (Generic1 f, Foldable (Rep1 f), Monoid m)
                  => (forall a. p a -> m) -> f p -> m
  foldMap = (forall (a :: k). p a -> m) -> f p -> m
forall {k} (f :: (k -> *) -> *) m (p :: k -> *).
(Generic1 f, Foldable (Rep1 f), Monoid m) =>
(forall (a :: k). p a -> m) -> f p -> m
gfoldMap

gfoldMap :: (Generic1 f, Foldable (Rep1 f), Monoid m)
         => (forall a. p a -> m) -> f p -> m
gfoldMap :: forall {k} (f :: (k -> *) -> *) m (p :: k -> *).
(Generic1 f, Foldable (Rep1 f), Monoid m) =>
(forall (a :: k). p a -> m) -> f p -> m
gfoldMap forall (a :: k). p a -> m
f = (forall (a :: k). p a -> m) -> Rep1 f p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> Rep1 f p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (a :: k). p a -> m
f (Rep1 f p -> m) -> (f p -> Rep1 f p) -> f p -> m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f p -> Rep1 f p
forall k (f :: k -> *) (a :: k). Generic1 f => f a -> Rep1 f a
forall (a :: k -> *). f a -> Rep1 f a
from1

instance Foldable U1 where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> U1 p -> m
foldMap forall (x :: k). p x -> m
_ U1 p
U1 = m
forall a. Monoid a => a
mempty

instance Foldable (K1 i c) where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> K1 i c p -> m
foldMap forall (x :: k). p x -> m
_ (K1 c
_) = m
forall a. Monoid a => a
mempty

instance (Foldable f, Foldable g) => Foldable (f :+: g) where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> (:+:) f g p -> m
foldMap forall (x :: k). p x -> m
f (L1 f p
x) = (forall (x :: k). p x -> m) -> f p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> f p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f f p
x
  foldMap forall (x :: k). p x -> m
f (R1 g p
y) = (forall (x :: k). p x -> m) -> g p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> g p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f g p
y

instance (Foldable f, Foldable g) => Foldable (f :*: g) where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> (:*:) f g p -> m
foldMap forall (x :: k). p x -> m
f (f p
x :*: g p
y) = (forall (x :: k). p x -> m) -> f p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> f p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f f p
x m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` (forall (x :: k). p x -> m) -> g p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> g p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f g p
y

instance (Rank1.Foldable f, Foldable g) => Foldable (f :.: g) where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> (:.:) f g p -> m
foldMap forall (x :: k). p x -> m
f (Comp1 f (g p)
fg) = (g p -> m) -> f (g p) -> m
forall m a. Monoid m => (a -> m) -> f a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
Rank1.foldMap ((forall (x :: k). p x -> m) -> g p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> g p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f) f (g p)
fg

instance Foldable f => Foldable (M1 i c f) where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> M1 i c f p -> m
foldMap forall (x :: k). p x -> m
f (M1 f p
x) = (forall (x :: k). p x -> m) -> f p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> f p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f f p
x

instance Foldable f => Foldable (Rec1 f) where
  foldMap :: forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> Rec1 f p -> m
foldMap forall (x :: k). p x -> m
f (Rec1 f p
x) = (forall (x :: k). p x -> m) -> f p -> m
forall m (p :: k -> *).
Monoid m =>
(forall (x :: k). p x -> m) -> f p -> m
forall k (f :: (k -> *) -> *) m (p :: k -> *).
(Foldable f, Monoid m) =>
(forall (x :: k). p x -> m) -> f p -> m
foldMap p x -> m
forall (x :: k). p x -> m
f f p
x

------------------------------------------------------------------------

class (Functor t, Foldable t) => Traversable (t :: (k -> Type) -> Type) where
  traverse :: Rank1.Applicative f => (forall a. p a -> f (q a)) -> t p -> f (t q)
  default traverse :: (Generic1 t, Traversable (Rep1 t), Rank1.Applicative f)
                   => (forall a. p a -> f (q a)) -> t p -> f (t q)
  traverse = (forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall {k} (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Generic1 t, Traversable (Rep1 t), Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
gtraverse

gtraverse :: (Generic1 t, Traversable (Rep1 t), Rank1.Applicative f)
          => (forall a. p a -> f (q a)) -> t p -> f (t q)
gtraverse :: forall {k} (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Generic1 t, Traversable (Rep1 t), Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
gtraverse forall (a :: k). p a -> f (q a)
f = (Rep1 t q -> t q) -> f (Rep1 t q) -> f (t q)
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.fmap Rep1 t q -> t q
forall k (f :: k -> *) (a :: k). Generic1 f => Rep1 f a -> f a
forall (a :: k -> *). Rep1 t a -> t a
to1 (f (Rep1 t q) -> f (t q))
-> (t p -> f (Rep1 t q)) -> t p -> f (t q)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (a :: k). p a -> f (q a)) -> Rep1 t p -> f (Rep1 t q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> Rep1 t p -> f (Rep1 t q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f (Rep1 t p -> f (Rep1 t q))
-> (t p -> Rep1 t p) -> t p -> f (Rep1 t q)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t p -> Rep1 t p
forall k (f :: k -> *) (a :: k). Generic1 f => f a -> Rep1 f a
forall (a :: k -> *). t a -> Rep1 t a
from1

instance Traversable U1 where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> U1 p -> f (U1 q)
traverse forall (a :: k). p a -> f (q a)
_ U1 p
U1 = U1 q -> f (U1 q)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
Rank1.pure U1 q
forall k (p :: k). U1 p
U1

instance Traversable (K1 i c) where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> K1 i c p -> f (K1 i c q)
traverse forall (a :: k). p a -> f (q a)
_ (K1 c
c) = K1 i c q -> f (K1 i c q)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
Rank1.pure (c -> K1 i c q
forall k i c (p :: k). c -> K1 i c p
K1 c
c)

instance (Traversable f, Traversable g) => Traversable (f :+: g) where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> (:+:) f g p -> f ((:+:) f g q)
traverse forall (a :: k). p a -> f (q a)
f (L1 f p
x) = f q -> (:+:) f g q
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (f q -> (:+:) f g q) -> f (f q) -> f ((:+:) f g q)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.<$> (forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f f p
x
  traverse forall (a :: k). p a -> f (q a)
f (R1 g p
y) = g q -> (:+:) f g q
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (g q -> (:+:) f g q) -> f (g q) -> f ((:+:) f g q)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.<$> (forall (a :: k). p a -> f (q a)) -> g p -> f (g q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> g p -> f (g q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f g p
y

instance (Traversable f, Traversable g) => Traversable (f :*: g) where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> (:*:) f g p -> f ((:*:) f g q)
traverse forall (a :: k). p a -> f (q a)
f (f p
x :*: g p
y) = f q -> g q -> (:*:) f g q
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
(:*:) (f q -> g q -> (:*:) f g q) -> f (f q) -> f (g q -> (:*:) f g q)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.<$> (forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f f p
x f (g q -> (:*:) f g q) -> f (g q) -> f ((:*:) f g q)
forall a b. f (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Rank1.<*> (forall (a :: k). p a -> f (q a)) -> g p -> f (g q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> g p -> f (g q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f g p
y

instance (Rank1.Traversable f, Traversable g) => Traversable (f :.: g) where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> (:.:) f g p -> f ((:.:) f g q)
traverse forall (a :: k). p a -> f (q a)
f (Comp1 f (g p)
fg) = f (g q) -> (:.:) f g q
forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1).
f (g p) -> (:.:) f g p
Comp1 (f (g q) -> (:.:) f g q) -> f (f (g q)) -> f ((:.:) f g q)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.<$> (g p -> f (g q)) -> f (g p) -> f (f (g q))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> f a -> f (f b)
Rank1.traverse ((forall (a :: k). p a -> f (q a)) -> g p -> f (g q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> g p -> f (g q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f) f (g p)
fg

instance Traversable f => Traversable (M1 i c f) where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> M1 i c f p -> f (M1 i c f q)
traverse forall (a :: k). p a -> f (q a)
f (M1 f p
x) = f q -> M1 i c f q
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (f q -> M1 i c f q) -> f (f q) -> f (M1 i c f q)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.<$> (forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f f p
x

instance Traversable f => Traversable (Rec1 f) where
  traverse :: forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> Rec1 f p -> f (Rec1 f q)
traverse forall (a :: k). p a -> f (q a)
f (Rec1 f p
x) = f q -> Rec1 f q
forall k (f :: k -> *) (p :: k). f p -> Rec1 f p
Rec1 (f q -> Rec1 f q) -> f (f q) -> f (Rec1 f q)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Rank1.<$> (forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
forall k (t :: (k -> *) -> *) (f :: * -> *) (p :: k -> *)
       (q :: k -> *).
(Traversable t, Applicative f) =>
(forall (a :: k). p a -> f (q a)) -> t p -> f (t q)
forall (f :: * -> *) (p :: k -> *) (q :: k -> *).
Applicative f =>
(forall (a :: k). p a -> f (q a)) -> f p -> f (f q)
traverse p a -> f (q a)
forall (a :: k). p a -> f (q a)
f f p
x