| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Data.Monoid.Linear
Description
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 as.
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 (.).
Constructors
| 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)
Constructors
| NonLinear 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 Methods 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 Methods 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 Methods 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 Methods 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 Methods 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 Methods 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
Constructors
| Product | |
Fields
| |
Instances
| Foldable Product | Since: base-4.8.0.0 |
Defined in Data.Foldable Methods 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 |
| 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 | |