Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
This module provides linear versions of Monoid
and related classes.
Synopsis
- class Semigroup a => Monoid a where
- mempty :: a
- mconcat :: Monoid a => [a] %1 -> a
- mappend :: Monoid a => a %1 -> a %1 -> a
- class Semigroup a where
- (<>) :: a %1 -> a %1 -> a
- newtype Endo a = Endo (a %1 -> a)
- appEndo :: Endo a %1 -> a %1 -> a
- newtype NonLinear a = NonLinear a
- newtype All = All {}
- newtype Any = Any {}
- newtype First a = First {
- getFirst :: a
- newtype Last a = Last {
- getLast :: a
- newtype Dual a = Dual {
- getDual :: a
- newtype Sum a = Sum {
- getSum :: a
- newtype Product a = Product {
- getProduct :: a
Monoid operations
class Semigroup a => Monoid a where Source #
A linear monoid is a linear semigroup with an identity on the binary operation.
Laws (same as Monoid
):
* ∀ x ∈ G, x <> mempty = mempty <> x = x
Instances
Semigroup
class Semigroup a where Source #
A linear semigroup a
is a type with an associative binary operation <>
that linearly consumes two a
s.
Laws (same as Semigroup
):
* ∀ x ∈ G, y ∈ G, z ∈ G, x <> (y <> z) = (x <> y) <> z
Instances
Endo
An
is just a linear function of type Endo
aa %1-> a
.
This has a classic monoid definition with id
and (.)
.
Endo (a %1 -> a) |
NonLinear newtype
DerivingVia
combinator for Semigroup
(resp. Monoid
)
given linear Semigroup
(resp. Monoid
).
newtype Endo a = Endo (a %1-> a) deriving (Prelude.Semigroup) via NonLinear (Endo a)
Data.Semigroup reexports
Boolean monoid under conjunction (&&
).
>>>
getAll (All True <> mempty <> All False)
False
>>>
getAll (mconcat (map (\x -> All (even x)) [2,4,6,7,8]))
False
Instances
Monoid All | Since: base-2.1 |
Semigroup All | Since: base-4.9.0.0 |
Bounded All | Since: base-2.1 |
Generic All | |
Read All | Since: base-2.1 |
Show All | Since: base-2.1 |
Eq All | Since: base-2.1 |
Ord All | Since: base-2.1 |
Monoid All Source # | |
Defined in Data.Monoid.Linear.Internal.Monoid | |
Semigroup All Source # | |
Consumable All Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Dupable All Source # | |
Movable All Source # | |
type Rep All | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal | |
type Rep All | |
Defined in Generics.Linear.Instances.Base |
Boolean monoid under disjunction (||
).
>>>
getAny (Any True <> mempty <> Any False)
True
>>>
getAny (mconcat (map (\x -> Any (even x)) [2,4,6,7,8]))
True
Instances
Monoid Any | Since: base-2.1 |
Semigroup Any | Since: base-4.9.0.0 |
Bounded Any | Since: base-2.1 |
Generic Any | |
Read Any | Since: base-2.1 |
Show Any | Since: base-2.1 |
Eq Any | Since: base-2.1 |
Ord Any | Since: base-2.1 |
Monoid Any Source # | |
Defined in Data.Monoid.Linear.Internal.Monoid | |
Semigroup Any Source # | |
Consumable Any Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Dupable Any Source # | |
Movable Any Source # | |
type Rep Any | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal | |
type Rep Any | |
Defined in Generics.Linear.Instances.Base |
Instances
MonadFix First | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
Foldable First | Since: base-4.9.0.0 |
Defined in Data.Semigroup fold :: Monoid m => First m -> m # foldMap :: Monoid m => (a -> m) -> First a -> m # foldMap' :: Monoid m => (a -> m) -> First a -> m # foldr :: (a -> b -> b) -> b -> First a -> b # foldr' :: (a -> b -> b) -> b -> First a -> b # foldl :: (b -> a -> b) -> b -> First a -> b # foldl' :: (b -> a -> b) -> b -> First a -> b # foldr1 :: (a -> a -> a) -> First a -> a # foldl1 :: (a -> a -> a) -> First a -> a # elem :: Eq a => a -> First a -> Bool # maximum :: Ord a => First a -> a # minimum :: Ord a => First a -> a # | |
Traversable First | Since: base-4.9.0.0 |
Applicative First | Since: base-4.9.0.0 |
Functor First | Since: base-4.9.0.0 |
Monad First | Since: base-4.9.0.0 |
Data a => Data (First a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> First a -> c (First a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (First a) # toConstr :: First a -> Constr # dataTypeOf :: First a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (First a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (First a)) # gmapT :: (forall b. Data b => b -> b) -> First a -> First a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> First a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> First a -> r # gmapQ :: (forall d. Data d => d -> u) -> First a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> First a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> First a -> m (First a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> First a -> m (First a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> First a -> m (First a) # | |
Semigroup (First a) | Since: base-4.9.0.0 |
Bounded a => Bounded (First a) | Since: base-4.9.0.0 |
Enum a => Enum (First a) | Since: base-4.9.0.0 |
Generic (First a) | |
Read a => Read (First a) | Since: base-4.9.0.0 |
Show a => Show (First a) | Since: base-4.9.0.0 |
Eq a => Eq (First a) | Since: base-4.9.0.0 |
Ord a => Ord (First a) | Since: base-4.9.0.0 |
Hashable a => Hashable (First a) | |
Defined in Data.Hashable.Class | |
Consumable a => Semigroup (First a) Source # | |
Consumable a => Consumable (First a) Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Generic1 First | |
type Rep1 First | |
Defined in Generics.Linear.Instances.Base | |
type Rep (First a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
type Rep (First a) | |
Defined in Generics.Linear.Instances.Base | |
type Rep1 First | Since: base-4.9.0.0 |
Defined in Data.Semigroup |
Instances
MonadFix Last | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
Foldable Last | Since: base-4.9.0.0 |
Defined in Data.Semigroup fold :: Monoid m => Last m -> m # foldMap :: Monoid m => (a -> m) -> Last a -> m # foldMap' :: Monoid m => (a -> m) -> Last a -> m # foldr :: (a -> b -> b) -> b -> Last a -> b # foldr' :: (a -> b -> b) -> b -> Last a -> b # foldl :: (b -> a -> b) -> b -> Last a -> b # foldl' :: (b -> a -> b) -> b -> Last a -> b # foldr1 :: (a -> a -> a) -> Last a -> a # foldl1 :: (a -> a -> a) -> Last a -> a # elem :: Eq a => a -> Last a -> Bool # maximum :: Ord a => Last a -> a # | |
Traversable Last | Since: base-4.9.0.0 |
Applicative Last | Since: base-4.9.0.0 |
Functor Last | Since: base-4.9.0.0 |
Monad Last | Since: base-4.9.0.0 |
Data a => Data (Last a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Last a -> c (Last a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Last a) # toConstr :: Last a -> Constr # dataTypeOf :: Last a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Last a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Last a)) # gmapT :: (forall b. Data b => b -> b) -> Last a -> Last a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Last a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Last a -> r # gmapQ :: (forall d. Data d => d -> u) -> Last a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Last a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Last a -> m (Last a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Last a -> m (Last a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Last a -> m (Last a) # | |
Semigroup (Last a) | Since: base-4.9.0.0 |
Bounded a => Bounded (Last a) | Since: base-4.9.0.0 |
Enum a => Enum (Last a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
Generic (Last a) | |
Read a => Read (Last a) | Since: base-4.9.0.0 |
Show a => Show (Last a) | Since: base-4.9.0.0 |
Eq a => Eq (Last a) | Since: base-4.9.0.0 |
Ord a => Ord (Last a) | Since: base-4.9.0.0 |
Hashable a => Hashable (Last a) | |
Defined in Data.Hashable.Class | |
Consumable a => Semigroup (Last a) Source # | |
Consumable a => Consumable (Last a) Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Generic1 Last | |
type Rep1 Last | |
Defined in Generics.Linear.Instances.Base | |
type Rep (Last a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
type Rep (Last a) | |
Defined in Generics.Linear.Instances.Base | |
type Rep1 Last | Since: base-4.9.0.0 |
Defined in Data.Semigroup |
The dual of a Monoid
, obtained by swapping the arguments of mappend
.
>>>
getDual (mappend (Dual "Hello") (Dual "World"))
"WorldHello"
Instances
Foldable Dual | Since: base-4.8.0.0 |
Defined in Data.Foldable fold :: Monoid m => Dual m -> m # foldMap :: Monoid m => (a -> m) -> Dual a -> m # foldMap' :: Monoid m => (a -> m) -> Dual a -> m # foldr :: (a -> b -> b) -> b -> Dual a -> b # foldr' :: (a -> b -> b) -> b -> Dual a -> b # foldl :: (b -> a -> b) -> b -> Dual a -> b # foldl' :: (b -> a -> b) -> b -> Dual a -> b # foldr1 :: (a -> a -> a) -> Dual a -> a # foldl1 :: (a -> a -> a) -> Dual a -> a # elem :: Eq a => a -> Dual a -> Bool # maximum :: Ord a => Dual a -> a # | |
Traversable Dual | Since: base-4.8.0.0 |
Applicative Dual | Since: base-4.8.0.0 |
Functor Dual | Since: base-4.8.0.0 |
Monad Dual | Since: base-4.8.0.0 |
Monoid a => Monoid (Dual a) | Since: base-2.1 |
Semigroup a => Semigroup (Dual a) | Since: base-4.9.0.0 |
Bounded a => Bounded (Dual a) | Since: base-2.1 |
Generic (Dual a) | |
Read a => Read (Dual a) | Since: base-2.1 |
Show a => Show (Dual a) | Since: base-2.1 |
Eq a => Eq (Dual a) | Since: base-2.1 |
Ord a => Ord (Dual a) | Since: base-2.1 |
Monoid a => Monoid (Dual a) Source # | |
Defined in Data.Monoid.Linear.Internal.Monoid | |
Semigroup a => Semigroup (Dual a) Source # | |
Consumable a => Consumable (Dual a) Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Generic1 Dual | |
type Rep1 Dual | |
Defined in Generics.Linear.Instances.Base | |
type Rep (Dual a) | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal | |
type Rep (Dual a) | |
Defined in Generics.Linear.Instances.Base | |
type Rep1 Dual | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal |
Monoid under addition.
>>>
getSum (Sum 1 <> Sum 2 <> mempty)
3
Instances
Foldable Sum | Since: base-4.8.0.0 |
Defined in Data.Foldable fold :: Monoid m => Sum m -> m # foldMap :: Monoid m => (a -> m) -> Sum a -> m # foldMap' :: Monoid m => (a -> m) -> Sum a -> m # foldr :: (a -> b -> b) -> b -> Sum a -> b # foldr' :: (a -> b -> b) -> b -> Sum a -> b # foldl :: (b -> a -> b) -> b -> Sum a -> b # foldl' :: (b -> a -> b) -> b -> Sum a -> b # foldr1 :: (a -> a -> a) -> Sum a -> a # foldl1 :: (a -> a -> a) -> Sum a -> a # elem :: Eq a => a -> Sum a -> Bool # maximum :: Ord a => Sum a -> a # | |
Traversable Sum | Since: base-4.8.0.0 |
Applicative Sum | Since: base-4.8.0.0 |
Functor Sum | Since: base-4.8.0.0 |
Monad Sum | Since: base-4.8.0.0 |
Num a => Monoid (Sum a) | Since: base-2.1 |
Num a => Semigroup (Sum a) | Since: base-4.9.0.0 |
Bounded a => Bounded (Sum a) | Since: base-2.1 |
Generic (Sum a) | |
Num a => Num (Sum a) | Since: base-4.7.0.0 |
Read a => Read (Sum a) | Since: base-2.1 |
Show a => Show (Sum a) | Since: base-2.1 |
Eq a => Eq (Sum a) | Since: base-2.1 |
Ord a => Ord (Sum a) | Since: base-2.1 |
AddIdentity a => Monoid (Sum a) Source # | |
Defined in Data.Num.Linear | |
Additive a => Semigroup (Sum a) Source # | |
Consumable a => Consumable (Sum a) Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Dupable a => Dupable (Sum a) Source # | |
Movable a => Movable (Sum a) Source # | |
Generic1 Sum | |
type Rep1 Sum | |
Defined in Generics.Linear.Instances.Base | |
type Rep (Sum a) | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal | |
type Rep (Sum a) | |
Defined in Generics.Linear.Instances.Base | |
type Rep1 Sum | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal |
Monoid under multiplication.
>>>
getProduct (Product 3 <> Product 4 <> mempty)
12
Product | |
|
Instances
Foldable Product | Since: base-4.8.0.0 |
Defined in Data.Foldable fold :: Monoid m => Product m -> m # foldMap :: Monoid m => (a -> m) -> Product a -> m # foldMap' :: Monoid m => (a -> m) -> Product a -> m # foldr :: (a -> b -> b) -> b -> Product a -> b # foldr' :: (a -> b -> b) -> b -> Product a -> b # foldl :: (b -> a -> b) -> b -> Product a -> b # foldl' :: (b -> a -> b) -> b -> Product a -> b # foldr1 :: (a -> a -> a) -> Product a -> a # foldl1 :: (a -> a -> a) -> Product a -> a # elem :: Eq a => a -> Product a -> Bool # maximum :: Ord a => Product a -> a # minimum :: Ord a => Product a -> a # | |
Traversable Product | Since: base-4.8.0.0 |
Applicative Product | Since: base-4.8.0.0 |
Functor Product | Since: base-4.8.0.0 |
Monad Product | Since: base-4.8.0.0 |
Num a => Monoid (Product a) | Since: base-2.1 |
Num a => Semigroup (Product a) | Since: base-4.9.0.0 |
Bounded a => Bounded (Product a) | Since: base-2.1 |
Generic (Product a) | |
Num a => Num (Product a) | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal | |
Read a => Read (Product a) | Since: base-2.1 |
Show a => Show (Product a) | Since: base-2.1 |
Eq a => Eq (Product a) | Since: base-2.1 |
Ord a => Ord (Product a) | Since: base-2.1 |
Defined in Data.Semigroup.Internal | |
MultIdentity a => Monoid (Product a) Source # | |
Defined in Data.Num.Linear | |
Multiplicative a => Semigroup (Product a) Source # | |
Consumable a => Consumable (Product a) Source # | |
Defined in Data.Unrestricted.Linear.Internal.Consumable | |
Dupable a => Dupable (Product a) Source # | |
Movable a => Movable (Product a) Source # | |
Generic1 Product | |
type Rep1 Product | |
Defined in Generics.Linear.Instances.Base | |
type Rep (Product a) | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal | |
type Rep (Product a) | |
Defined in Generics.Linear.Instances.Base | |
type Rep1 Product | Since: base-4.7.0.0 |
Defined in Data.Semigroup.Internal |