{-# LANGUAGE AllowAmbiguousTypes #-}
module Generic.Data.Function.Traverse
( GenericTraverse(..)
, genericTraverseNonSum , GTraverseNonSum
, GenericTraverseSum(..), PfxTagCfg(..)
, genericTraverseSum, GTraverseSum
, eqShowPfxTagCfg
) where
import GHC.Generics
import Generic.Data.Rep.Assert
import Generic.Data.Function.Traverse.NonSum
import Generic.Data.Function.Traverse.Sum
import Generic.Data.Function.Traverse.Constructor
import Data.Text qualified as Text
genericTraverseNonSum
:: forall {cd} {gf} asserts f a
. ( Generic a, Rep a ~ D1 cd gf
, GTraverseNonSum cd f gf
, ApplyGCAsserts asserts f
, Functor f)
=> f a
genericTraverseNonSum :: forall {cd :: Meta} {gf :: Type -> Type} (asserts :: [GCAssert])
(f :: Type -> Type) a.
(Generic a, Rep a ~ D1 cd gf, GTraverseNonSum cd f gf,
ApplyGCAsserts asserts f, Functor f) =>
f a
genericTraverseNonSum = (forall a x. Generic a => Rep a x -> a
to forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k i (c :: Meta) (f :: k -> Type) (p :: k). f p -> M1 i c f p
M1) forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> forall {k} {k} (cd :: Meta) (f :: k -> Type) (f' :: k -> k)
(p :: k).
GTraverseNonSum cd f f' =>
f (f' p)
gTraverseNonSum @cd
genericTraverseSum
:: forall {cd} {gf} opts asserts f a pt
. ( Generic a, Rep a ~ D1 cd gf
, GTraverseSum opts cd f gf
, ApplyGCAsserts asserts f
, GenericTraverseC f pt, Functor f)
=> PfxTagCfg pt
-> f a
genericTraverseSum :: forall {cd :: Meta} {gf :: Type -> Type} (opts :: SumOpts)
(asserts :: [GCAssert]) (f :: Type -> Type) a pt.
(Generic a, Rep a ~ D1 cd gf, GTraverseSum opts cd f gf,
ApplyGCAsserts asserts f, GenericTraverseC f pt, Functor f) =>
PfxTagCfg pt -> f a
genericTraverseSum PfxTagCfg pt
ptc = (forall a x. Generic a => Rep a x -> a
to forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k i (c :: Meta) (f :: k -> Type) (p :: k). f p -> M1 i c f p
M1) forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> forall {k} {k} (opts :: SumOpts) (cd :: k) (f :: Type -> Type)
(f' :: k -> Type) pt (p :: k).
(GTraverseSum opts cd f f', GenericTraverseC f pt) =>
PfxTagCfg pt -> f (f' p)
gTraverseSum @opts @cd PfxTagCfg pt
ptc
eqShowPfxTagCfg :: (Eq a, Show a) => (String -> a) -> PfxTagCfg a
eqShowPfxTagCfg :: forall a. (Eq a, Show a) => (String -> a) -> PfxTagCfg a
eqShowPfxTagCfg String -> a
f = PfxTagCfg
{ pfxTagCfgFromCstr :: String -> a
pfxTagCfgFromCstr = String -> a
f
, pfxTagCfgEq :: a -> a -> Bool
pfxTagCfgEq = forall a. Eq a => a -> a -> Bool
(==)
, pfxTagCfgShow :: a -> Text
pfxTagCfgShow = String -> Text
Text.pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show
}