| Safe Haskell | Safe-Inferred |
|---|---|
| Language | GHC2021 |
Generic.Data.Function.FoldMap
Description
foldMap for generic data types.
foldMap can be considered a two-step process:
Applying this to generic data types:
Field mappings are handled using a per-monoid type class. You need a monoid m
with an associated type class which has a function a -> m. Write a
GenericFoldMap instance for your monoid which points to your type class. If a
field type doesn't have a matching instance, the generic instance emits a type
error.
Sum types (with multiple constructors) are handled by (<>)-ing the constructor
with its contents (in that order). You must provide a String -> m function for
mapping constructor names. If you need custom sum type handling, you may write
your own and still leverage the individual constructor generics.
This function can provide generic support for simple fold-y operations like serialization.
Synopsis
- class GenericFoldMap m where
- type GenericFoldMapC m a :: Constraint
- genericFoldMapF :: GenericFoldMapC m a => a -> m
- genericFoldMapNonSum :: forall m a. (Generic a, GFoldMapNonSum m (Rep a)) => a -> m
- class GFoldMapNonSum m f
- genericFoldMapSum :: forall m a. (Generic a, GFoldMapSum m (Rep a)) => (String -> m) -> a -> m
- class GFoldMapSum m f
Documentation
class GenericFoldMap m where Source #
Associated Types
type GenericFoldMapC m a :: Constraint Source #
The type class that enables mapping permitted types to the monoid.
The type class should provide a function that looks like
genericFoldMapF.
Methods
genericFoldMapF :: GenericFoldMapC m a => a -> m Source #
The "map" function in foldMap (first argument).
Instances
| Monoid m => GenericFoldMap (EmptyRec0 m) Source # | |
Defined in Generic.Data.Function.FoldMap.Constructor Associated Types type GenericFoldMapC (EmptyRec0 m) a Source # Methods genericFoldMapF :: GenericFoldMapC (EmptyRec0 m) a => a -> EmptyRec0 m Source # | |
| GenericFoldMap (NoRec0 m) Source # |
|
Defined in Generic.Data.Function.FoldMap.Constructor Associated Types type GenericFoldMapC (NoRec0 m) a Source # Methods genericFoldMapF :: GenericFoldMapC (NoRec0 m) a => a -> NoRec0 m Source # | |
genericFoldMapNonSum :: forall m a. (Generic a, GFoldMapNonSum m (Rep a)) => a -> m Source #
Generic foldMap over a term of non-sum data type a.
a must have exactly one constructor.
class GFoldMapNonSum m f Source #
foldMap over generic product data types.
Take a generic representation, map each field in the data type to a Monoid,
and combine the results with (<>).
Minimal complete definition
Instances
| (TypeError ENoEmpty :: Constraint) => GFoldMapNonSum m (V1 :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.NonSum Methods gFoldMapNonSum :: forall (p :: k0). V1 p -> m Source # | |
| (TypeError EUnexpectedSum :: Constraint) => GFoldMapNonSum m (l :+: r :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.NonSum Methods gFoldMapNonSum :: forall (p :: k0). (l :+: r) p -> m Source # | |
| GFoldMapC m f => GFoldMapNonSum m (C1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.NonSum Methods gFoldMapNonSum :: forall (p :: k0). C1 c f p -> m Source # | |
| GFoldMapNonSum m f => GFoldMapNonSum m (D1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.NonSum Methods gFoldMapNonSum :: forall (p :: k0). D1 c f p -> m Source # | |
genericFoldMapSum :: forall m a. (Generic a, GFoldMapSum m (Rep a)) => (String -> m) -> a -> m Source #
Generic foldMap over a term of sum data type a.
a must have at least two constructors.
You must provide a function for mapping constructor names to monoidal values.
class GFoldMapSum m f Source #
Minimal complete definition
Instances
| (TypeError ENoEmpty :: Constraint) => GFoldMapSum m (V1 :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.Sum Methods gFoldMapSum :: forall (p :: k0). (String -> m) -> V1 p -> m Source # | |
| GFoldMapCSum m (l :+: r) => GFoldMapSum m (l :+: r :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.Sum Methods gFoldMapSum :: forall (p :: k0). (String -> m) -> (l :+: r) p -> m Source # | |
| (TypeError EUnexpectedNonSum :: Constraint) => GFoldMapSum m (C1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.Sum Methods gFoldMapSum :: forall (p :: k0). (String -> m) -> C1 c f p -> m Source # | |
| GFoldMapSum m f => GFoldMapSum m (D1 c f :: k -> Type) Source # | |
Defined in Generic.Data.Function.FoldMap.Sum Methods gFoldMapSum :: forall (p :: k0). (String -> m) -> D1 c f p -> m Source # | |