Class of monoids that can be split into irreducible (i.e., atomic or prime) factors in a unique way. Note that mempty is not considered a factor. 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 in addition to those of Factorial:
null == List.null . factors
factors == unfoldr splitPrimePrefix == List.reverse . unfoldr (fmap swap . splitPrimeSuffix)
reverse == mconcat . List.reverse . factors
primePrefix == maybe mempty fst . splitPrimePrefix
primeSuffix == maybe mempty snd . splitPrimeSuffix
inits == List.map mconcat . List.inits . factors
tails == List.map mconcat . List.tails . factors
span p m == (mconcat l, mconcat r) where (l, r) = List.span p (factors m)
List.all (List.all (not . pred) . factors) . split pred
mconcat . intersperse prime . split (== prime) == id
splitAt i m == (mconcat l, mconcat r) where (l, r) = List.splitAt i (factors m)
spanMaybe () (const $ bool Nothing (Maybe ()) . p) m == (takeWhile p m, dropWhile p m, ())
spanMaybe s0 (\s m-> Just $ f s m) m0 == (m0, mempty, foldl f s0 m0)
let (prefix, suffix, s') = spanMaybe s f m
foldMaybe = foldl g (Just s)
g s m = s >>= flip f m
in all ((Nothing ==) . foldMaybe) (inits prefix)
&& prefix == last (filter (isJust . foldMaybe) $ inits m)
&& Just s' == foldMaybe prefix
&& m == prefix <> suffixA minimal instance definition should implement splitPrimePrefix for performance reasons, and other methods where beneficial.
Methods
splitPrimePrefix :: m -> Maybe (m, m)splitPrimeSuffix :: m -> Maybe (m, m)inits :: m -> [m]Returns the list of all prefixes of the argument, mempty first.
tails :: m -> [m]Returns the list of all suffixes of the argument, mempty last.
span :: (m -> Bool) -> m -> (m, m)break :: (m -> Bool) -> m -> (m, m)split :: (m -> Bool) -> m -> [m]Splits the monoid into components delimited by prime separators satisfying the given predicate. The primes satisfying the predicate are not a part of the result.
takeWhile :: (m -> Bool) -> m -> mdropWhile :: (m -> Bool) -> m -> mspanMaybe :: s -> (s -> m -> Maybe s) -> m -> (m, m, s)spanMaybe' :: s -> (s -> m -> Maybe s) -> m -> (m, m, s)Strict version of spanMaybe.
splitAt :: Int -> m -> (m, m)drop :: Int -> m -> mtake :: Int -> m -> m
Instances26FactorialMonoid, …
FactorialMonoid ByteStringDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid ByteStringDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid IntSetDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid ByteStringUTF8Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.ByteString.UTF8FactorialMonoid TextDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid TextDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid ()Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialIntegral a => FactorialMonoid (Product a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialOrd a => FactorialMonoid (Set a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid (IntMap a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid (Seq a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid (Vector a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid [x]Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid a => FactorialMonoid (Dual a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.FactorialFactorialMonoid a => FactorialMonoid (Maybe a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Factorial(Integral a, Eq a) => FactorialMonoid (Sum a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Factorial(FactorialMonoid a, PositiveMonoid a) => FactorialMonoid (Concat a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.Concat(StableFactorial a, FactorialMonoid a) => FactorialMonoid (Measured a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.Measured(StableFactorial m, FactorialMonoid m) => FactorialMonoid (OffsetPositioned m)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.Positioned(StableFactorial m, FactorialMonoid m) => FactorialMonoid (Shadowed m)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.PrefixMemory(StableFactorial m, TextualMonoid m) => FactorialMonoid (LinePositioned m)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.PositionedOrd k => FactorialMonoid (Map k v)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Factorial(FactorialMonoid a, FactorialMonoid b) => FactorialMonoid (Stateful a b)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Instances.Stateful(FactorialMonoid a, FactorialMonoid b) => FactorialMonoid (a, b)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Factorial(FactorialMonoid a, FactorialMonoid b, FactorialMonoid c) => FactorialMonoid (a, b, c)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Factorial(FactorialMonoid a, FactorialMonoid b, FactorialMonoid c, FactorialMonoid d) => FactorialMonoid (a, b, c, d)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.Factorial