Safe Haskell | Trustworthy |
---|---|
Language | Haskell2010 |
Data.Semigroup.Factorial
Description
This module defines the Semigroup
=> Factorial
=> StableFactorial
classes and some of their instances.
Classes
class Semigroup m => Factorial m where #
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 #
The prime prefix; primePrefix mempty == mempty
for monoids.
primeSuffix :: m -> m #
The prime suffix; primeSuffix mempty == mempty
for monoids.
foldl :: (a -> m -> a) -> a -> m -> a #
foldl' :: (a -> m -> a) -> a -> m -> a #
foldr :: (m -> a -> a) -> a -> m -> a #
foldMap :: Monoid n => (m -> n) -> m -> n #
Generalizes foldMap
from Data.Foldable, except the function arguments are prime factors
rather
than the structure elements.
Instances
class Factorial m => StableFactorial m #
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)
Instances
Monad function equivalents
mapM_ :: (Factorial a, Applicative m) => (a -> m b) -> a -> m () #
A mapM_
equivalent.