/
Generic.purs
27 lines (20 loc) · 930 Bytes
/
Generic.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
module Data.Monoid.Generic
( class GenericMonoid
, genericMempty'
, genericMempty
) where
import Data.Monoid (class Monoid, mempty)
import Data.Generic.Rep
class GenericMonoid a where
genericMempty' :: a
instance genericMonoidNoArguments :: GenericMonoid NoArguments where
genericMempty' = NoArguments
instance genericMonoidProduct :: (GenericMonoid a, GenericMonoid b) => GenericMonoid (Product a b) where
genericMempty' = Product genericMempty' genericMempty'
instance genericMonoidConstructor :: GenericMonoid a => GenericMonoid (Constructor name a) where
genericMempty' = Constructor genericMempty'
instance genericMonoidArgument :: Monoid a => GenericMonoid (Argument a) where
genericMempty' = Argument mempty
-- | A `Generic` implementation of the `mempty` member from the `Monoid` type class.
genericMempty :: forall a rep. Generic a rep => GenericMonoid rep => a
genericMempty = to genericMempty'