-- |
-- Module      : Data.HFunctor.HTraversable
-- Copyright   : (c) Justin Le 2019
-- License     : BSD3
--
-- Maintainer  : justin@jle.im
-- Stability   : experimental
-- Portability : non-portable
--
-- Provides a "higher-order" version of 'Traversable' and 'Traversable1',
-- in the same way that 'HFunctor' is a higher-order version of 'Functor'.
--
-- Note that in theory we could have 'HFoldable' as well, in the hierarchy,
-- to represent something that does not have an 'HFunctor' instance.
-- But it is not clear exactly why it would be useful as an abstraction.
-- This may be added in the future if use cases pop up.  For the most part,
-- the things you would want to do with an 'HFoldable', you could do with
-- 'hfoldMap' or 'iget'; it could in theory be useful for things without
-- 'HTraversable' or 'Interpret' instances, but it isn't clear what those
-- instances might be.
--
-- For instances of 'Interpret', there is some overlap with the
-- functionality of 'iget', 'icollect', and 'icollect1'.
--
-- @since 0.3.6.0
module Data.HFunctor.HTraversable (
  -- * 'HTraversable'
    HTraversable(..)
  , hsequence, hfoldMap, htoList, hmapDefault, hfor
  -- * 'HTraversable1'
  , HTraversable1(..)
  , hsequence1, hfoldMap1, htoNonEmpty, hfor1
  ) where

import           Control.Applicative
import           Control.Applicative.Backwards
import           Control.Applicative.Free
import           Control.Applicative.Lift
import           Control.Applicative.ListF
import           Control.Applicative.Step
import           Control.Comonad.Trans.Env
import           Control.Monad.Trans.Compose
import           Control.Monad.Trans.Identity
import           Control.Monad.Trans.Maybe
import           Control.Natural
import           Data.Bifunctor.Joker
import           Data.Bitraversable
import           Data.Coerce
import           Data.Functor.Apply
import           Data.Functor.Coyoneda
import           Data.Functor.Day                    (Day(..))
import           Data.Functor.Identity
import           Data.Functor.Product
import           Data.Functor.Reverse
import           Data.Functor.Sum
import           Data.Functor.These
import           Data.HFunctor
import           Data.HFunctor.Internal
import           Data.HFunctor.Interpret
import           Data.List.NonEmpty                  (NonEmpty)
import           Data.Semigroup                      (Endo(..))
import           Data.Semigroup.Traversable
import           Data.Tagged
import           Data.Vinyl.CoRec
import           Data.Vinyl.Core                     (Rec)
import           Data.Vinyl.Recursive
import           GHC.Generics
import qualified Control.Alternative.Free            as Alt
import qualified Control.Applicative.Free            as Ap
import qualified Control.Applicative.Free.Fast       as FAF
import qualified Control.Applicative.Free.Final      as FA
import qualified Control.Applicative.Lift            as Lift
import qualified Data.Functor.Contravariant.Coyoneda as CCY
import qualified Data.Functor.Invariant.Day          as ID
import qualified Data.Functor.Invariant.Night        as IN
import qualified Data.SOP                            as SOP


-- | A higher-kinded version of 'Traversable1', in the same way that
-- 'HFunctor' is the higher-kinded version of 'Functor'.  Gives you an
-- "effectful" 'hmap', in the same way that 'traverse1' gives you an
-- effectful 'fmap', guaranteeing at least one item.
--
-- The typical analogues of 'Traversable1' laws apply.
--
-- @since 0.3.6.0
class HTraversable t => HTraversable1 t where
    -- | An "effectful" 'hmap', in the same way that 'traverse1' is an
    -- effectful 'fmap', guaranteeing at least one item.
    htraverse1 :: Apply h => (forall x. f x -> h (g x)) -> t f a -> h (t g a)

