Safe Haskell | Trustworthy |
---|---|
Language | Haskell2010 |
Data.Semigroup.Factorial
Description
This module defines the Semigroup
=> Factorial
=> StableFactorial
classes and some of their instances.
Synopsis
- class Semigroup m => Factorial m where
- factors :: m -> [m]
- primePrefix :: m -> m
- primeSuffix :: m -> m
- foldl :: (a -> m -> a) -> a -> m -> a
- foldl' :: (a -> m -> a) -> a -> m -> a
- foldr :: (m -> a -> a) -> a -> m -> a
- length :: m -> Int
- foldMap :: Monoid n => (m -> n) -> m -> n
- reverse :: m -> m
- class Factorial m => StableFactorial m
- mapM :: (Factorial a, Semigroup b, Monoid b, Monad m) => (a -> m b) -> a -> m b
- mapM_ :: (Factorial a, Applicative m) => (a -> m b) -> a -> m ()
Classes
class Semigroup m => Factorial m where Source #
Class of semigroups that can be split into irreducible (i.e., atomic or prime) factors
in a unique way. Factors of
a Product
are literally its prime factors:
factors (Product 12) == [Product 2, Product 2, Product 3]
Factors of a list are not its elements but all its single-item sublists:
factors "abc" == ["a", "b", "c"]
The methods of this class satisfy the following laws:
maybe id sconcat . nonEmpty . factors == id List.all (\prime-> factors prime == [prime]) . factors primePrefix s == foldr const s s foldl f a == List.foldl f a . factors foldl' f a == List.foldl' f a . factors foldr f a == List.foldr f a . factors
A minimal instance definition must implement factors
or foldr
. Other methods can and should be implemented only
for performance reasons.
Methods
Returns a list of all prime factors; inverse of mconcat.
primePrefix :: m -> m Source #
The prime prefix; primePrefix mempty == mempty
for monoids.
primeSuffix :: m -> m Source #
The prime suffix; primeSuffix mempty == mempty
for monoids.
foldl :: (a -> m -> a) -> a -> m -> a Source #
foldl' :: (a -> m -> a) -> a -> m -> a Source #
foldr :: (m -> a -> a) -> a -> m -> a Source #
foldMap :: Monoid n => (m -> n) -> m -> n Source #
Generalizes foldMap
from Data.Foldable, except the function arguments are prime factors
rather
than the structure elements.
Instances
Factorial ByteString Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: ByteString -> [ByteString] Source # primePrefix :: ByteString -> ByteString Source # primeSuffix :: ByteString -> ByteString Source # foldl :: (a -> ByteString -> a) -> a -> ByteString -> a Source # foldl' :: (a -> ByteString -> a) -> a -> ByteString -> a Source # foldr :: (ByteString -> a -> a) -> a -> ByteString -> a Source # length :: ByteString -> Int Source # foldMap :: Monoid n => (ByteString -> n) -> ByteString -> n Source # | |
Factorial ByteString Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: ByteString -> [ByteString] Source # primePrefix :: ByteString -> ByteString Source # primeSuffix :: ByteString -> ByteString Source # foldl :: (a -> ByteString -> a) -> a -> ByteString -> a Source # foldl' :: (a -> ByteString -> a) -> a -> ByteString -> a Source # foldr :: (ByteString -> a -> a) -> a -> ByteString -> a Source # length :: ByteString -> Int Source # foldMap :: Monoid n => (ByteString -> n) -> ByteString -> n Source # | |
Factorial IntSet Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: IntSet -> [IntSet] Source # primePrefix :: IntSet -> IntSet Source # primeSuffix :: IntSet -> IntSet Source # foldl :: (a -> IntSet -> a) -> a -> IntSet -> a Source # foldl' :: (a -> IntSet -> a) -> a -> IntSet -> a Source # foldr :: (IntSet -> a -> a) -> a -> IntSet -> a Source # length :: IntSet -> Int Source # foldMap :: Monoid n => (IntSet -> n) -> IntSet -> n Source # | |
Factorial ByteStringUTF8 Source # | |
Defined in Data.Monoid.Instances.ByteString.UTF8 Methods factors :: ByteStringUTF8 -> [ByteStringUTF8] Source # primePrefix :: ByteStringUTF8 -> ByteStringUTF8 Source # primeSuffix :: ByteStringUTF8 -> ByteStringUTF8 Source # foldl :: (a -> ByteStringUTF8 -> a) -> a -> ByteStringUTF8 -> a Source # foldl' :: (a -> ByteStringUTF8 -> a) -> a -> ByteStringUTF8 -> a Source # foldr :: (ByteStringUTF8 -> a -> a) -> a -> ByteStringUTF8 -> a Source # length :: ByteStringUTF8 -> Int Source # foldMap :: Monoid n => (ByteStringUTF8 -> n) -> ByteStringUTF8 -> n Source # | |
Factorial Text Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Text -> [Text] Source # primePrefix :: Text -> Text Source # primeSuffix :: Text -> Text Source # foldl :: (a -> Text -> a) -> a -> Text -> a Source # foldl' :: (a -> Text -> a) -> a -> Text -> a Source # foldr :: (Text -> a -> a) -> a -> Text -> a Source # length :: Text -> Int Source # | |
Factorial Text Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Text -> [Text] Source # primePrefix :: Text -> Text Source # primeSuffix :: Text -> Text Source # foldl :: (a -> Text -> a) -> a -> Text -> a Source # foldl' :: (a -> Text -> a) -> a -> Text -> a Source # foldr :: (Text -> a -> a) -> a -> Text -> a Source # length :: Text -> Int Source # | |
Factorial () Source # | |
Defined in Data.Semigroup.Factorial | |
Factorial (IntMap a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: IntMap a -> [IntMap a] Source # primePrefix :: IntMap a -> IntMap a Source # primeSuffix :: IntMap a -> IntMap a Source # foldl :: (a0 -> IntMap a -> a0) -> a0 -> IntMap a -> a0 Source # foldl' :: (a0 -> IntMap a -> a0) -> a0 -> IntMap a -> a0 Source # foldr :: (IntMap a -> a0 -> a0) -> a0 -> IntMap a -> a0 Source # length :: IntMap a -> Int Source # foldMap :: Monoid n => (IntMap a -> n) -> IntMap a -> n Source # | |
Factorial (Seq a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Seq a -> [Seq a] Source # primePrefix :: Seq a -> Seq a Source # primeSuffix :: Seq a -> Seq a Source # foldl :: (a0 -> Seq a -> a0) -> a0 -> Seq a -> a0 Source # foldl' :: (a0 -> Seq a -> a0) -> a0 -> Seq a -> a0 Source # foldr :: (Seq a -> a0 -> a0) -> a0 -> Seq a -> a0 Source # length :: Seq a -> Int Source # | |
Ord a => Factorial (Set a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Set a -> [Set a] Source # primePrefix :: Set a -> Set a Source # primeSuffix :: Set a -> Set a Source # foldl :: (a0 -> Set a -> a0) -> a0 -> Set a -> a0 Source # foldl' :: (a0 -> Set a -> a0) -> a0 -> Set a -> a0 Source # foldr :: (Set a -> a0 -> a0) -> a0 -> Set a -> a0 Source # length :: Set a -> Int Source # | |
Factorial a => Factorial (Identity a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Identity a -> [Identity a] Source # primePrefix :: Identity a -> Identity a Source # primeSuffix :: Identity a -> Identity a Source # foldl :: (a0 -> Identity a -> a0) -> a0 -> Identity a -> a0 Source # foldl' :: (a0 -> Identity a -> a0) -> a0 -> Identity a -> a0 Source # foldr :: (Identity a -> a0 -> a0) -> a0 -> Identity a -> a0 Source # length :: Identity a -> Int Source # foldMap :: Monoid n => (Identity a -> n) -> Identity a -> n Source # | |
Factorial a => Factorial (Dual a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Dual a -> [Dual a] Source # primePrefix :: Dual a -> Dual a Source # primeSuffix :: Dual a -> Dual a Source # foldl :: (a0 -> Dual a -> a0) -> a0 -> Dual a -> a0 Source # foldl' :: (a0 -> Dual a -> a0) -> a0 -> Dual a -> a0 Source # foldr :: (Dual a -> a0 -> a0) -> a0 -> Dual a -> a0 Source # length :: Dual a -> Int Source # foldMap :: Monoid n => (Dual a -> n) -> Dual a -> n Source # | |
Integral a => Factorial (Product a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Product a -> [Product a] Source # primePrefix :: Product a -> Product a Source # primeSuffix :: Product a -> Product a Source # foldl :: (a0 -> Product a -> a0) -> a0 -> Product a -> a0 Source # foldl' :: (a0 -> Product a -> a0) -> a0 -> Product a -> a0 Source # foldr :: (Product a -> a0 -> a0) -> a0 -> Product a -> a0 Source # length :: Product a -> Int Source # foldMap :: Monoid n => (Product a -> n) -> Product a -> n Source # | |
(Integral a, Eq a) => Factorial (Sum a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Sum a -> [Sum a] Source # primePrefix :: Sum a -> Sum a Source # primeSuffix :: Sum a -> Sum a Source # foldl :: (a0 -> Sum a -> a0) -> a0 -> Sum a -> a0 Source # foldl' :: (a0 -> Sum a -> a0) -> a0 -> Sum a -> a0 Source # foldr :: (Sum a -> a0 -> a0) -> a0 -> Sum a -> a0 Source # length :: Sum a -> Int Source # | |
(Factorial a, PositiveMonoid a) => Factorial (Concat a) Source # | |
Defined in Data.Monoid.Instances.Concat Methods factors :: Concat a -> [Concat a] Source # primePrefix :: Concat a -> Concat a Source # primeSuffix :: Concat a -> Concat a Source # foldl :: (a0 -> Concat a -> a0) -> a0 -> Concat a -> a0 Source # foldl' :: (a0 -> Concat a -> a0) -> a0 -> Concat a -> a0 Source # foldr :: (Concat a -> a0 -> a0) -> a0 -> Concat a -> a0 Source # length :: Concat a -> Int Source # foldMap :: Monoid n => (Concat a -> n) -> Concat a -> n Source # | |
(StableFactorial a, MonoidNull a) => Factorial (Measured a) Source # | |
Defined in Data.Monoid.Instances.Measured Methods factors :: Measured a -> [Measured a] Source # primePrefix :: Measured a -> Measured a Source # primeSuffix :: Measured a -> Measured a Source # foldl :: (a0 -> Measured a -> a0) -> a0 -> Measured a -> a0 Source # foldl' :: (a0 -> Measured a -> a0) -> a0 -> Measured a -> a0 Source # foldr :: (Measured a -> a0 -> a0) -> a0 -> Measured a -> a0 Source # length :: Measured a -> Int Source # foldMap :: Monoid n => (Measured a -> n) -> Measured a -> n Source # | |
(StableFactorial m, TextualMonoid m) => Factorial (LinePositioned m) Source # | |
Defined in Data.Monoid.Instances.Positioned Methods factors :: LinePositioned m -> [LinePositioned m] Source # primePrefix :: LinePositioned m -> LinePositioned m Source # primeSuffix :: LinePositioned m -> LinePositioned m Source # foldl :: (a -> LinePositioned m -> a) -> a -> LinePositioned m -> a Source # foldl' :: (a -> LinePositioned m -> a) -> a -> LinePositioned m -> a Source # foldr :: (LinePositioned m -> a -> a) -> a -> LinePositioned m -> a Source # length :: LinePositioned m -> Int Source # foldMap :: Monoid n => (LinePositioned m -> n) -> LinePositioned m -> n Source # reverse :: LinePositioned m -> LinePositioned m Source # | |
StableFactorial m => Factorial (OffsetPositioned m) Source # | |
Defined in Data.Monoid.Instances.Positioned Methods factors :: OffsetPositioned m -> [OffsetPositioned m] Source # primePrefix :: OffsetPositioned m -> OffsetPositioned m Source # primeSuffix :: OffsetPositioned m -> OffsetPositioned m Source # foldl :: (a -> OffsetPositioned m -> a) -> a -> OffsetPositioned m -> a Source # foldl' :: (a -> OffsetPositioned m -> a) -> a -> OffsetPositioned m -> a Source # foldr :: (OffsetPositioned m -> a -> a) -> a -> OffsetPositioned m -> a Source # length :: OffsetPositioned m -> Int Source # foldMap :: Monoid n => (OffsetPositioned m -> n) -> OffsetPositioned m -> n Source # reverse :: OffsetPositioned m -> OffsetPositioned m Source # | |
(FactorialMonoid m, StableFactorial m) => Factorial (Shadowed m) Source # | |
Defined in Data.Monoid.Instances.PrefixMemory Methods factors :: Shadowed m -> [Shadowed m] Source # primePrefix :: Shadowed m -> Shadowed m Source # primeSuffix :: Shadowed m -> Shadowed m Source # foldl :: (a -> Shadowed m -> a) -> a -> Shadowed m -> a Source # foldl' :: (a -> Shadowed m -> a) -> a -> Shadowed m -> a Source # foldr :: (Shadowed m -> a -> a) -> a -> Shadowed m -> a Source # length :: Shadowed m -> Int Source # foldMap :: Monoid n => (Shadowed m -> n) -> Shadowed m -> n Source # | |
Factorial (Vector a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Vector a -> [Vector a] Source # primePrefix :: Vector a -> Vector a Source # primeSuffix :: Vector a -> Vector a Source # foldl :: (a0 -> Vector a -> a0) -> a0 -> Vector a -> a0 Source # foldl' :: (a0 -> Vector a -> a0) -> a0 -> Vector a -> a0 Source # foldr :: (Vector a -> a0 -> a0) -> a0 -> Vector a -> a0 Source # length :: Vector a -> Int Source # foldMap :: Monoid n => (Vector a -> n) -> Vector a -> n Source # | |
Factorial a => Factorial (Maybe a) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Maybe a -> [Maybe a] Source # primePrefix :: Maybe a -> Maybe a Source # primeSuffix :: Maybe a -> Maybe a Source # foldl :: (a0 -> Maybe a -> a0) -> a0 -> Maybe a -> a0 Source # foldl' :: (a0 -> Maybe a -> a0) -> a0 -> Maybe a -> a0 Source # foldr :: (Maybe a -> a0 -> a0) -> a0 -> Maybe a -> a0 Source # length :: Maybe a -> Int Source # foldMap :: Monoid n => (Maybe a -> n) -> Maybe a -> n Source # | |
Factorial [x] Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: [x] -> [[x]] Source # primePrefix :: [x] -> [x] Source # primeSuffix :: [x] -> [x] Source # foldl :: (a -> [x] -> a) -> a -> [x] -> a Source # foldl' :: (a -> [x] -> a) -> a -> [x] -> a Source # foldr :: ([x] -> a -> a) -> a -> [x] -> a Source # | |
Ord k => Factorial (Map k v) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Map k v -> [Map k v] Source # primePrefix :: Map k v -> Map k v Source # primeSuffix :: Map k v -> Map k v Source # foldl :: (a -> Map k v -> a) -> a -> Map k v -> a Source # foldl' :: (a -> Map k v -> a) -> a -> Map k v -> a Source # foldr :: (Map k v -> a -> a) -> a -> Map k v -> a Source # length :: Map k v -> Int Source # foldMap :: Monoid n => (Map k v -> n) -> Map k v -> n Source # | |
(FactorialMonoid a, FactorialMonoid b) => Factorial (Stateful a b) Source # | |
Defined in Data.Monoid.Instances.Stateful Methods factors :: Stateful a b -> [Stateful a b] Source # primePrefix :: Stateful a b -> Stateful a b Source # primeSuffix :: Stateful a b -> Stateful a b Source # foldl :: (a0 -> Stateful a b -> a0) -> a0 -> Stateful a b -> a0 Source # foldl' :: (a0 -> Stateful a b -> a0) -> a0 -> Stateful a b -> a0 Source # foldr :: (Stateful a b -> a0 -> a0) -> a0 -> Stateful a b -> a0 Source # length :: Stateful a b -> Int Source # foldMap :: Monoid n => (Stateful a b -> n) -> Stateful a b -> n Source # | |
(Factorial a, Factorial b, MonoidNull a, MonoidNull b) => Factorial (a, b) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: (a, b) -> [(a, b)] Source # primePrefix :: (a, b) -> (a, b) Source # primeSuffix :: (a, b) -> (a, b) Source # foldl :: (a0 -> (a, b) -> a0) -> a0 -> (a, b) -> a0 Source # foldl' :: (a0 -> (a, b) -> a0) -> a0 -> (a, b) -> a0 Source # foldr :: ((a, b) -> a0 -> a0) -> a0 -> (a, b) -> a0 Source # length :: (a, b) -> Int Source # foldMap :: Monoid n => ((a, b) -> n) -> (a, b) -> n Source # | |
Factorial a => Factorial (Const a b) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: Const a b -> [Const a b] Source # primePrefix :: Const a b -> Const a b Source # primeSuffix :: Const a b -> Const a b Source # foldl :: (a0 -> Const a b -> a0) -> a0 -> Const a b -> a0 Source # foldl' :: (a0 -> Const a b -> a0) -> a0 -> Const a b -> a0 Source # foldr :: (Const a b -> a0 -> a0) -> a0 -> Const a b -> a0 Source # length :: Const a b -> Int Source # foldMap :: Monoid n => (Const a b -> n) -> Const a b -> n Source # | |
(Factorial a, Factorial b, Factorial c, MonoidNull a, MonoidNull b, MonoidNull c) => Factorial (a, b, c) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: (a, b, c) -> [(a, b, c)] Source # primePrefix :: (a, b, c) -> (a, b, c) Source # primeSuffix :: (a, b, c) -> (a, b, c) Source # foldl :: (a0 -> (a, b, c) -> a0) -> a0 -> (a, b, c) -> a0 Source # foldl' :: (a0 -> (a, b, c) -> a0) -> a0 -> (a, b, c) -> a0 Source # foldr :: ((a, b, c) -> a0 -> a0) -> a0 -> (a, b, c) -> a0 Source # length :: (a, b, c) -> Int Source # foldMap :: Monoid n => ((a, b, c) -> n) -> (a, b, c) -> n Source # | |
(Factorial a, Factorial b, Factorial c, Factorial d, MonoidNull a, MonoidNull b, MonoidNull c, MonoidNull d) => Factorial (a, b, c, d) Source # | |
Defined in Data.Semigroup.Factorial Methods factors :: (a, b, c, d) -> [(a, b, c, d)] Source # primePrefix :: (a, b, c, d) -> (a, b, c, d) Source # primeSuffix :: (a, b, c, d) -> (a, b, c, d) Source # foldl :: (a0 -> (a, b, c, d) -> a0) -> a0 -> (a, b, c, d) -> a0 Source # foldl' :: (a0 -> (a, b, c, d) -> a0) -> a0 -> (a, b, c, d) -> a0 Source # foldr :: ((a, b, c, d) -> a0 -> a0) -> a0 -> (a, b, c, d) -> a0 Source # length :: (a, b, c, d) -> Int Source # foldMap :: Monoid n => ((a, b, c, d) -> n) -> (a, b, c, d) -> n Source # |
class Factorial m => StableFactorial m Source #
A subclass of Factorial
whose instances satisfy the following additional laws:
factors (a <> b) == factors a <> factors b factors . reverse == List.reverse . factors primeSuffix s == primePrefix (reverse s)