{-# LANGUAGE AllowAmbiguousTypes #-}
module Generic.Data.Function.FoldMap
( GenericFoldMap(..)
, genericFoldMapNonSum, GFoldMapNonSum
, genericFoldMapSum, GFoldMapSum
, genericFoldMapSumConsByte, GFoldMapSumConsByte
) where
import GHC.Generics
import Generic.Data.Function.FoldMap.NonSum
import Generic.Data.Function.FoldMap.Sum
import Generic.Data.Function.FoldMap.Constructor
import Generic.Data.Function.FoldMap.SumConsByte
import Data.Word ( Word8 )
genericFoldMapNonSum
:: forall {k} (tag :: k) a
. ( Generic a, GFoldMapNonSum tag (Rep a)
) => a -> GenericFoldMapM tag
genericFoldMapNonSum :: forall {k} (tag :: k) a.
(Generic a, GFoldMapNonSum tag (Rep a)) =>
a -> GenericFoldMapM tag
genericFoldMapNonSum = forall (tag :: k) (gf :: Type -> Type) p.
GFoldMapNonSum tag gf =>
gf p -> GenericFoldMapM tag
forall {k} {k1} (tag :: k) (gf :: k1 -> Type) (p :: k1).
GFoldMapNonSum tag gf =>
gf p -> GenericFoldMapM tag
gFoldMapNonSum @tag (Rep a Any -> GenericFoldMapM tag)
-> (a -> Rep a Any) -> a -> GenericFoldMapM tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Rep a Any
forall x. a -> Rep a x
forall a x. Generic a => a -> Rep a x
from
genericFoldMapSum
:: forall {k} (tag :: k) a
. ( Generic a, GFoldMapSum tag (Rep a)
) => (String -> GenericFoldMapM tag)
-> a -> GenericFoldMapM tag
genericFoldMapSum :: forall {k} (tag :: k) a.
(Generic a, GFoldMapSum tag (Rep a)) =>
(String -> GenericFoldMapM tag) -> a -> GenericFoldMapM tag
genericFoldMapSum String -> GenericFoldMapM tag
f = forall (tag :: k) (gf :: Type -> Type) p.
GFoldMapSum tag gf =>
(String -> GenericFoldMapM tag) -> gf p -> GenericFoldMapM tag
forall {k} {k1} (tag :: k) (gf :: k1 -> Type) (p :: k1).
GFoldMapSum tag gf =>
(String -> GenericFoldMapM tag) -> gf p -> GenericFoldMapM tag
gFoldMapSum @tag String -> GenericFoldMapM tag
f (Rep a Any -> GenericFoldMapM tag)
-> (a -> Rep a Any) -> a -> GenericFoldMapM tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Rep a Any
forall x. a -> Rep a x
forall a x. Generic a => a -> Rep a x
from
genericFoldMapSumConsByte
:: forall tag a
. (Generic a, GFoldMapSumConsByte tag (Rep a))
=> (Word8 -> GenericFoldMapM tag)
-> a -> GenericFoldMapM tag
genericFoldMapSumConsByte :: forall {k} (tag :: k) a.
(Generic a, GFoldMapSumConsByte tag (Rep a)) =>
(Word8 -> GenericFoldMapM tag) -> a -> GenericFoldMapM tag
genericFoldMapSumConsByte Word8 -> GenericFoldMapM tag
f = forall (tag :: k) (f :: Type -> Type) p.
GFoldMapSumConsByte tag f =>
(Word8 -> GenericFoldMapM tag) -> f p -> GenericFoldMapM tag
forall {k} {k1} (tag :: k) (f :: k1 -> Type) (p :: k1).
GFoldMapSumConsByte tag f =>
(Word8 -> GenericFoldMapM tag) -> f p -> GenericFoldMapM tag
gFoldMapSumConsByte @tag Word8 -> GenericFoldMapM tag
f (Rep a Any -> GenericFoldMapM tag)
-> (a -> Rep a Any) -> a -> GenericFoldMapM tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Rep a Any
forall x. a -> Rep a x
forall a x. Generic a => a -> Rep a x
from