{-# LANGUAGE AllowAmbiguousTypes #-}
module Generic.Data.Function.FoldMap
( GenericFoldMap(..)
, genericFoldMapNonSum, GFoldMapNonSum
, genericFoldMapSum, GFoldMapSum
, genericFoldMapSumConsByte, GFoldMapSumConsByte
) where
import GHC.Generics
import Generic.Data.Rep.Assert
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 {cd} {f} asserts m a
. ( Generic a, Rep a ~ D1 cd f
, GFoldMapNonSum m f
, ApplyGCAsserts asserts f)
=> a -> m
genericFoldMapNonSum :: forall {cd :: Meta} {f :: Type -> Type} (asserts :: [GCAssert]) m
a.
(Generic a, Rep a ~ D1 cd f, GFoldMapNonSum m f,
ApplyGCAsserts asserts f) =>
a -> m
genericFoldMapNonSum = forall {k} m (f :: k -> Type) (p :: k).
GFoldMapNonSum m f =>
f p -> m
gFoldMapNonSum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k i (c :: Meta) (f :: k -> Type) (p :: k). M1 i c f p -> f p
unM1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a x. Generic a => a -> Rep a x
from
genericFoldMapSum
:: forall {cd} {f} opts asserts m a
. ( Generic a, Rep a ~ D1 cd f
, GFoldMapSum opts m f
, ApplyGCAsserts asserts f)
=> (String -> m)
-> a -> m
genericFoldMapSum :: forall {cd :: Meta} {f :: Type -> Type} (opts :: SumOpts)
(asserts :: [GCAssert]) m a.
(Generic a, Rep a ~ D1 cd f, GFoldMapSum opts m f,
ApplyGCAsserts asserts f) =>
(String -> m) -> a -> m
genericFoldMapSum String -> m
f = forall {k} (opts :: SumOpts) m (f :: k -> Type) (p :: k).
GFoldMapSum opts m f =>
(String -> m) -> f p -> m
gFoldMapSum @opts String -> m
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k i (c :: Meta) (f :: k -> Type) (p :: k). M1 i c f p -> f p
unM1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a x. Generic a => a -> Rep a x
from
genericFoldMapSumConsByte
:: forall m a
. (Generic a, GFoldMapSumConsByte m (Rep a))
=> (Word8 -> m)
-> a -> m
genericFoldMapSumConsByte :: forall m a.
(Generic a, GFoldMapSumConsByte m (Rep a)) =>
(Word8 -> m) -> a -> m
genericFoldMapSumConsByte Word8 -> m
f = forall {k} m (f :: k -> Type) (p :: k).
GFoldMapSumConsByte m f =>
(Word8 -> m) -> f p -> m
gFoldMapSumConsByte Word8 -> m
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a x. Generic a => a -> Rep a x
from