HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulemonoid-subclasses-1.2.5.1Haskell2010

Data.Semigroup.Factorial

This module defines the Semigroup => Factorial => StableFactorial classes and some of their instances.

  • 2 classes
  • 2 values

Classes

2 declarations
classclass 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:

Property
factors (Product 12) == [Product 2, Product 2, Product 3]

Factors of a list are not its elements but all its single-item sublists:

Property
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

Instances26Factorial, …
classclass 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)
Instances16StableFactorial, …

Monad function equivalents

2 declarations