{-# LANGUAGE AllowAmbiguousTypes #-}
module Generic.Data.Function.Traverse
( GenericTraverse(..)
, genericTraverseNonSum , GTraverseNonSum
, GenericTraverseSum(..), PfxTagCfg(..)
, genericTraverseSum, GTraverseSum
, eqShowPfxTagCfg
) where
import GHC.Generics
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 {k} (tag :: k) a
. ( Generic a
, Functor (GenericTraverseF tag)
, GTraverseNonSum tag (Rep a)
) => GenericTraverseF tag a
genericTraverseNonSum :: forall {k} (tag :: k) a.
(Generic a, Functor (GenericTraverseF tag),
GTraverseNonSum tag (Rep a)) =>
GenericTraverseF tag a
genericTraverseNonSum = Rep a Any -> a
forall a x. Generic a => Rep a x -> a
forall x. Rep a x -> a
to (Rep a Any -> a)
-> GenericTraverseF tag (Rep a Any) -> GenericTraverseF tag a
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (tag :: k) (gf :: Type -> Type) p.
GTraverseNonSum tag gf =>
GenericTraverseF tag (gf p)
forall {k} {k1} (tag :: k) (gf :: k1 -> Type) (p :: k1).
GTraverseNonSum tag gf =>
GenericTraverseF tag (gf p)
gTraverseNonSum @tag
genericTraverseSum
:: forall {k} (tag :: k) a pt
. ( Generic a
, Functor (GenericTraverseF tag)
, GTraverseSum tag (Rep a)
, GenericTraverseC tag pt
) => PfxTagCfg pt -> GenericTraverseF tag a
genericTraverseSum :: forall {k} (tag :: k) a pt.
(Generic a, Functor (GenericTraverseF tag),
GTraverseSum tag (Rep a), GenericTraverseC tag pt) =>
PfxTagCfg pt -> GenericTraverseF tag a
genericTraverseSum PfxTagCfg pt
ptc = Rep a Any -> a
forall a x. Generic a => Rep a x -> a
forall x. Rep a x -> a
to (Rep a Any -> a)
-> GenericTraverseF tag (Rep a Any) -> GenericTraverseF tag a
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (tag :: k) (gf :: Type -> Type) pt p.
(GTraverseSum tag gf, GenericTraverseC tag pt) =>
PfxTagCfg pt -> GenericTraverseF tag (gf p)
forall {k} {k1} (tag :: k) (gf :: k1 -> Type) pt (p :: k1).
(GTraverseSum tag gf, GenericTraverseC tag pt) =>
PfxTagCfg pt -> GenericTraverseF tag (gf p)
gTraverseSum @tag 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 = a -> a -> Bool
forall a. Eq a => a -> a -> Bool
(==)
, pfxTagCfgShow :: a -> Text
pfxTagCfgShow = String -> Text
Text.pack (String -> Text) -> (a -> String) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show
}