generic-data-functions-0.1.0: src/Generic/Data/Function/FoldMap/NonSum.hs
{-# LANGUAGE UndecidableInstances #-} -- required below GHC 9.6
module Generic.Data.Function.FoldMap.NonSum where
import GHC.Generics
import GHC.TypeLits ( TypeError )
import Generic.Data.Function.Error ( type ENoEmpty, type EUnexpectedSum )
import Generic.Data.Function.FoldMap.Constructor ( GFoldMapC(gFoldMapC) )
{- | '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 ('<>').
-}
class GFoldMapNonSum m f where gFoldMapNonSum :: f p -> m
instance GFoldMapNonSum m f => GFoldMapNonSum m (D1 c f) where
gFoldMapNonSum (M1 a) = gFoldMapNonSum a
instance TypeError EUnexpectedSum => GFoldMapNonSum m (l :+: r) where
gFoldMapNonSum = undefined
instance GFoldMapC m f => GFoldMapNonSum m (C1 c f) where
gFoldMapNonSum (M1 a) = gFoldMapC a
instance TypeError ENoEmpty => GFoldMapNonSum m V1 where
gFoldMapNonSum = undefined