Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Monoid.Linear
Description
This module provides linear versions of Monoid
and related classes.
Synopsis
- mconcat :: Monoid a => [a] %1 -> a
- mappend :: Monoid a => a %1 -> a %1 -> a
- class Semigroup a => Monoid a where
- mempty :: a
- newtype First a = First {
- getFirst :: a
- newtype Any = Any {}
- class Semigroup a where
- (<>) :: a %1 -> a %1 -> a
- newtype Sum a = Sum {
- getSum :: a
- newtype Product a = Product {
- getProduct :: a
- newtype Last a = Last {
- getLast :: a
- newtype All = All {}
- newtype Endo a = Endo (a %1 -> a)
- appEndo :: Endo a %1 -> a %1 -> a
- newtype Dual a = Dual {
- getDual :: a
- newtype NonLinear a = NonLinear a
Documentation
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
Beware that Data.Semigroup.
First
is different from
Data.Monoid.
First
. The former simply returns the first value,
so Data.Semigroup.First Nothing <> x = Data.Semigroup.First Nothing
.
The latter returns the first non-Nothing
,
thus Data.Monoid.First Nothing <> x = x
.
Examples
>>>
First 0 <> First 10
First 0
>>>
sconcat $ First 1 :| [ First n | n <- [2 ..] ]
First 1
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 # | |||||
Foldable1 First | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => First m -> m # foldMap1 :: Semigroup m => (a -> m) -> First a -> m # foldMap1' :: Semigroup m => (a -> m) -> First a -> m # toNonEmpty :: First a -> NonEmpty a # maximum :: Ord a => First a -> a # minimum :: Ord a => First a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> First a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> First a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> First a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> First a -> b # | |||||
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 | ||||
NFData1 First | Since: deepseq-1.4.3.0 | ||||
Defined in Control.DeepSeq | |||||
Generic1 First | |||||
Defined in Data.Semigroup Associated Types
| |||||
Unbox a => Vector Vector (First a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s (First a) -> ST s (Vector (First a)) basicUnsafeThaw :: Vector (First a) -> ST s (Mutable Vector s (First a)) basicLength :: Vector (First a) -> Int basicUnsafeSlice :: Int -> Int -> Vector (First a) -> Vector (First a) basicUnsafeIndexM :: Vector (First a) -> Int -> Box (First a) basicUnsafeCopy :: Mutable Vector s (First a) -> Vector (First a) -> ST s () | |||||
Unbox a => MVector MVector (First a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s (First a) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (First a) -> MVector s (First a) basicOverlaps :: MVector s (First a) -> MVector s (First a) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (First a)) basicInitialize :: MVector s (First a) -> ST s () basicUnsafeReplicate :: Int -> First a -> ST s (MVector s (First a)) basicUnsafeRead :: MVector s (First a) -> Int -> ST s (First a) basicUnsafeWrite :: MVector s (First a) -> Int -> First a -> ST s () basicClear :: MVector s (First a) -> ST s () basicSet :: MVector s (First a) -> First a -> ST s () basicUnsafeCopy :: MVector s (First a) -> MVector s (First a) -> ST s () basicUnsafeMove :: MVector s (First a) -> MVector s (First a) -> ST s () basicUnsafeGrow :: MVector s (First a) -> Int -> ST s (MVector s (First a)) | |||||
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) | |||||
Defined in Data.Semigroup Associated Types
| |||||
Read a => Read (First a) | Since: base-4.9.0.0 | ||||
Show a => Show (First a) | Since: base-4.9.0.0 | ||||
NFData a => NFData (First a) | Since: deepseq-1.4.2.0 | ||||
Defined in Control.DeepSeq | |||||
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 | |||||
Prim a => Prim (First a) | Since: primitive-0.6.5.0 | ||||
Defined in Data.Primitive.Types Methods sizeOfType# :: Proxy (First a) -> Int# # alignmentOfType# :: Proxy (First a) -> Int# # alignment# :: First a -> Int# # indexByteArray# :: ByteArray# -> Int# -> First a # readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, First a #) # writeByteArray# :: MutableByteArray# s -> Int# -> First a -> State# s -> State# s # setByteArray# :: MutableByteArray# s -> Int# -> Int# -> First a -> State# s -> State# s # indexOffAddr# :: Addr# -> Int# -> First a # readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, First a #) # writeOffAddr# :: Addr# -> Int# -> First a -> State# s -> State# s # setOffAddr# :: Addr# -> Int# -> Int# -> First a -> State# s -> State# s # | |||||
Unbox a => Unbox (First a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
type Rep1 First | Since: base-4.9.0.0 | ||||
Defined in Data.Semigroup | |||||
type Rep1 First | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype MVector s (First a) | |||||
Defined in Data.Vector.Unboxed.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 | |||||
newtype Vector (First a) | |||||
Defined in Data.Vector.Unboxed.Base |
Boolean monoid under disjunction (||)
.
Any x <> Any y = Any (x || y)
Examples
>>>
Any True <> mempty <> Any False
Any {getAny = True}
>>>
mconcat (map (\x -> Any (even x)) [2,4,6,7,8])
Any {getAny = True}
>>>
Any False <> mempty
Any {getAny = False}
Instances
Data Any | Since: base-4.8.0.0 | ||||
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Any -> c Any # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Any # dataTypeOf :: Any -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Any) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Any) # gmapT :: (forall b. Data b => b -> b) -> Any -> Any # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Any -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Any -> r # gmapQ :: (forall d. Data d => d -> u) -> Any -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Any -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Any -> m Any # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Any -> m Any # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Any -> m Any # | |||||
Monoid Any | Since: base-2.1 | ||||
Semigroup Any | Since: base-4.9.0.0 | ||||
Bounded Any | Since: base-2.1 | ||||
Generic Any | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
Read Any | Since: base-2.1 | ||||
Show Any | Since: base-2.1 | ||||
NFData Any | Since: deepseq-1.4.0.0 | ||||
Defined in Control.DeepSeq | |||||
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 # | |||||
Unbox Any | |||||
Defined in Data.Vector.Unboxed.Base | |||||
Vector Vector Any | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s Any -> ST s (Vector Any) basicUnsafeThaw :: Vector Any -> ST s (Mutable Vector s Any) basicLength :: Vector Any -> Int basicUnsafeSlice :: Int -> Int -> Vector Any -> Vector Any basicUnsafeIndexM :: Vector Any -> Int -> Box Any basicUnsafeCopy :: Mutable Vector s Any -> Vector Any -> ST s () | |||||
MVector MVector Any | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s Any -> Int basicUnsafeSlice :: Int -> Int -> MVector s Any -> MVector s Any basicOverlaps :: MVector s Any -> MVector s Any -> Bool basicUnsafeNew :: Int -> ST s (MVector s Any) basicInitialize :: MVector s Any -> ST s () basicUnsafeReplicate :: Int -> Any -> ST s (MVector s Any) basicUnsafeRead :: MVector s Any -> Int -> ST s Any basicUnsafeWrite :: MVector s Any -> Int -> Any -> ST s () basicClear :: MVector s Any -> ST s () basicSet :: MVector s Any -> Any -> ST s () basicUnsafeCopy :: MVector s Any -> MVector s Any -> ST s () basicUnsafeMove :: MVector s Any -> MVector s Any -> ST s () basicUnsafeGrow :: MVector s Any -> Int -> ST s (MVector s Any) | |||||
type Rep Any | Since: base-4.7.0.0 | ||||
Defined in Data.Semigroup.Internal | |||||
type Rep Any | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype Vector Any | |||||
Defined in Data.Vector.Unboxed.Base | |||||
newtype MVector s Any | |||||
Defined in Data.Vector.Unboxed.Base |
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
Monoid under addition.
Sum a <> Sum b = Sum (a + b)
Examples
>>>
Sum 1 <> Sum 2 <> mempty
Sum {getSum = 3}
>>>
mconcat [ Sum n | n <- [3 .. 9]]
Sum {getSum = 42}
Instances
MonadFix Sum | Since: base-4.8.0.0 | ||||
Defined in Control.Monad.Fix | |||||
MonadZip Sum | Since: base-4.8.0.0 | ||||
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 # | |||||
Foldable1 Sum | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => Sum m -> m # foldMap1 :: Semigroup m => (a -> m) -> Sum a -> m # foldMap1' :: Semigroup m => (a -> m) -> Sum a -> m # toNonEmpty :: Sum a -> NonEmpty a # maximum :: Ord a => Sum a -> a # minimum :: Ord a => Sum a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Sum a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Sum a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Sum a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Sum a -> b # | |||||
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 | ||||
NFData1 Sum | Since: deepseq-1.4.3.0 | ||||
Defined in Control.DeepSeq | |||||
Generic1 Sum | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
Unbox a => Vector Vector (Sum a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s (Sum a) -> ST s (Vector (Sum a)) basicUnsafeThaw :: Vector (Sum a) -> ST s (Mutable Vector s (Sum a)) basicLength :: Vector (Sum a) -> Int basicUnsafeSlice :: Int -> Int -> Vector (Sum a) -> Vector (Sum a) basicUnsafeIndexM :: Vector (Sum a) -> Int -> Box (Sum a) basicUnsafeCopy :: Mutable Vector s (Sum a) -> Vector (Sum a) -> ST s () | |||||
Unbox a => MVector MVector (Sum a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s (Sum a) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (Sum a) -> MVector s (Sum a) basicOverlaps :: MVector s (Sum a) -> MVector s (Sum a) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (Sum a)) basicInitialize :: MVector s (Sum a) -> ST s () basicUnsafeReplicate :: Int -> Sum a -> ST s (MVector s (Sum a)) basicUnsafeRead :: MVector s (Sum a) -> Int -> ST s (Sum a) basicUnsafeWrite :: MVector s (Sum a) -> Int -> Sum a -> ST s () basicClear :: MVector s (Sum a) -> ST s () basicSet :: MVector s (Sum a) -> Sum a -> ST s () basicUnsafeCopy :: MVector s (Sum a) -> MVector s (Sum a) -> ST s () basicUnsafeMove :: MVector s (Sum a) -> MVector s (Sum a) -> ST s () basicUnsafeGrow :: MVector s (Sum a) -> Int -> ST s (MVector s (Sum a)) | |||||
Data a => Data (Sum a) | Since: base-4.8.0.0 | ||||
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Sum a -> c (Sum a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Sum a) # dataTypeOf :: Sum a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Sum a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Sum a)) # gmapT :: (forall b. Data b => b -> b) -> Sum a -> Sum a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Sum a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Sum a -> r # gmapQ :: (forall d. Data d => d -> u) -> Sum a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Sum a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) # | |||||
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) | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
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 | ||||
NFData a => NFData (Sum a) | Since: deepseq-1.4.0.0 | ||||
Defined in Control.DeepSeq | |||||
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 # | |||||
Prim a => Prim (Sum a) | Since: primitive-0.6.5.0 | ||||
Defined in Data.Primitive.Types Methods sizeOfType# :: Proxy (Sum a) -> Int# # alignmentOfType# :: Proxy (Sum a) -> Int# # alignment# :: Sum a -> Int# # indexByteArray# :: ByteArray# -> Int# -> Sum a # readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Sum a #) # writeByteArray# :: MutableByteArray# s -> Int# -> Sum a -> State# s -> State# s # setByteArray# :: MutableByteArray# s -> Int# -> Int# -> Sum a -> State# s -> State# s # indexOffAddr# :: Addr# -> Int# -> Sum a # readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, Sum a #) # writeOffAddr# :: Addr# -> Int# -> Sum a -> State# s -> State# s # setOffAddr# :: Addr# -> Int# -> Int# -> Sum a -> State# s -> State# s # | |||||
Unbox a => Unbox (Sum a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
type Rep1 Sum | Since: base-4.7.0.0 | ||||
Defined in Data.Semigroup.Internal | |||||
type Rep1 Sum | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype MVector s (Sum a) | |||||
Defined in Data.Vector.Unboxed.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 | |||||
newtype Vector (Sum a) | |||||
Defined in Data.Vector.Unboxed.Base |
Monoid under multiplication.
Product x <> Product y == Product (x * y)
Examples
>>>
Product 3 <> Product 4 <> mempty
Product {getProduct = 12}
>>>
mconcat [ Product n | n <- [2 .. 10]]
Product {getProduct = 3628800}
Constructors
Product | |
Fields
|
Instances
MonadFix Product | Since: base-4.8.0.0 | ||||
Defined in Control.Monad.Fix | |||||
MonadZip Product | Since: base-4.8.0.0 | ||||
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 # | |||||
Foldable1 Product | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => Product m -> m # foldMap1 :: Semigroup m => (a -> m) -> Product a -> m # foldMap1' :: Semigroup m => (a -> m) -> Product a -> m # toNonEmpty :: Product a -> NonEmpty a # maximum :: Ord a => Product a -> a # minimum :: Ord a => Product a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Product a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Product a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Product a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Product a -> b # | |||||
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 | ||||
NFData1 Product | Since: deepseq-1.4.3.0 | ||||
Defined in Control.DeepSeq | |||||
Generic1 Product | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
Unbox a => Vector Vector (Product a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s (Product a) -> ST s (Vector (Product a)) basicUnsafeThaw :: Vector (Product a) -> ST s (Mutable Vector s (Product a)) basicLength :: Vector (Product a) -> Int basicUnsafeSlice :: Int -> Int -> Vector (Product a) -> Vector (Product a) basicUnsafeIndexM :: Vector (Product a) -> Int -> Box (Product a) basicUnsafeCopy :: Mutable Vector s (Product a) -> Vector (Product a) -> ST s () | |||||
Unbox a => MVector MVector (Product a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s (Product a) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (Product a) -> MVector s (Product a) basicOverlaps :: MVector s (Product a) -> MVector s (Product a) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (Product a)) basicInitialize :: MVector s (Product a) -> ST s () basicUnsafeReplicate :: Int -> Product a -> ST s (MVector s (Product a)) basicUnsafeRead :: MVector s (Product a) -> Int -> ST s (Product a) basicUnsafeWrite :: MVector s (Product a) -> Int -> Product a -> ST s () basicClear :: MVector s (Product a) -> ST s () basicSet :: MVector s (Product a) -> Product a -> ST s () basicUnsafeCopy :: MVector s (Product a) -> MVector s (Product a) -> ST s () basicUnsafeMove :: MVector s (Product a) -> MVector s (Product a) -> ST s () basicUnsafeGrow :: MVector s (Product a) -> Int -> ST s (MVector s (Product a)) | |||||
Data a => Data (Product a) | Since: base-4.8.0.0 | ||||
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Product a -> c (Product a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Product a) # toConstr :: Product a -> Constr # dataTypeOf :: Product a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Product a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Product a)) # gmapT :: (forall b. Data b => b -> b) -> Product a -> Product a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Product a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Product a -> r # gmapQ :: (forall d. Data d => d -> u) -> Product a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Product a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) # | |||||
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) | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
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 | ||||
NFData a => NFData (Product a) | Since: deepseq-1.4.0.0 | ||||
Defined in Control.DeepSeq | |||||
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 # | |||||
Prim a => Prim (Product a) | Since: primitive-0.6.5.0 | ||||
Defined in Data.Primitive.Types Methods sizeOfType# :: Proxy (Product a) -> Int# # sizeOf# :: Product a -> Int# # alignmentOfType# :: Proxy (Product a) -> Int# # alignment# :: Product a -> Int# # indexByteArray# :: ByteArray# -> Int# -> Product a # readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Product a #) # writeByteArray# :: MutableByteArray# s -> Int# -> Product a -> State# s -> State# s # setByteArray# :: MutableByteArray# s -> Int# -> Int# -> Product a -> State# s -> State# s # indexOffAddr# :: Addr# -> Int# -> Product a # readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, Product a #) # writeOffAddr# :: Addr# -> Int# -> Product a -> State# s -> State# s # setOffAddr# :: Addr# -> Int# -> Int# -> Product a -> State# s -> State# s # | |||||
Unbox a => Unbox (Product a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
type Rep1 Product | Since: base-4.7.0.0 | ||||
Defined in Data.Semigroup.Internal | |||||
type Rep1 Product | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype MVector s (Product a) | |||||
Defined in Data.Vector.Unboxed.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 | |||||
newtype Vector (Product a) | |||||
Defined in Data.Vector.Unboxed.Base |
Beware that Data.Semigroup.
Last
is different from
Data.Monoid.
Last
. The former simply returns the last value,
so x <> Data.Semigroup.Last Nothing = Data.Semigroup.Last Nothing
.
The latter returns the last non-Nothing
,
thus x <> Data.Monoid.Last Nothing = x
.
Examples
>>>
Last 0 <> Last 10
Last {getLast = 10}
>>>
sconcat $ Last 1 :| [ Last n | n <- [2..]]
Last {getLast = * hangs forever *
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 # | |||||
Foldable1 Last | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => Last m -> m # foldMap1 :: Semigroup m => (a -> m) -> Last a -> m # foldMap1' :: Semigroup m => (a -> m) -> Last a -> m # toNonEmpty :: Last a -> NonEmpty a # maximum :: Ord a => Last a -> a # minimum :: Ord a => Last a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Last a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Last a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Last a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Last a -> b # | |||||
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 | ||||
NFData1 Last | Since: deepseq-1.4.3.0 | ||||
Defined in Control.DeepSeq | |||||
Generic1 Last | |||||
Defined in Data.Semigroup Associated Types
| |||||
Unbox a => Vector Vector (Last a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s (Last a) -> ST s (Vector (Last a)) basicUnsafeThaw :: Vector (Last a) -> ST s (Mutable Vector s (Last a)) basicLength :: Vector (Last a) -> Int basicUnsafeSlice :: Int -> Int -> Vector (Last a) -> Vector (Last a) basicUnsafeIndexM :: Vector (Last a) -> Int -> Box (Last a) basicUnsafeCopy :: Mutable Vector s (Last a) -> Vector (Last a) -> ST s () | |||||
Unbox a => MVector MVector (Last a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s (Last a) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (Last a) -> MVector s (Last a) basicOverlaps :: MVector s (Last a) -> MVector s (Last a) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (Last a)) basicInitialize :: MVector s (Last a) -> ST s () basicUnsafeReplicate :: Int -> Last a -> ST s (MVector s (Last a)) basicUnsafeRead :: MVector s (Last a) -> Int -> ST s (Last a) basicUnsafeWrite :: MVector s (Last a) -> Int -> Last a -> ST s () basicClear :: MVector s (Last a) -> ST s () basicSet :: MVector s (Last a) -> Last a -> ST s () basicUnsafeCopy :: MVector s (Last a) -> MVector s (Last a) -> ST s () basicUnsafeMove :: MVector s (Last a) -> MVector s (Last a) -> ST s () basicUnsafeGrow :: MVector s (Last a) -> Int -> ST s (MVector s (Last a)) | |||||
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) | |||||
Defined in Data.Semigroup Associated Types
| |||||
Read a => Read (Last a) | Since: base-4.9.0.0 | ||||
Show a => Show (Last a) | Since: base-4.9.0.0 | ||||
NFData a => NFData (Last a) | Since: deepseq-1.4.2.0 | ||||
Defined in Control.DeepSeq | |||||
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 | |||||
Prim a => Prim (Last a) | Since: primitive-0.6.5.0 | ||||
Defined in Data.Primitive.Types Methods sizeOfType# :: Proxy (Last a) -> Int# # alignmentOfType# :: Proxy (Last a) -> Int# # alignment# :: Last a -> Int# # indexByteArray# :: ByteArray# -> Int# -> Last a # readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Last a #) # writeByteArray# :: MutableByteArray# s -> Int# -> Last a -> State# s -> State# s # setByteArray# :: MutableByteArray# s -> Int# -> Int# -> Last a -> State# s -> State# s # indexOffAddr# :: Addr# -> Int# -> Last a # readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, Last a #) # writeOffAddr# :: Addr# -> Int# -> Last a -> State# s -> State# s # setOffAddr# :: Addr# -> Int# -> Int# -> Last a -> State# s -> State# s # | |||||
Unbox a => Unbox (Last a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
type Rep1 Last | Since: base-4.9.0.0 | ||||
Defined in Data.Semigroup | |||||
type Rep1 Last | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype MVector s (Last a) | |||||
Defined in Data.Vector.Unboxed.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 | |||||
newtype Vector (Last a) | |||||
Defined in Data.Vector.Unboxed.Base |
Boolean monoid under conjunction (&&)
.
All x <> All y = All (x && y)
Examples
>>>
All True <> mempty <> All False)
All {getAll = False}
>>>
mconcat (map (\x -> All (even x)) [2,4,6,7,8])
All {getAll = False}
>>>
All True <> mempty
All {getAll = True}
Instances
Data All | Since: base-4.8.0.0 | ||||
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> All -> c All # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c All # dataTypeOf :: All -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c All) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c All) # gmapT :: (forall b. Data b => b -> b) -> All -> All # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> All -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> All -> r # gmapQ :: (forall d. Data d => d -> u) -> All -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> All -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> All -> m All # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> All -> m All # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> All -> m All # | |||||
Monoid All | Since: base-2.1 | ||||
Semigroup All | Since: base-4.9.0.0 | ||||
Bounded All | Since: base-2.1 | ||||
Generic All | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
Read All | Since: base-2.1 | ||||
Show All | Since: base-2.1 | ||||
NFData All | Since: deepseq-1.4.0.0 | ||||
Defined in Control.DeepSeq | |||||
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 # | |||||
Unbox All | |||||
Defined in Data.Vector.Unboxed.Base | |||||
Vector Vector All | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s All -> ST s (Vector All) basicUnsafeThaw :: Vector All -> ST s (Mutable Vector s All) basicLength :: Vector All -> Int basicUnsafeSlice :: Int -> Int -> Vector All -> Vector All basicUnsafeIndexM :: Vector All -> Int -> Box All basicUnsafeCopy :: Mutable Vector s All -> Vector All -> ST s () | |||||
MVector MVector All | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s All -> Int basicUnsafeSlice :: Int -> Int -> MVector s All -> MVector s All basicOverlaps :: MVector s All -> MVector s All -> Bool basicUnsafeNew :: Int -> ST s (MVector s All) basicInitialize :: MVector s All -> ST s () basicUnsafeReplicate :: Int -> All -> ST s (MVector s All) basicUnsafeRead :: MVector s All -> Int -> ST s All basicUnsafeWrite :: MVector s All -> Int -> All -> ST s () basicClear :: MVector s All -> ST s () basicSet :: MVector s All -> All -> ST s () basicUnsafeCopy :: MVector s All -> MVector s All -> ST s () basicUnsafeMove :: MVector s All -> MVector s All -> ST s () basicUnsafeGrow :: MVector s All -> Int -> ST s (MVector s All) | |||||
type Rep All | Since: base-4.7.0.0 | ||||
Defined in Data.Semigroup.Internal | |||||
type Rep All | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype Vector All | |||||
Defined in Data.Vector.Unboxed.Base | |||||
newtype MVector s All | |||||
Defined in Data.Vector.Unboxed.Base |
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) |
The dual of a Monoid
, obtained by swapping the arguments of (<>)
.
Dual a <> Dual b == Dual (b <> a)
Examples
>>>
Dual "Hello" <> Dual "World"
Dual {getDual = "WorldHello"}
>>>
Dual (Dual "Hello") <> Dual (Dual "World")
Dual {getDual = Dual {getDual = "HelloWorld"}}
Instances
MonadFix Dual | Since: base-4.8.0.0 | ||||
Defined in Control.Monad.Fix | |||||
MonadZip Dual | Since: base-4.8.0.0 | ||||
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 # | |||||
Foldable1 Dual | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => Dual m -> m # foldMap1 :: Semigroup m => (a -> m) -> Dual a -> m # foldMap1' :: Semigroup m => (a -> m) -> Dual a -> m # toNonEmpty :: Dual a -> NonEmpty a # maximum :: Ord a => Dual a -> a # minimum :: Ord a => Dual a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Dual a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Dual a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Dual a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Dual a -> b # | |||||
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 | ||||
NFData1 Dual | Since: deepseq-1.4.3.0 | ||||
Defined in Control.DeepSeq | |||||
Generic1 Dual | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
Unbox a => Vector Vector (Dual a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s (Dual a) -> ST s (Vector (Dual a)) basicUnsafeThaw :: Vector (Dual a) -> ST s (Mutable Vector s (Dual a)) basicLength :: Vector (Dual a) -> Int basicUnsafeSlice :: Int -> Int -> Vector (Dual a) -> Vector (Dual a) basicUnsafeIndexM :: Vector (Dual a) -> Int -> Box (Dual a) basicUnsafeCopy :: Mutable Vector s (Dual a) -> Vector (Dual a) -> ST s () | |||||
Unbox a => MVector MVector (Dual a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s (Dual a) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (Dual a) -> MVector s (Dual a) basicOverlaps :: MVector s (Dual a) -> MVector s (Dual a) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (Dual a)) basicInitialize :: MVector s (Dual a) -> ST s () basicUnsafeReplicate :: Int -> Dual a -> ST s (MVector s (Dual a)) basicUnsafeRead :: MVector s (Dual a) -> Int -> ST s (Dual a) basicUnsafeWrite :: MVector s (Dual a) -> Int -> Dual a -> ST s () basicClear :: MVector s (Dual a) -> ST s () basicSet :: MVector s (Dual a) -> Dual a -> ST s () basicUnsafeCopy :: MVector s (Dual a) -> MVector s (Dual a) -> ST s () basicUnsafeMove :: MVector s (Dual a) -> MVector s (Dual a) -> ST s () basicUnsafeGrow :: MVector s (Dual a) -> Int -> ST s (MVector s (Dual a)) | |||||
Data a => Data (Dual a) | Since: base-4.8.0.0 | ||||
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Dual a -> c (Dual a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Dual a) # toConstr :: Dual a -> Constr # dataTypeOf :: Dual a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Dual a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Dual a)) # gmapT :: (forall b. Data b => b -> b) -> Dual a -> Dual a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Dual a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Dual a -> r # gmapQ :: (forall d. Data d => d -> u) -> Dual a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Dual a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Dual a -> m (Dual a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Dual a -> m (Dual a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Dual a -> m (Dual a) # | |||||
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) | |||||
Defined in Data.Semigroup.Internal Associated Types
| |||||
Read a => Read (Dual a) | Since: base-2.1 | ||||
Show a => Show (Dual a) | Since: base-2.1 | ||||
NFData a => NFData (Dual a) | Since: deepseq-1.4.0.0 | ||||
Defined in Control.DeepSeq | |||||
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 | |||||
Prim a => Prim (Dual a) | Since: primitive-0.6.5.0 | ||||
Defined in Data.Primitive.Types Methods sizeOfType# :: Proxy (Dual a) -> Int# # alignmentOfType# :: Proxy (Dual a) -> Int# # alignment# :: Dual a -> Int# # indexByteArray# :: ByteArray# -> Int# -> Dual a # readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Dual a #) # writeByteArray# :: MutableByteArray# s -> Int# -> Dual a -> State# s -> State# s # setByteArray# :: MutableByteArray# s -> Int# -> Int# -> Dual a -> State# s -> State# s # indexOffAddr# :: Addr# -> Int# -> Dual a # readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, Dual a #) # writeOffAddr# :: Addr# -> Int# -> Dual a -> State# s -> State# s # setOffAddr# :: Addr# -> Int# -> Int# -> Dual a -> State# s -> State# s # | |||||
Unbox a => Unbox (Dual a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
type Rep1 Dual | Since: base-4.7.0.0 | ||||
Defined in Data.Semigroup.Internal | |||||
type Rep1 Dual | |||||
Defined in Generics.Linear.Instances.Base | |||||
newtype MVector s (Dual a) | |||||
Defined in Data.Vector.Unboxed.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 | |||||
newtype Vector (Dual a) | |||||
Defined in Data.Vector.Unboxed.Base |
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 |