-- | A wrapper over a common pattern of "inverting" layers of a functor
-- combinator that always contains at least one @f@ item.
--
-- @since 0.3.6.0
hsequence1 :: (HTraversable1 t, Apply h) => t (h :.: f) a -> h (t f a)
hsequence1 :: t (h :.: f) a -> h (t f a)
hsequence1 = (forall (x :: k). (:.:) h f x -> h (f x))
-> t (h :.: f) a -> h (t f a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable1 t, Apply h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse1 forall (x :: k). (:.:) h f x -> h (f x)
forall k2 (f :: k2 -> *) k1 (g :: k1 -> k2) (p :: k1).
(:.:) f g p -> f (g p)
unComp1

-- | Collect all the @f x@s inside a @t f a@ into a semigroupoidal result
-- using a projecting function.
--
-- See 'iget'.
--
-- @since 0.3.6.0
hfoldMap1 :: (HTraversable1 t, Semigroup m) => (forall x. f x -> m) -> t f a -> m
hfoldMap1 :: (forall (x :: k). f x -> m) -> t f a -> m
hfoldMap1 forall (x :: k). f x -> m
f = Const m (t Any a) -> m
forall a k (b :: k). Const a b -> a
getConst (Const m (t Any a) -> m)
-> (t f a -> Const m (t Any a)) -> t f a -> m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (x :: k). f x -> Const m (Any x))
-> t f a -> Const m (t Any a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable1 t, Apply h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse1 (m -> Const m (Any x)
forall k a (b :: k). a -> Const a b
Const (m -> Const m (Any x)) -> (f x -> m) -> f x -> Const m (Any x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f x -> m
forall (x :: k). f x -> m
f)

-- | Collect all the @f x@s inside a @t f a@ into a non-empty list, using
-- a projecting function.
--
-- See 'icollect1'.
--
-- @since 0.3.6.0
htoNonEmpty :: HTraversable1 t => (forall x. f x -> b) -> t f a -> NonEmpty b
htoNonEmpty :: (forall (x :: k). f x -> b) -> t f a -> NonEmpty b
htoNonEmpty forall (x :: k). f x -> b
f = NDL b -> NonEmpty b
forall a. NDL a -> NonEmpty a
fromNDL (NDL b -> NonEmpty b) -> (t f a -> NDL b) -> t f a -> NonEmpty b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (x :: k). f x -> NDL b) -> t f a -> NDL b
forall k k (t :: (k -> *) -> k -> *) m (f :: k -> *) (a :: k).
(HTraversable1 t, Semigroup m) =>
(forall (x :: k). f x -> m) -> t f a -> m
hfoldMap1 (b -> NDL b
forall a. a -> NDL a
ndlSingleton (b -> NDL b) -> (f x -> b) -> f x -> NDL b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f x -> b
forall (x :: k). f x -> b
f)

-- | A flipped version of 'htraverse1'.
--
-- @since 0.4.0.0
hfor1 :: (HTraversable1 t, Apply h) => t f a -> (forall x. f x -> h (g x)) -> h (t g a)
hfor1 :: t f a -> (forall (x :: k). f x -> h (g x)) -> h (t g a)
hfor1 t f a
x forall (x :: k). f x -> h (g x)
f = (forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable1 t, Apply h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse1 forall (x :: k). f x -> h (g x)
f t f a
x

-- | A higher-kinded version of 'Traversable', in the same way that
-- 'HFunctor' is the higher-kinded version of 'Functor'.  Gives you an
-- "effectful" 'hmap', in the same way that 'traverse' gives you an
-- effectful 'fmap'.
--
-- The typical analogues of 'Traversable' laws apply.
--
-- @since 0.3.6.0
class HFunctor t => HTraversable t where
    -- | An "effectful" 'hmap', in the same way that 'traverse' is an
    -- effectful 'fmap'.
    htraverse :: Applicative h => (forall x. f x -> h (g x)) -> t f a -> h (t g a)

-- | A wrapper over a common pattern of "inverting" layers of a functor
-- combinator.
--
-- @since 0.3.6.0
hsequence :: (HTraversable t, Applicative h) => t (h :.: f) a -> h (t f a)
hsequence :: t (h :.: f) a -> h (t f a)
hsequence = (forall (x :: k). (:.:) h f x -> h (f x))
-> t (h :.: f) a -> h (t f a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall (x :: k). (:.:) h f x -> h (f x)
forall k2 (f :: k2 -> *) k1 (g :: k1 -> k2) (p :: k1).
(:.:) f g p -> f (g p)
unComp1

-- | Collect all the @f x@s inside a @t f a@ into a monoidal result using
-- a projecting function.
--
-- See 'iget'.
--
-- @since 0.3.6.0
hfoldMap :: (HTraversable t, Monoid m) => (forall x. f x -> m) -> t f a -> m
hfoldMap :: (forall (x :: k). f x -> m) -> t f a -> m
hfoldMap forall (x :: k). f x -> m
f = Const m (t Any a) -> m
forall a k (b :: k). Const a b -> a
getConst (Const m (t Any a) -> m)
-> (t f a -> Const m (t Any a)) -> t f a -> m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (x :: k). f x -> Const m (Any x))
-> t f a -> Const m (t Any a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse (m -> Const m (Any x)
forall k a (b :: k). a -> Const a b
Const (m -> Const m (Any x)) -> (f x -> m) -> f x -> Const m (Any x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f x -> m
forall (x :: k). f x -> m
f)

-- | Collect all the @f x@s inside a @t f a@ into a list, using
-- a projecting function.
--
-- See 'icollect'.
--
-- @since 0.3.6.0
htoList :: HTraversable t => (forall x. f x -> b) -> t f a -> [b]
htoList :: (forall (x :: k). f x -> b) -> t f a -> [b]
htoList forall (x :: k). f x -> b
f = (Endo [b] -> [b] -> [b]) -> [b] -> Endo [b] -> [b]
forall a b c. (a -> b -> c) -> b -> a -> c
flip Endo [b] -> [b] -> [b]
forall a. Endo a -> a -> a
appEndo [] (Endo [b] -> [b]) -> (t f a -> Endo [b]) -> t f a -> [b]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (x :: k). f x -> Endo [b]) -> t f a -> Endo [b]
forall k k (t :: (k -> *) -> k -> *) m (f :: k -> *) (a :: k).
(HTraversable t, Monoid m) =>
(forall (x :: k). f x -> m) -> t f a -> m
hfoldMap (([b] -> [b]) -> Endo [b]
forall a. (a -> a) -> Endo a
Endo (([b] -> [b]) -> Endo [b])
-> (f x -> [b] -> [b]) -> f x -> Endo [b]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) (b -> [b] -> [b]) -> (f x -> b) -> f x -> [b] -> [b]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f x -> b
forall (x :: k). f x -> b
f)

-- | A flipped version of 'htraverse'.
--
-- @since 0.4.0.0
hfor :: (HTraversable t, Applicative h) => t f a -> (forall x. f x -> h (g x)) -> h (t g a)
hfor :: t f a -> (forall (x :: k). f x -> h (g x)) -> h (t g a)
hfor t f a
x forall (x :: k). f x -> h (g x)
f = (forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall (x :: k). f x -> h (g x)
f t f a
x

-- | An implementation of 'hmap' defined using 'htraverse'.
--
-- @since 0.3.6.0
hmapDefault :: HTraversable t => (f ~> g) -> t f ~> t g
hmapDefault :: (f ~> g) -> t f ~> t g
hmapDefault f ~> g
f = Identity (t g x) -> t g x
forall a. Identity a -> a
runIdentity (Identity (t g x) -> t g x)
-> (t f x -> Identity (t g x)) -> t f x -> t g x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall (x :: k). f x -> Identity (g x))
-> t f x -> Identity (t g x)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse (g x -> Identity (g x)
forall a. a -> Identity a
Identity (g x -> Identity (g x)) -> (f x -> g x) -> f x -> Identity (g x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f x -> g x
f ~> g
f)

instance HTraversable Coyoneda where
    htraverse :: (forall x. f x -> h (g x)) -> Coyoneda f a -> h (Coyoneda g a)
htraverse forall x. f x -> h (g x)
f (Coyoneda b -> a
g f b
x) = (b -> a) -> g b -> Coyoneda g a
forall b a (f :: * -> *). (b -> a) -> f b -> Coyoneda f a
Coyoneda b -> a
g (g b -> Coyoneda g a) -> h (g b) -> h (Coyoneda g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f b -> h (g b)
forall x. f x -> h (g x)
f f b
x

instance HTraversable1 Coyoneda where
    htraverse1 :: (forall x. f x -> h (g x)) -> Coyoneda f a -> h (Coyoneda g a)
htraverse1 forall x. f x -> h (g x)
f (Coyoneda b -> a
g f b
x) = (b -> a) -> g b -> Coyoneda g a
forall b a (f :: * -> *). (b -> a) -> f b -> Coyoneda f a
Coyoneda b -> a
g (g b -> Coyoneda g a) -> h (g b) -> h (Coyoneda g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f b -> h (g b)
forall x. f x -> h (g x)
f f b
x

instance HTraversable CCY.Coyoneda where
    htraverse :: (forall x. f x -> h (g x)) -> Coyoneda f a -> h (Coyoneda g a)
htraverse forall x. f x -> h (g x)
f (CCY.Coyoneda a -> b
g f b
x) = (a -> b) -> g b -> Coyoneda g a
forall a b (f :: * -> *). (a -> b) -> f b -> Coyoneda f a
CCY.Coyoneda a -> b
g (g b -> Coyoneda g a) -> h (g b) -> h (Coyoneda g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f b -> h (g b)
forall x. f x -> h (g x)
f f b
x

instance HTraversable1 CCY.Coyoneda where
    htraverse1 :: (forall x. f x -> h (g x)) -> Coyoneda f a -> h (Coyoneda g a)
htraverse1 forall x. f x -> h (g x)
f (CCY.Coyoneda a -> b
g f b
x) = (a -> b) -> g b -> Coyoneda g a
forall a b (f :: * -> *). (a -> b) -> f b -> Coyoneda f a
CCY.Coyoneda a -> b
g (g b -> Coyoneda g a) -> h (g b) -> h (Coyoneda g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f b -> h (g b)
forall x. f x -> h (g x)
f f b
x

instance HTraversable Ap where
    htraverse :: forall f g h a. Applicative h => (forall x. f x -> h (g x)) -> Ap f a -> h (Ap g a)
    htraverse :: (forall x. f x -> h (g x)) -> Ap f a -> h (Ap g a)
htraverse forall x. f x -> h (g x)
f = Ap f a -> h (Ap g a)
forall b. Ap f b -> h (Ap g b)
go
      where
        go :: Ap f b -> h (Ap g b)
        go :: Ap f b -> h (Ap g b)
go = \case
          Ap.Pure b
x  -> Ap g b -> h (Ap g b)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (b -> Ap g b
forall a (f :: * -> *). a -> Ap f a
Ap.Pure b
x)
          Ap.Ap f a1
x Ap f (a1 -> b)
xs -> g a1 -> Ap g (a1 -> b) -> Ap g b
forall (f :: * -> *) a1 a. f a1 -> Ap f (a1 -> a) -> Ap f a
Ap.Ap (g a1 -> Ap g (a1 -> b) -> Ap g b)
-> h (g a1) -> h (Ap g (a1 -> b) -> Ap g b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a1 -> h (g a1)
forall x. f x -> h (g x)
f f a1
x h (Ap g (a1 -> b) -> Ap g b) -> h (Ap g (a1 -> b)) -> h (Ap g b)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ap f (a1 -> b) -> h (Ap g (a1 -> b))
forall b. Ap f b -> h (Ap g b)
go Ap f (a1 -> b)
xs

instance HTraversable ListF where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> ListF f a -> h (ListF g a)
htraverse forall (x :: k). f x -> h (g x)
f (ListF [f a]
xs) = [g a] -> ListF g a
forall k (f :: k -> *) (a :: k). [f a] -> ListF f a
ListF ([g a] -> ListF g a) -> h [g a] -> h (ListF g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> [f a] -> h [g a]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse f a -> h (g a)
forall (x :: k). f x -> h (g x)
f [f a]
xs

instance HTraversable NonEmptyF where
    htraverse :: (forall (x :: k). f x -> h (g x))
-> NonEmptyF f a -> h (NonEmptyF g a)
htraverse forall (x :: k). f x -> h (g x)
f (NonEmptyF NonEmpty (f a)
xs) = NonEmpty (g a) -> NonEmptyF g a
forall k (f :: k -> *) (a :: k). NonEmpty (f a) -> NonEmptyF f a
NonEmptyF (NonEmpty (g a) -> NonEmptyF g a)
-> h (NonEmpty (g a)) -> h (NonEmptyF g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> NonEmpty (f a) -> h (NonEmpty (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse f a -> h (g a)
forall (x :: k). f x -> h (g x)
f NonEmpty (f a)
xs

instance HTraversable1 NonEmptyF where
    htraverse1 :: (forall (x :: k). f x -> h (g x))
-> NonEmptyF f a -> h (NonEmptyF g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (NonEmptyF NonEmpty (f a)
xs) = NonEmpty (g a) -> NonEmptyF g a
forall k (f :: k -> *) (a :: k). NonEmpty (f a) -> NonEmptyF f a
NonEmptyF (NonEmpty (g a) -> NonEmptyF g a)
-> h (NonEmpty (g a)) -> h (NonEmptyF g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> NonEmpty (f a) -> h (NonEmpty (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable1 t, Apply f) =>
(a -> f b) -> t a -> f (t b)
traverse1 f a -> h (g a)
forall (x :: k). f x -> h (g x)
f NonEmpty (f a)
xs

instance HTraversable MaybeF where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> MaybeF f a -> h (MaybeF g a)
htraverse forall (x :: k). f x -> h (g x)
f (MaybeF Maybe (f a)
xs) = Maybe (g a) -> MaybeF g a
forall k (f :: k -> *) (a :: k). Maybe (f a) -> MaybeF f a
MaybeF (Maybe (g a) -> MaybeF g a) -> h (Maybe (g a)) -> h (MaybeF g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> Maybe (f a) -> h (Maybe (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse f a -> h (g a)
forall (x :: k). f x -> h (g x)
f Maybe (f a)
xs

instance HTraversable (MapF k) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> MapF k f a -> h (MapF k g a)
htraverse forall (x :: k). f x -> h (g x)
f (MapF Map k (f a)
xs) = Map k (g a) -> MapF k g a
forall k k (f :: k -> *) (a :: k). Map k (f a) -> MapF k f a
MapF (Map k (g a) -> MapF k g a) -> h (Map k (g a)) -> h (MapF k g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> Map k (f a) -> h (Map k (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse f a -> h (g a)
forall (x :: k). f x -> h (g x)
f Map k (f a)
xs

instance HTraversable (NEMapF k) where
    htraverse :: (forall (x :: k). f x -> h (g x))
-> NEMapF k f a -> h (NEMapF k g a)
htraverse forall (x :: k). f x -> h (g x)
f (NEMapF NEMap k (f a)
xs) = NEMap k (g a) -> NEMapF k g a
forall k k (f :: k -> *) (a :: k). NEMap k (f a) -> NEMapF k f a
NEMapF (NEMap k (g a) -> NEMapF k g a)
-> h (NEMap k (g a)) -> h (NEMapF k g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> NEMap k (f a) -> h (NEMap k (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse f a -> h (g a)
forall (x :: k). f x -> h (g x)
f NEMap k (f a)
xs

instance HTraversable1 (NEMapF k) where
    htraverse1 :: (forall (x :: k). f x -> h (g x))
-> NEMapF k f a -> h (NEMapF k g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (NEMapF NEMap k (f a)
xs) = NEMap k (g a) -> NEMapF k g a
forall k k (f :: k -> *) (a :: k). NEMap k (f a) -> NEMapF k f a
NEMapF (NEMap k (g a) -> NEMapF k g a)
-> h (NEMap k (g a)) -> h (NEMapF k g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> NEMap k (f a) -> h (NEMap k (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable1 t, Apply f) =>
(a -> f b) -> t a -> f (t b)
traverse1 f a -> h (g a)
forall (x :: k). f x -> h (g x)
f NEMap k (f a)
xs

instance HTraversable Alt.Alt where
    htraverse :: (forall x. f x -> h (g x)) -> Alt f a -> h (Alt g a)
htraverse forall x. f x -> h (g x)
f (Alt.Alt [AltF f a]
xs) = [AltF g a] -> Alt g a
forall (f :: * -> *) a. [AltF f a] -> Alt f a
Alt.Alt ([AltF g a] -> Alt g a) -> h [AltF g a] -> h (Alt g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (AltF f a -> h (AltF g a)) -> [AltF f a] -> h [AltF g a]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse ((forall x. f x -> h (g x)) -> AltF f a -> h (AltF g a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall x. f x -> h (g x)
f) [AltF f a]
xs

instance HTraversable Alt.AltF where
    htraverse :: (forall x. f x -> h (g x)) -> AltF f a -> h (AltF g a)
htraverse forall x. f x -> h (g x)
f = \case
      Alt.Ap f a1
x Alt f (a1 -> a)
xs -> g a1 -> Alt g (a1 -> a) -> AltF g a
forall (f :: * -> *) a1 a. f a1 -> Alt f (a1 -> a) -> AltF f a
Alt.Ap (g a1 -> Alt g (a1 -> a) -> AltF g a)
-> h (g a1) -> h (Alt g (a1 -> a) -> AltF g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a1 -> h (g a1)
forall x. f x -> h (g x)
f f a1
x h (Alt g (a1 -> a) -> AltF g a)
-> h (Alt g (a1 -> a)) -> h (AltF g a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (forall x. f x -> h (g x))
-> Alt f (a1 -> a) -> h (Alt g (a1 -> a))
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall x. f x -> h (g x)
f Alt f (a1 -> a)
xs
      Alt.Pure a
x  -> AltF g a -> h (AltF g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> AltF g a
forall a (f :: * -> *). a -> AltF f a
Alt.Pure a
x)

instance HTraversable Step where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Step f a -> h (Step g a)
htraverse forall (x :: k). f x -> h (g x)
f (Step Natural
n f a
x) = Natural -> g a -> Step g a
forall k (f :: k -> *) (a :: k). Natural -> f a -> Step f a
Step Natural
n (g a -> Step g a) -> h (g a) -> h (Step g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable1 Step where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> Step f a -> h (Step g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (Step Natural
n f a
x) = Natural -> g a -> Step g a
forall k (f :: k -> *) (a :: k). Natural -> f a -> Step f a
Step Natural
n (g a -> Step g a) -> h (g a) -> h (Step g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable Steps where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Steps f a -> h (Steps g a)
htraverse forall (x :: k). f x -> h (g x)
f (Steps NEMap Natural (f a)
x) = NEMap Natural (g a) -> Steps g a
forall k (f :: k -> *) (a :: k). NEMap Natural (f a) -> Steps f a
Steps (NEMap Natural (g a) -> Steps g a)
-> h (NEMap Natural (g a)) -> h (Steps g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> NEMap Natural (f a) -> h (NEMap Natural (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse f a -> h (g a)
forall (x :: k). f x -> h (g x)
f NEMap Natural (f a)
x

instance HTraversable1 Steps where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> Steps f a -> h (Steps g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (Steps NEMap Natural (f a)
x) = NEMap Natural (g a) -> Steps g a
forall k (f :: k -> *) (a :: k). NEMap Natural (f a) -> Steps f a
Steps (NEMap Natural (g a) -> Steps g a)
-> h (NEMap Natural (g a)) -> h (Steps g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> NEMap Natural (f a) -> h (NEMap Natural (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable1 t, Apply f) =>
(a -> f b) -> t a -> f (t b)
traverse1 f a -> h (g a)
forall (x :: k). f x -> h (g x)
f NEMap Natural (f a)
x

instance HTraversable Flagged where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Flagged f a -> h (Flagged g a)
htraverse forall (x :: k). f x -> h (g x)
f (Flagged Bool
b f a
x) = Bool -> g a -> Flagged g a
forall k (f :: k -> *) (a :: k). Bool -> f a -> Flagged f a
Flagged Bool
b (g a -> Flagged g a) -> h (g a) -> h (Flagged g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable1 Flagged where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> Flagged f a -> h (Flagged g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (Flagged Bool
b f a
x) = Bool -> g a -> Flagged g a
forall k (f :: k -> *) (a :: k). Bool -> f a -> Flagged f a
Flagged Bool
b (g a -> Flagged g a) -> h (g a) -> h (Flagged g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable MaybeT where
    htraverse :: (forall x. f x -> h (g x)) -> MaybeT f a -> h (MaybeT g a)
htraverse forall x. f x -> h (g x)
f (MaybeT f (Maybe a)
x) = g (Maybe a) -> MaybeT g a
forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT (g (Maybe a) -> MaybeT g a) -> h (g (Maybe a)) -> h (MaybeT g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (Maybe a) -> h (g (Maybe a))
forall x. f x -> h (g x)
f f (Maybe a)
x

instance HTraversable1 MaybeT where
    htraverse1 :: (forall x. f x -> h (g x)) -> MaybeT f a -> h (MaybeT g a)
htraverse1 forall x. f x -> h (g x)
f (MaybeT f (Maybe a)
x) = g (Maybe a) -> MaybeT g a
forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT (g (Maybe a) -> MaybeT g a) -> h (g (Maybe a)) -> h (MaybeT g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (Maybe a) -> h (g (Maybe a))
forall x. f x -> h (g x)
f f (Maybe a)
x

instance HTraversable FAF.Ap where
    htraverse :: (forall x. f x -> h (g x)) -> Ap f a -> h (Ap g a)
htraverse = (forall x. f x -> h (g x)) -> Ap f a -> h (Ap g a)
forall k (h :: * -> *) (t :: (k -> *) -> k -> *) (g :: k -> *)
       (f :: k -> *) (a :: k).
(Functor h, Interpret t (Comp h (t g))) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
itraverse

instance HTraversable FA.Ap where
    htraverse :: (forall x. f x -> h (g x)) -> Ap f a -> h (Ap g a)
htraverse = (forall x. f x -> h (g x)) -> Ap f a -> h (Ap g a)
forall k (h :: * -> *) (t :: (k -> *) -> k -> *) (g :: k -> *)
       (f :: k -> *) (a :: k).
(Functor h, Interpret t (Comp h (t g))) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
itraverse

instance HTraversable IdentityT where
    htraverse :: (forall (x :: k). f x -> h (g x))
-> IdentityT f a -> h (IdentityT g a)
htraverse forall (x :: k). f x -> h (g x)
f (IdentityT f a
x) = g a -> IdentityT g a
forall k (f :: k -> *) (a :: k). f a -> IdentityT f a
IdentityT (g a -> IdentityT g a) -> h (g a) -> h (IdentityT g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable1 IdentityT where
    htraverse1 :: (forall (x :: k). f x -> h (g x))
-> IdentityT f a -> h (IdentityT g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (IdentityT f a
x) = g a -> IdentityT g a
forall k (f :: k -> *) (a :: k). f a -> IdentityT f a
IdentityT (g a -> IdentityT g a) -> h (g a) -> h (IdentityT g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable Lift where
    htraverse :: (forall x. f x -> h (g x)) -> Lift f a -> h (Lift g a)
htraverse forall x. f x -> h (g x)
f = \case
      Lift.Pure  a
x -> Lift g a -> h (Lift g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> Lift g a
forall (f :: * -> *) a. a -> Lift f a
Lift.Pure a
x)
      Lift.Other f a
y -> g a -> Lift g a
forall (f :: * -> *) a. f a -> Lift f a
Lift.Other (g a -> Lift g a) -> h (g a) -> h (Lift g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall x. f x -> h (g x)
f f a
y

instance HTraversable MaybeApply where
    htraverse :: (forall x. f x -> h (g x)) -> MaybeApply f a -> h (MaybeApply g a)
htraverse forall x. f x -> h (g x)
f (MaybeApply Either (f a) a
x) = Either (g a) a -> MaybeApply g a
forall (f :: * -> *) a. Either (f a) a -> MaybeApply f a
MaybeApply (Either (g a) a -> MaybeApply g a)
-> h (Either (g a) a) -> h (MaybeApply g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a))
-> (a -> h a) -> Either (f a) a -> h (Either (g a) a)
forall (t :: * -> * -> *) (f :: * -> *) a c b d.
(Bitraversable t, Applicative f) =>
(a -> f c) -> (b -> f d) -> t a b -> f (t c d)
bitraverse f a -> h (g a)
forall x. f x -> h (g x)
f a -> h a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Either (f a) a
x

instance HTraversable Backwards where
    htraverse :: (forall (x :: k). f x -> h (g x))
-> Backwards f a -> h (Backwards g a)
htraverse forall (x :: k). f x -> h (g x)
f (Backwards f a
x) = g a -> Backwards g a
forall k (f :: k -> *) (a :: k). f a -> Backwards f a
Backwards (g a -> Backwards g a) -> h (g a) -> h (Backwards g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable WrappedApplicative where
    htraverse :: (forall x. f x -> h (g x))
-> WrappedApplicative f a -> h (WrappedApplicative g a)
htraverse forall x. f x -> h (g x)
f (WrapApplicative f a
x) = g a -> WrappedApplicative g a
forall (f :: * -> *) a. f a -> WrappedApplicative f a
WrapApplicative (g a -> WrappedApplicative g a)
-> h (g a) -> h (WrappedApplicative g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall x. f x -> h (g x)
f f a
x

instance HTraversable Tagged where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Tagged f a -> h (Tagged g a)
htraverse forall (x :: k). f x -> h (g x)
_ = Tagged g a -> h (Tagged g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Tagged g a -> h (Tagged g a))
-> (Tagged f a -> Tagged g a) -> Tagged f a -> h (Tagged g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tagged f a -> Tagged g a
coerce

instance HTraversable Reverse where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Reverse f a -> h (Reverse g a)
htraverse forall (x :: k). f x -> h (g x)
f (Reverse f a
x) = g a -> Reverse g a
forall k (f :: k -> *) (a :: k). f a -> Reverse f a
Reverse (g a -> Reverse g a) -> h (g a) -> h (Reverse g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable1 Reverse where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> Reverse f a -> h (Reverse g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (Reverse f a
x) = g a -> Reverse g a
forall k (f :: k -> *) (a :: k). f a -> Reverse f a
Reverse (g a -> Reverse g a) -> h (g a) -> h (Reverse g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance (HTraversable s, HTraversable t) => HTraversable (ComposeT s t) where
    htraverse :: (forall x. f x -> h (g x))
-> ComposeT s t f a -> h (ComposeT s t g a)
htraverse forall x. f x -> h (g x)
f (ComposeT s (t f) a
x) = s (t g) a -> ComposeT s t g a
forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
       (m :: * -> *) a.
f (g m) a -> ComposeT f g m a
ComposeT (s (t g) a -> ComposeT s t g a)
-> h (s (t g) a) -> h (ComposeT s t g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall x. t f x -> h (t g x)) -> s (t f) a -> h (s (t g) a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse ((forall x. f x -> h (g x)) -> t f x -> h (t g x)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall x. f x -> h (g x)
f) s (t f) a
x

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

instance Traversable1 f => HTraversable1 ((:.:) f) where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> (:.:) f f a -> h ((:.:) f g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (Comp1 f (f a)
x) = f (g a) -> (:.:) f g a
forall k2 k1 (f :: k2 -> *) (g :: k1 -> k2) (p :: k1).
f (g p) -> (:.:) f g p
Comp1 (f (g a) -> (:.:) f g a) -> h (f (g a)) -> h ((:.:) f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (f a -> h (g a)) -> f (f a) -> h (f (g a))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable1 t, Apply f) =>
(a -> f b) -> t a -> f (t b)
traverse1 f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f (f a)
x

instance HTraversable (M1 i c) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> M1 i c f a -> h (M1 i c g a)
htraverse forall (x :: k). f x -> h (g x)
f (M1 f a
x) = g a -> M1 i c g a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (g a -> M1 i c g a) -> h (g a) -> h (M1 i c g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable1 (M1 i c) where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> M1 i c f a -> h (M1 i c g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (M1 f a
x) = g a -> M1 i c g a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (g a -> M1 i c g a) -> h (g a) -> h (M1 i c g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x

instance HTraversable Void2 where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Void2 f a -> h (Void2 g a)
htraverse forall (x :: k). f x -> h (g x)
_ = \case {}

instance HTraversable1 Void2 where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> Void2 f a -> h (Void2 g a)
htraverse1 forall (x :: k). f x -> h (g x)
_ = \case {}

instance HTraversable (EnvT e) where
    htraverse :: (forall x. f x -> h (g x)) -> EnvT e f a -> h (EnvT e g a)
htraverse forall x. f x -> h (g x)
f (EnvT e
e f a
x) = e -> g a -> EnvT e g a
forall e (w :: * -> *) a. e -> w a -> EnvT e w a
EnvT e
e (g a -> EnvT e g a) -> h (g a) -> h (EnvT e g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall x. f x -> h (g x)
f f a
x

instance HTraversable1 (EnvT e) where
    htraverse1 :: (forall x. f x -> h (g x)) -> EnvT e f a -> h (EnvT e g a)
htraverse1 forall x. f x -> h (g x)
f (EnvT e
e f a
x) = e -> g a -> EnvT e g a
forall e (w :: * -> *) a. e -> w a -> EnvT e w a
EnvT e
e (g a -> EnvT e g a) -> h (g a) -> h (EnvT e g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall x. f x -> h (g x)
f f a
x

instance HTraversable Rec where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Rec f a -> h (Rec g a)
htraverse = (forall (x :: k). f x -> h (g x)) -> Rec f a -> h (Rec g a)
forall k (h :: * -> *) (f :: k -> *) (g :: k -> *) (a :: [k]).
Applicative h =>
(forall (x :: k). f x -> h (g x)) -> Rec f a -> h (Rec g a)
rtraverse

instance HTraversable CoRec where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> CoRec f a -> h (CoRec g a)
htraverse forall (x :: k). f x -> h (g x)
f (CoRec f a1
x) = g a1 -> CoRec g a
forall k (a1 :: k) (b :: [k]) (a :: k -> *).
RElem a1 b (RIndex a1 b) =>
a a1 -> CoRec a b
CoRec (g a1 -> CoRec g a) -> h (g a1) -> h (CoRec g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a1 -> h (g a1)
forall (x :: k). f x -> h (g x)
f f a1
x

instance HTraversable SOP.NP where
    htraverse :: forall f g h a. Applicative h => (forall x. f x -> h (g x)) -> SOP.NP f a -> h (SOP.NP g a)
    htraverse :: (forall (x :: k). f x -> h (g x)) -> NP f a -> h (NP g a)
htraverse forall (x :: k). f x -> h (g x)
f = NP f a -> h (NP g a)
forall (b :: [k]). NP f b -> h (NP g b)
go
      where
        go :: SOP.NP f b -> h (SOP.NP g b)
        go :: NP f b -> h (NP g b)
go = \case
          NP f b
SOP.Nil     -> NP g '[] -> h (NP g '[])
forall (f :: * -> *) a. Applicative f => a -> f a
pure NP g '[]
forall k (a :: k -> *). NP a '[]
SOP.Nil
          f x
x SOP.:* NP f xs
xs -> g x -> NP g xs -> NP g (x : xs)
forall k (a :: k -> *) (x :: k) (xs :: [k]).
a x -> NP a xs -> NP a (x : xs)
(SOP.:*) (g x -> NP g xs -> NP g (x : xs))
-> h (g x) -> h (NP g xs -> NP g (x : xs))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f x -> h (g x)
forall (x :: k). f x -> h (g x)
f f x
x h (NP g xs -> NP g (x : xs)) -> h (NP g xs) -> h (NP g (x : xs))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> NP f xs -> h (NP g xs)
forall (b :: [k]). NP f b -> h (NP g b)
go NP f xs
xs

instance HTraversable SOP.NS where
    htraverse :: forall f g h a. Applicative h => (forall x. f x -> h (g x)) -> SOP.NS f a -> h (SOP.NS g a)
    htraverse :: (forall (x :: k). f x -> h (g x)) -> NS f a -> h (NS g a)
htraverse forall (x :: k). f x -> h (g x)
f = NS f a -> h (NS g a)
forall (b :: [k]). NS f b -> h (NS g b)
go
      where
        go :: SOP.NS f b -> h (SOP.NS g b)
        go :: NS f b -> h (NS g b)
go = \case
          SOP.Z f x
x  -> g x -> NS g (x : xs)
forall k (a :: k -> *) (x :: k) (xs :: [k]). a x -> NS a (x : xs)
SOP.Z (g x -> NS g (x : xs)) -> h (g x) -> h (NS g (x : xs))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f x -> h (g x)
forall (x :: k). f x -> h (g x)
f f x
x
          SOP.S NS f xs
xs -> NS g xs -> NS g (x : xs)
forall k (a :: k -> *) (xs :: [k]) (x :: k).
NS a xs -> NS a (x : xs)
SOP.S (NS g xs -> NS g (x : xs)) -> h (NS g xs) -> h (NS g (x : xs))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NS f xs -> h (NS g xs)
forall (b :: [k]). NS f b -> h (NS g b)
go NS f xs
xs

instance HTraversable1 SOP.NS where
    htraverse1
        :: forall f g h a. Apply h
        => (forall x. f x -> h (g x))
        -> SOP.NS f a
        -> h (SOP.NS g a)
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> NS f a -> h (NS g a)
htraverse1 forall (x :: k). f x -> h (g x)
f = NS f a -> h (NS g a)
forall (b :: [k]). NS f b -> h (NS g b)
go
      where
        go :: SOP.NS f b -> h (SOP.NS g b)
        go :: NS f b -> h (NS g b)
go = \case
          SOP.Z f x
x  -> g x -> NS g (x : xs)
forall k (a :: k -> *) (x :: k) (xs :: [k]). a x -> NS a (x : xs)
SOP.Z (g x -> NS g (x : xs)) -> h (g x) -> h (NS g (x : xs))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f x -> h (g x)
forall (x :: k). f x -> h (g x)
f f x
x
          SOP.S NS f xs
xs -> NS g xs -> NS g (x : xs)
forall k (a :: k -> *) (xs :: [k]) (x :: k).
NS a xs -> NS a (x : xs)
SOP.S (NS g xs -> NS g (x : xs)) -> h (NS g xs) -> h (NS g (x : xs))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NS f xs -> h (NS g xs)
forall (b :: [k]). NS f b -> h (NS g b)
go NS f xs
xs

instance HTraversable (Day f) where
    htraverse :: (forall x. f x -> h (g x)) -> Day f f a -> h (Day f g a)
htraverse forall x. f x -> h (g x)
f (Day f b
x f c
y b -> c -> a
g) = (\g c
y' -> f b -> g c -> (b -> c -> a) -> Day f g a
forall (f :: * -> *) (g :: * -> *) a b c.
f b -> g c -> (b -> c -> a) -> Day f g a
Day f b
x g c
y' b -> c -> a
g) (g c -> Day f g a) -> h (g c) -> h (Day f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f c -> h (g c)
forall x. f x -> h (g x)
f f c
y

instance HTraversable1 (Day f) where
    htraverse1 :: (forall x. f x -> h (g x)) -> Day f f a -> h (Day f g a)
htraverse1 forall x. f x -> h (g x)
f (Day f b
x f c
y b -> c -> a
g) = (\g c
y' -> f b -> g c -> (b -> c -> a) -> Day f g a
forall (f :: * -> *) (g :: * -> *) a b c.
f b -> g c -> (b -> c -> a) -> Day f g a
Day f b
x g c
y' b -> c -> a
g) (g c -> Day f g a) -> h (g c) -> h (Day f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f c -> h (g c)
forall x. f x -> h (g x)
f f c
y

instance HTraversable (ID.Day f) where
    htraverse :: (forall x. f x -> h (g x)) -> Day f f a -> h (Day f g a)
htraverse forall x. f x -> h (g x)
f (ID.Day f b
x f c
y b -> c -> a
g a -> (b, c)
h) = (\g c
y' -> f b -> g c -> (b -> c -> a) -> (a -> (b, c)) -> Day f g a
forall (f :: * -> *) (g :: * -> *) a b c.
f b -> g c -> (b -> c -> a) -> (a -> (b, c)) -> Day f g a
ID.Day f b
x g c
y' b -> c -> a
g a -> (b, c)
h) (g c -> Day f g a) -> h (g c) -> h (Day f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f c -> h (g c)
forall x. f x -> h (g x)
f f c
y

instance HTraversable1 (ID.Day f) where
    htraverse1 :: (forall x. f x -> h (g x)) -> Day f f a -> h (Day f g a)
htraverse1 forall x. f x -> h (g x)
f (ID.Day f b
x f c
y b -> c -> a
g a -> (b, c)
h) = (\g c
y' -> f b -> g c -> (b -> c -> a) -> (a -> (b, c)) -> Day f g a
forall (f :: * -> *) (g :: * -> *) a b c.
f b -> g c -> (b -> c -> a) -> (a -> (b, c)) -> Day f g a
ID.Day f b
x g c
y' b -> c -> a
g a -> (b, c)
h) (g c -> Day f g a) -> h (g c) -> h (Day f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f c -> h (g c)
forall x. f x -> h (g x)
f f c
y

instance HTraversable (IN.Night f) where
    htraverse :: (forall x. f x -> h (g x)) -> Night f f a -> h (Night f g a)
htraverse forall x. f x -> h (g x)
f (IN.Night f b
x f c
y b -> a
g c -> a
h a -> Either b c
j) = (\g c
y' -> f b
-> g c -> (b -> a) -> (c -> a) -> (a -> Either b c) -> Night f g a
forall (f :: * -> *) b (g :: * -> *) c a.
f b
-> g c -> (b -> a) -> (c -> a) -> (a -> Either b c) -> Night f g a
IN.Night f b
x g c
y' b -> a
g c -> a
h a -> Either b c
j) (g c -> Night f g a) -> h (g c) -> h (Night f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f c -> h (g c)
forall x. f x -> h (g x)
f f c
y

instance HTraversable1 (IN.Night f) where
    htraverse1 :: (forall x. f x -> h (g x)) -> Night f f a -> h (Night f g a)
htraverse1 forall x. f x -> h (g x)
f (IN.Night f b
x f c
y b -> a
g c -> a
h a -> Either b c
j) = (\g c
y' -> f b
-> g c -> (b -> a) -> (c -> a) -> (a -> Either b c) -> Night f g a
forall (f :: * -> *) b (g :: * -> *) c a.
f b
-> g c -> (b -> a) -> (c -> a) -> (a -> Either b c) -> Night f g a
IN.Night f b
x g c
y' b -> a
g c -> a
h a -> Either b c
j) (g c -> Night f g a) -> h (g c) -> h (Night f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f c -> h (g c)
forall x. f x -> h (g x)
f f c
y

instance HTraversable ((:*:) f) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> (:*:) f f a -> h ((:*:) f g a)
htraverse forall (x :: k). f x -> h (g x)
f (f a
x :*: f a
y) = (f a
x f a -> g a -> (:*:) f g a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:) (g a -> (:*:) f g a) -> h (g a) -> h ((:*:) f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
y

instance HTraversable1 ((:*:) f) where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> (:*:) f f a -> h ((:*:) f g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (f a
x :*: f a
y) = (f a
x f a -> g a -> (:*:) f g a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*:) (g a -> (:*:) f g a) -> h (g a) -> h ((:*:) f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
y

instance HTraversable ((:+:) f) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> (:+:) f f a -> h ((:+:) f g a)
htraverse forall (x :: k). f x -> h (g x)
f = \case
      L1 f a
x -> (:+:) f g a -> h ((:+:) f g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (f a -> (:+:) f g a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 f a
x)
      R1 f a
y -> g a -> (:+:) f g a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (g a -> (:+:) f g a) -> h (g a) -> h ((:+:) f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
y

instance HTraversable (Product f) where
    htraverse :: (forall (x :: k). f x -> h (g x))
-> Product f f a -> h (Product f g a)
htraverse forall (x :: k). f x -> h (g x)
f (Pair f a
x f a
y) = f a -> g a -> Product f g a
forall k (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Pair f a
x (g a -> Product f g a) -> h (g a) -> h (Product f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
y

instance HTraversable1 (Product f) where
    htraverse1 :: (forall (x :: k). f x -> h (g x))
-> Product f f a -> h (Product f g a)
htraverse1 forall (x :: k). f x -> h (g x)
f (Pair f a
x f a
y) = f a -> g a -> Product f g a
forall k (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Pair f a
x (g a -> Product f g a) -> h (g a) -> h (Product f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
y

instance HTraversable (Sum f) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Sum f f a -> h (Sum f g a)
htraverse forall (x :: k). f x -> h (g x)
f = \case
      InL f a
x -> Sum f g a -> h (Sum f g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (f a -> Sum f g a
forall k (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL f a
x)
      InR f a
y -> g a -> Sum f g a
forall k (f :: k -> *) (g :: k -> *) (a :: k). g a -> Sum f g a
InR (g a -> Sum f g a) -> h (g a) -> h (Sum f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
y

instance HTraversable (Joker f) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Joker f f a -> h (Joker f g a)
htraverse forall (x :: k). f x -> h (g x)
_ = Joker f g a -> h (Joker f g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Joker f g a -> h (Joker f g a))
-> (Joker f f a -> Joker f g a) -> Joker f f a -> h (Joker f g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Joker f f a -> Joker f g a
coerce

instance HTraversable (These1 f) where
    htraverse :: (forall x. f x -> h (g x)) -> These1 f f a -> h (These1 f g a)
htraverse forall x. f x -> h (g x)
f = \case
      This1  f a
x   -> These1 f g a -> h (These1 f g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (These1 f g a -> h (These1 f g a))
-> These1 f g a -> h (These1 f g a)
forall a b. (a -> b) -> a -> b
$ f a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. f a -> These1 f g a
This1 f a
x
      That1    f a
y -> g a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. g a -> These1 f g a
That1 (g a -> These1 f g a) -> h (g a) -> h (These1 f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall x. f x -> h (g x)
f f a
y
      These1 f a
x f a
y -> f a -> g a -> These1 f g a
forall (f :: * -> *) (g :: * -> *) a. f a -> g a -> These1 f g a
These1 f a
x (g a -> These1 f g a) -> h (g a) -> h (These1 f g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall x. f x -> h (g x)
f f a
y

instance HTraversable (Void3 f) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> Void3 f f a -> h (Void3 f g a)
htraverse forall (x :: k). f x -> h (g x)
_ = \case {}

instance HTraversable ProxyF where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> ProxyF f a -> h (ProxyF g a)
htraverse forall (x :: k). f x -> h (g x)
_ = ProxyF g a -> h (ProxyF g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ProxyF g a -> h (ProxyF g a))
-> (ProxyF f a -> ProxyF g a) -> ProxyF f a -> h (ProxyF g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProxyF f a -> ProxyF g a
coerce

instance HTraversable (ConstF e) where
    htraverse :: (forall (x :: k). f x -> h (g x))
-> ConstF e f a -> h (ConstF e g a)
htraverse forall (x :: k). f x -> h (g x)
_ = ConstF e g a -> h (ConstF e g a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ConstF e g a -> h (ConstF e g a))
-> (ConstF e f a -> ConstF e g a)
-> ConstF e f a
-> h (ConstF e g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstF e f a -> ConstF e g a
coerce

instance HTraversable t => HTraversable (HLift t) where
    htraverse :: (forall (x :: k). f x -> h (g x)) -> HLift t f a -> h (HLift t g a)
htraverse forall (x :: k). f x -> h (g x)
f = \case
      HPure  f a
x -> g a -> HLift t g a
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HLift t f a
HPure  (g a -> HLift t g a) -> h (g a) -> h (HLift t g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x
      HOther t f a
x -> t g a -> HLift t g a
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t f a -> HLift t f a
HOther (t g a -> HLift t g a) -> h (t g a) -> h (HLift t g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall (x :: k). f x -> h (g x)
f t f a
x

instance HTraversable1 t => HTraversable1 (HLift t) where
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> HLift t f a -> h (HLift t g a)
htraverse1 forall (x :: k). f x -> h (g x)
f = \case
      HPure  f a
x -> g a -> HLift t g a
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HLift t f a
HPure  (g a -> HLift t g a) -> h (g a) -> h (HLift t g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a -> h (g a)
forall (x :: k). f x -> h (g x)
f f a
x
      HOther t f a
x -> t g a -> HLift t g a
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t f a -> HLift t f a
HOther (t g a -> HLift t g a) -> h (t g a) -> h (HLift t g a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable1 t, Apply h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse1 forall (x :: k). f x -> h (g x)
f t f a
x

instance HTraversable t => HTraversable (HFree t) where
    htraverse :: forall f g h a. Applicative h => (forall x. f x -> h (g x)) -> HFree t f a -> h (HFree t g a)
    htraverse :: (forall (x :: k). f x -> h (g x)) -> HFree t f a -> h (HFree t g a)
htraverse forall (x :: k). f x -> h (g x)
f = HFree t f a -> h (HFree t g a)
forall (b :: k). HFree t f b -> h (HFree t g b)
go
      where
        go :: HFree t f b -> h (HFree t g b)
        go :: HFree t f b -> h (HFree t g b)
go = \case
          HReturn f b
x -> g b -> HFree t g b
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HFree t f a
HReturn (g b -> HFree t g b) -> h (g b) -> h (HFree t g b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f b -> h (g b)
forall (x :: k). f x -> h (g x)
f f b
x
          HJoin   t (HFree t f) b
x -> t (HFree t g) b -> HFree t g b
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t (HFree t f) a -> HFree t f a
HJoin   (t (HFree t g) b -> HFree t g b)
-> h (t (HFree t g) b) -> h (HFree t g b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall (b :: k). HFree t f b -> h (HFree t g b))
-> t (HFree t f) b -> h (t (HFree t g) b)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable t, Applicative h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse forall (b :: k). HFree t f b -> h (HFree t g b)
go t (HFree t f) b
x

instance HTraversable1 t => HTraversable1 (HFree t) where
    htraverse1 :: forall f g h a. Apply h => (forall x. f x -> h (g x)) -> HFree t f a -> h (HFree t g a)
    htraverse1 :: (forall (x :: k). f x -> h (g x)) -> HFree t f a -> h (HFree t g a)
htraverse1 forall (x :: k). f x -> h (g x)
f = HFree t f a -> h (HFree t g a)
forall (b :: k). HFree t f b -> h (HFree t g b)
go
      where
        go :: HFree t f b -> h (HFree t g b)
        go :: HFree t f b -> h (HFree t g b)
go = \case
          HReturn f b
x -> g b -> HFree t g b
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
f a -> HFree t f a
HReturn (g b -> HFree t g b) -> h (g b) -> h (HFree t g b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f b -> h (g b)
forall (x :: k). f x -> h (g x)
f f b
x
          HJoin   t (HFree t f) b
x -> t (HFree t g) b -> HFree t g b
forall k (t :: (k -> *) -> k -> *) (f :: k -> *) (a :: k).
t (HFree t f) a -> HFree t f a
HJoin   (t (HFree t g) b -> HFree t g b)
-> h (t (HFree t g) b) -> h (HFree t g b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall (b :: k). HFree t f b -> h (HFree t g b))
-> t (HFree t f) b -> h (t (HFree t g) b)
forall k k (t :: (k -> *) -> k -> *) (h :: * -> *) (f :: k -> *)
       (g :: k -> *) (a :: k).
(HTraversable1 t, Apply h) =>
(forall (x :: k). f x -> h (g x)) -> t f a -> h (t g a)
htraverse1 forall (b :: k). HFree t f b -> h (HFree t g b)
go t (HFree t f) b
x