[auto ekmett@gmail.com**20090403030455] { addfile ./doc/html/monoids/Data-Generator-Combinators.html addfile ./doc/html/monoids/Data-Generator-Compressive-LZ78.html addfile ./doc/html/monoids/Data-Generator-Compressive-RLE.html addfile ./doc/html/monoids/Data-Generator-Free.html addfile ./doc/html/monoids/Data-Generator.html addfile ./doc/html/monoids/src/Data-Generator-Combinators.html addfile ./doc/html/monoids/src/Data-Generator-Compressive-LZ78.html addfile ./doc/html/monoids/src/Data-Generator-Compressive-RLE.html addfile ./doc/html/monoids/src/Data-Generator-Free.html addfile ./doc/html/monoids/src/Data-Generator.html hunk ./doc/html/monoids/Data-Field-VectorSpace.html 22 ->monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce framework + +Data.Generator.Combinators
 monoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkSource codeContentsIndex
Data.Generator.Combinators
Portabilitynon-portable (type families, MPTCs)
Stabilityexperimental
Maintainerekmett@gmail.com
Contents
Monadic Reduction +
Applicative Reduction +
Logical Reduction +
Monoidal Reduction +
List-Like Reduction +
Description

Utilities for working with Monoids that conflict with names from the Prelude, + Data.Foldable, Control.Monad or elsewhere. Intended to be imported qualified. +

 import Data.Generator.Combinators as Generator
+
Synopsis
module Data.Generator
mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()
forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()
msum :: (Generator c, MonadPlus m, m a ~ Elem c) => c -> m a
traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()
for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()
asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f a
and :: (Generator c, Elem c ~ Bool) => c -> Bool
or :: (Generator c, Elem c ~ Bool) => c -> Bool
any :: Generator c => (Elem c -> Bool) -> c -> Bool
all :: Generator c => (Elem c -> Bool) -> c -> Bool
foldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m
fold :: (Monoid m, Generator c, Elem c ~ m) => c -> m
toList :: Generator c => c -> [Elem c]
concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]
elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool
filter :: (Generator c, Reducer (Elem c) m) => (Elem c -> Bool) -> c -> m
filterWith :: (Generator c, Reducer (Elem c) m) => (m -> n) -> (Elem c -> Bool) -> c -> n
find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)
sum :: (Generator c, Num (Elem c)) => c -> Elem c
product :: (Generator c, Num (Elem c)) => c -> Elem c
notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool
Documentation
module Data.Generator
Monadic Reduction +
mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()Source

Efficiently mapReduce a Generator using the Action monoid. A specialized version of its namesake from Data.Foldable and Control.Monad +

+    mapReduceWith getAction
+
forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()Source

Convenience function as found in Data.Foldable and Control.Monad +

+     flip mapM_
+
msum :: (Generator c, MonadPlus m, m a ~ Elem c) => c -> m aSource

The sum of a collection of actions, generalizing concat +

+     reduceWith getMonadSum
+
Applicative Reduction +
traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()Source

Efficiently mapReduce a Generator using the Traversal monoid. A specialized version of its namesake from Data.Foldable +

+     mapReduce getTraversal
+
for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()Source

Convenience function as found in Data.Foldable +

+     flip traverse_
+
asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f aSource

The sum of a collection of actions, generalizing concat +

+    reduceWith getAlt
+
Logical Reduction +
and :: (Generator c, Elem c ~ Bool) => c -> BoolSource

Efficiently reduce a Generator that contains values of type Bool +

+     reduceWith getAll
+
or :: (Generator c, Elem c ~ Bool) => c -> BoolSource

Efficiently reduce a Generator that contains values of type Bool +

+     reduceWith getAny
+
any :: Generator c => (Elem c -> Bool) -> c -> BoolSource

Efficiently mapReduce any Generator checking to see if any of its values match the supplied predicate +

+     mapReduceWith getAny
+
all :: Generator c => (Elem c -> Bool) -> c -> BoolSource

Efficiently mapReduce any Generator checking to see if all of its values match the supplied predicate +

+     mapReduceWith getAll
+
Monoidal Reduction +
foldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> mSource

Efficiently mapReduce a Generator using the Self monoid. A specialized version of its namesake from Data.Foldable +

+     mapReduceWith getSelf
+
fold :: (Monoid m, Generator c, Elem c ~ m) => c -> mSource

Efficiently reduce a Generator using the Self monoid. A specialized version of its namesake from Data.Foldable +

+     reduceWith getSelf
+
toList :: Generator c => c -> [Elem c]Source
Convert any Generator to a list of its contents. Specialization of reduce +
List-Like Reduction +
concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]Source
Type specialization of foldMap above +
elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> BoolSource
Check to see if any member of the Generator matches the supplied value +
filter :: (Generator c, Reducer (Elem c) m) => (Elem c -> Bool) -> c -> mSource
Efficiently mapReduce a subset of the elements in a Generator +
filterWith :: (Generator c, Reducer (Elem c) m) => (m -> n) -> (Elem c -> Bool) -> c -> nSource
Allows idiomatic specialization of filter by proving a function that will be used to transform the output +
find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)Source

A specialization of filter using the First Monoid, analogous to Data.List.find +

+     filterWith getFirst
+
sum :: (Generator c, Num (Elem c)) => c -> Elem cSource

Efficiently sum over the members of any Generator +

+     reduceWith getSum
+
product :: (Generator c, Num (Elem c)) => c -> Elem cSource

Efficiently take the product of every member of a Generator +

+     reduceWith getProduct
+
notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> BoolSource
Check to make sure that the supplied value is not a member of the Generator +
Produced by Haddock version 2.3.0
hunk ./doc/html/monoids/Data-Generator-Compressive-LZ78.html 1 + + +Data.Generator.Compressive.LZ78
 monoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkSource codeContentsIndex
Data.Generator.Compressive.LZ78
Portabilityportable
Stabilityexperimental
Maintainerekmett@gmail.com
Contents
Lempel-Ziv 78 +
Decoding +
Encoding +
QuickCheck Properties +
Description
Compression algorithms are all about exploiting redundancy. When applying + an expensive Reducer to a redundant source, it may be better to + extract the structural redundancy that is present. LZ78 is a compression + algorithm that does so, without requiring the dictionary to be populated + with all of the possible values of a data type unlike its later + refinement LZW, and which has fewer comparison reqirements during encoding + than its earlier counterpart LZ77. Since we aren't storing these as a + bitstream the LZSS refinement of only encoding pointers once you cross + the break-even point is a net loss. +
Synopsis
module Data.Generator
data LZ78 a
decode :: LZ78 a -> [a]
encode :: Ord a => [a] -> LZ78 a
encodeEq :: Eq a => [a] -> LZ78 a
prop_decode_encode :: Ord a => [a] -> Bool
prop_decode_encodeEq :: Eq a => [a] -> Bool
Documentation
module Data.Generator
Lempel-Ziv 78 +
data LZ78 a Source
show/hide Instances
Decoding +
decode :: LZ78 a -> [a]Source
a type-constrained reduce operation +
Encoding +
encode :: Ord a => [a] -> LZ78 aSource
contruct an LZ78-compressed Generator using a Map internally, requires an instance of Ord. +
encodeEq :: Eq a => [a] -> LZ78 aSource
contruct an LZ78-compressed Generator using a list internally, requires an instance of Eq. +
QuickCheck Properties +
prop_decode_encode :: Ord a => [a] -> BoolSource
QuickCheck property: decode . encode = id +
prop_decode_encodeEq :: Eq a => [a] -> BoolSource
QuickCheck property: decode . encodeEq = id +
Produced by Haddock version 2.3.0
hunk ./doc/html/monoids/Data-Generator-Compressive-RLE.html 1 + + +Data.Generator.Compressive.RLE
 monoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkSource codeContentsIndex
Data.Generator.Compressive.RLE
Portabilityportable
Stabilityexperimental
Maintainerekmett@gmail.com
Description
Compression algorithms are all about exploiting redundancy. When applying + an expensive Reducer to a redundant source, it may be better to + extract the structural redundancy that is present. Run length encoding + can do so for long runs of identical inputs. +
Synopsis
module Data.Generator
newtype RLE f a = RLE {
getRLE :: f (Run a)
}
data Run a = Run a !!Int
decode :: Foldable f => RLE f a -> [a]
encode :: (Generator c, Eq (Elem c)) => c -> RLE Seq (Elem c)
encodeList :: Eq a => [a] -> RLE [] a
prop_decode_encode :: (Generator c, Eq (Elem c)) => c -> Bool
prop_decode_encodeList :: Eq a => [a] -> Bool
Documentation
module Data.Generator
newtype RLE f a Source
A Generator which supports efficient mapReduce operations over run-length encoded data. +
Constructors
RLE
getRLE :: f (Run a)
show/hide Instances
data Run a Source
A single run with a strict length. +
Constructors
Run a !!Int
show/hide Instances
Functor Run
Pointed Run
decode :: Foldable f => RLE f a -> [a]Source
encode :: (Generator c, Eq (Elem c)) => c -> RLE Seq (Elem c)Source
encodeList :: Eq a => [a] -> RLE [] aSource
naive left to right encoder, which can handle infinite data +
prop_decode_encode :: (Generator c, Eq (Elem c)) => c -> BoolSource
prop_decode_encodeList :: Eq a => [a] -> BoolSource
QuickCheck property: decode . encode = id +
Produced by Haddock version 2.3.0
hunk ./doc/html/monoids/Data-Generator-Free.html 1 + + +Data.Generator.Free
 monoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkSource codeContentsIndex
Data.Generator.Free
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerekmett@gmail.com
Description
Documentation
module Data.Generator
module Data.Monoid.Reducer
data Free a Source
Constructors
forall c . (Generator c, Elem c ~ a) => AnyGenerator c
show/hide Instances
Produced by Haddock version 2.3.0
hunk ./doc/html/monoids/Data-Generator.html 1 + + +Data.Generator
 monoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkSource codeContentsIndex
Data.Generator
Portabilityportable
Stabilityexperimental
Maintainerekmett@gmail.com
Contents
Generators +
Generator Transformers +
Combinators +
Description

A Generator c is a possibly-specialized container, which contains values of + type Elem c, and which knows how to efficiently apply a Reducer to extract + an answer. +

Since a Generator is not polymorphic in its contents, it is more specialized + than Data.Foldable.Foldable, and a Reducer may supply efficient left-to-right + and right-to-left reduction strategies that a Generator may avail itself of. +

Synopsis
module Data.Monoid.Reducer
class Generator c where
type Elem c :: *
mapReduce :: Reducer e m => (Elem c -> e) -> c -> m
mapTo :: Reducer e m => (Elem c -> e) -> m -> c -> m
mapFrom :: Reducer e m => (Elem c -> e) -> c -> m -> m
mapReduce :: (Generator c, Reducer e m) => (Elem c -> e) -> c -> m
mapTo :: (Generator c, Reducer e m) => (Elem c -> e) -> m -> c -> m
mapFrom :: (Generator c, Reducer e m) => (Elem c -> e) -> c -> m -> m
newtype Keys c = Keys {
getKeys :: c
}
newtype Values c = Values {
getValues :: c
}
newtype Char8 c = Char8 {
getChar8 :: c
}
reduce :: (Generator c, Reducer (Elem c) m) => c -> m
mapReduceWith :: (Generator c, Reducer e m) => (m -> n) -> (Elem c -> e) -> c -> n
reduceWith :: (Generator c, Reducer (Elem c) m) => (m -> n) -> c -> n
Documentation
module Data.Monoid.Reducer
Generators +
class Generator c whereSource
minimal definition mapReduce or mapTo +
Associated Types
type Elem c :: *Source
Methods
mapReduce :: Reducer e m => (Elem c -> e) -> c -> mSource
mapTo :: Reducer e m => (Elem c -> e) -> m -> c -> mSource
mapFrom :: Reducer e m => (Elem c -> e) -> c -> m -> mSource
show/hide Instances
mapReduce :: (Generator c, Reducer e m) => (Elem c -> e) -> c -> mSource
mapTo :: (Generator c, Reducer e m) => (Elem c -> e) -> m -> c -> mSource
mapFrom :: (Generator c, Reducer e m) => (Elem c -> e) -> c -> m -> mSource
Generator Transformers +
newtype Keys c Source
a Generator transformer that asks only for the keys of an indexed container +
Constructors
Keys
getKeys :: c
show/hide Instances
newtype Values c Source
a Generator transformer that asks only for the values contained in an indexed container +
Constructors
Values
getValues :: c
show/hide Instances
newtype Char8 c Source
a Generator transformer that treats Word8 as Char + This lets you use a ByteString as a Char source without going through a Monoid transformer like UTF8 +
Constructors
Char8
getChar8 :: c
show/hide Instances
Combinators +
reduce :: (Generator c, Reducer (Elem c) m) => c -> mSource
Apply a Reducer directly to the elements of a Generator +
mapReduceWith :: (Generator c, Reducer e m) => (m -> n) -> (Elem c -> e) -> c -> nSource
reduceWith :: (Generator c, Reducer (Elem c) m) => (m -> n) -> c -> nSource
Produced by Haddock version 2.3.0
hunk ./doc/html/monoids/Data-Group-Combinators.html 22 ->monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkMonadic Reduction -
Applicative Reduction -
Logical Reduction -
Monoidal Reduction -
List-Like Reduction -
import Data.Group.Combinators as Monoid +> import Data.Monoid.Combinators as Monoid hunk ./doc/html/monoids/Data-Monoid-Combinators.html 147 ->module Data.Monoid.GeneratormapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()msum :: (Generator c, MonadPlus m, m a ~ Elem c) => c -> m atraverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f aand :: (Generator c, Elem c ~ Bool) => c -> Boolor :: (Generator c, Elem c ~ Bool) => c -> Boolany :: Generator c => (Elem c -> Bool) -> c -> Boolall :: Generator c => (Elem c -> Bool) -> c -> BoolfoldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> mfold :: (Monoid m, Generator c, Elem c ~ m) => c -> mtoList :: Generator c => c -> [Elem c]concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Boolfilter :: (Generator c, Reducer (Elem c) m) => (Elem c -> Bool) -> c -> mfilterWith :: (Generator c, Reducer (Elem c) m) => (m -> n) -> (Elem c -> Bool) -> c -> nfind :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)sum :: (Generator c, Num (Elem c)) => c -> Elem cproduct :: (Generator c, Num (Elem c)) => c -> Elem cnotElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> BoolDocumentationmodule Data.Monoid.GeneratorMonadic Reduction -
mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()Source

Efficiently mapReduce a Generator using the Action monoid. A specialized version of its namesake from Data.Foldable and Control.Monad -

-    mapReduceWith getAction
-
forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()Source

Convenience function as found in Data.Foldable and Control.Monad -

-     flip mapM_
-
msum :: (Generator c, MonadPlus m, m a ~ Elem c) => c -> m aSource

The sum of a collection of actions, generalizing concat -

-     reduceWith getMonadSum
-
Applicative Reduction -
traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()Source

Efficiently mapReduce a Generator using the Traversal monoid. A specialized version of its namesake from Data.Foldable -

-     mapReduce getTraversal
-
for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()Source

Convenience function as found in Data.Foldable -

-     flip traverse_
-
asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f aSource

The sum of a collection of actions, generalizing concat -

-    reduceWith getAlt
-
Logical Reduction -
and :: (Generator c, Elem c ~ Bool) => c -> BoolSource

Efficiently reduce a Generator that contains values of type Bool -

-     reduceWith getAll
-
or :: (Generator c, Elem c ~ Bool) => c -> BoolSource

Efficiently reduce a Generator that contains values of type Bool -

-     reduceWith getAny
-
any :: Generator c => (Elem c -> Bool) -> c -> BoolSource

Efficiently mapReduce any Generator checking to see if any of its values match the supplied predicate -

-     mapReduceWith getAny
-
all :: Generator c => (Elem c -> Bool) -> c -> BoolSource

Efficiently mapReduce any Generator checking to see if all of its values match the supplied predicate -

-     mapReduceWith getAll
-
Monoidal Reduction -
foldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> mSource

Efficiently mapReduce a Generator using the Self monoid. A specialized version of its namesake from Data.Foldable -

-     mapReduceWith getSelf
-
fold :: (Monoid m, Generator c, Elem c ~ m) => c -> mSource

Efficiently reduce a Generator using the Self monoid. A specialized version of its namesake from Data.Foldable -

-     reduceWith getSelf
-
toList :: Generator c => c -> [Elem c]Source
Convert any Generator to a list of its contents. Specialization of reduce -List-Like Reduction -
concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]Source
Type specialization of foldMap above -
elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> BoolSource
Check to see if any member of the Generator matches the supplied value -
filter :: (Generator c, Reducer (Elem c) m) => (Elem c -> Bool) -> c -> mSource
Efficiently mapReduce a subset of the elements in a Generator -
filterWith :: (Generator c, Reducer (Elem c) m) => (m -> n) -> (Elem c -> Bool) -> c -> nSource
Allows idiomatic specialization of filter by proving a function that will be used to transform the output -
find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)Source

A specialization of filter using the First Monoid, analogous to Data.List.find -

-     filterWith getFirst
-
sum :: (Generator c, Num (Elem c)) => c -> Elem cSource

Efficiently sum over the members of any Generator -

-     reduceWith getSum
-
product :: (Generator c, Num (Elem c)) => c -> Elem cSource

Efficiently take the product of every member of a Generator -

-     reduceWith getProduct
-
notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> BoolSource
Check to make sure that the supplied value is not a member of the Generator -monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce framework :: ( :: ( c, c, :: ( :: ( c, c, :: ( :: ( c, c, :: ( :: ( c, c, monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce framework a ( a (Eq a => Reducer a (RLE Seq a)Eq a => Reducer a (RLE Seq a)monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkMultiplicative Arbitrary RightSemiNearRing CoArbitrary LeftSemiNearRingMultiplicativeSemiRingRightSemiNearRingArbitrary LeftSemiNearRing CoArbitrary SemiRing monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkArbitrary a => Arbitrary (FromNum a)CoArbitrary a => CoArbitrary (FromNum a) a)Arbitrary a => Arbitrary (FromNum a)CoArbitrary a => CoArbitrary (FromNummonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce framework(Arbitrary r, Arbitrary m) => Arbitrary (D s r m)(CoArbitrary r, CoArbitrary m) => CoArbitrary (D s r m) s r m)(Arbitrary r, Arbitrary m) => Arbitrary (D s r m)(CoArbitrary r, CoArbitrary m) => CoArbitrary (Dmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce framework ( ( ( (Eq a => LeftModule Natural (RLE Seq a)Eq a => LeftModule Natural (RLE Seq a)Eq a => LeftModule Natural (RLE Seq a)Eq a => LeftModule Natural (RLE Seq a) ( ( ( (Eq a => RightModule Natural (RLE Seq a)Eq a => RightModule Natural (RLE Seq a)Eq a => RightModule Natural (RLE Seq a)Eq a => RightModule Natural (RLE Seq a) ( ( ( (Eq a => Module Natural (RLE Seq a)Eq a => Module Natural (RLE Seq a)Eq a => Module Natural (RLE Seq a)Eq a => Module Natural (RLE Seq a)monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce framework ( ( ( ( ( (Eq a => Module Natural (RLE Seq a)Eq a => ModuleMonoid m => RightModule (RLE Seq a) (a -> m)Monoid m => Eq a => (a -> m) (RLE Seq a)Eq a => RightModuleMonoid m => LeftModule (RLE Seq a) (a -> m)Monoid m => Eq a => (a -> m) (RLE Seq a)Eq a => LeftModule Natural (RLE Seq a)monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkArbitrary a => Arbitrary (Order a)CoArbitrary a => CoArbitrary (Order a)Arbitrary a => Arbitrary (Order a)CoArbitrary a => CoArbitrary (Order a)Arbitrary a => Arbitrary (Priority a)CoArbitrary a => CoArbitrary (Priority a) a)Arbitrary a => Arbitrary (Priority a)CoArbitrary a => CoArbitrary (Prioritymonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkArbitrary a => Arbitrary (Tropical a)CoArbitrary a => CoArbitrary (Tropical a) a)Arbitrary a => Arbitrary (Tropical a)CoArbitrary a => CoArbitrary (Tropicalmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce framework (Index)monoids-0.1.25: Monoids, specialized containers and a general map/reduce framework (Index)monoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Generator.FreeData.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.CombinatorsData.Generator.Combinators, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator.LZ78Data.Generator.Compressive.LZ78Data.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Generator.LZ78Data.Generator.Compressive.LZ78Data.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Generator.LZ78Data.Generator.Compressive.LZ78Data.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.Combinators, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Generator.FreeData.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpace, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Generator.LZ78Data.Generator.Compressive.LZ78Data.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Monoid.Ord, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Monoid.Ord, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Monoid.Ord, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Monoid.Ord, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Monoid.Ord, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Monoid.Ord, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.Generator.LZ78Data.Generator.Compressive.LZ78Data.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Generator.LZ78Data.Generator.Compressive.LZ78Data.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Group.CombinatorsData.Monoid.CombinatorsData.Monoid.CombinatorsData.Group.Combinators, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.Free, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Ord, Data.Ring.Semi.Tropical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Ord, Data.Ring.Semi.Tropical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.Free, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Group.CombinatorsData.Monoid.CombinatorsData.Monoid.CombinatorsData.Group.Combinators, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Generator.RLEData.Generator.Compressive.RLEData.Monoid.Generator.RLEData.Generator.Compressive.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.Reducer, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Additive, Data.Monoid.Additive.Sugar, Data.Monoid.Multiplicative, Data.Monoid.Multiplicative.Sugar, Data.Ring.Semi.Near, Data.Ring.Semi, Data.Ring.Semi.Ord, Data.Ring.Semi.Tropical, Data.Ring.Sugar, Data.Group, Data.Group.Combinators, Data.Group.Multiplicative, Data.Group.Sugar, Data.Group.Multiplicative.Sugar, Data.Ring, Data.Ring.Boolean, Data.Ring.FromNum, Data.Ring.ModularArithmetic, Data.Ring.Module, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.Free, Data.Ring.Semi.Natural, Data.Ring.Algebra, Data.Ring.Module.AutomaticDifferentiation, Data.Field, Data.Field.VectorSpaceData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.CombinatorsData.Monoid.CombinatorsData.Generator.Combinators, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Monoid.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Monoid.Generator.LZ78, Data.Monoid.FromString, Data.Monoid.Categorical, Data.Monoid.Ord, Data.Ring.Semi.Tropical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLE, Data.Monoid.Reducer.Char, Data.Monoid.Lexical.UTF8.Decoder, Data.Monoid.Reducer.With, Data.Monoid.Union, Data.Generator, Data.Monoid.Lexical.SourcePosition, Data.Monoid.Lexical.Words, Data.Monoid.Self, Data.Generator.Compressive.LZ78, Data.Monoid.FromString, Data.Generator.Compressive.RLE, Data.Monoid.Categorical, Data.Monoid.Ord, Data.Ring.Semi.Tropical, Data.Monoid.Applicative, Data.Monoid.Monad, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.FreeData.Monoid.Generator, Data.Monoid.Generator.LZ78, Data.Monoid.Combinators, Data.Monoid.Generator.Free, Data.Monoid.Generator.RLEData.Generator, Data.Generator.Compressive.LZ78, Data.Generator.Compressive.RLE, Data.Generator.Combinators, Data.Generator.Freemonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.24: Monoids, specialized containers and a general map/reduce frameworkmonoids-0.1.25: Monoids, specialized containers and a general map/reduce frameworkData.GroupData.GeneratorData.Group.CombinatorsData.Generator.CombinatorsData.Group.MultiplicativeCompressiveData.Group.Multiplicative.SugarData.Generator.Compressive.LZ78Data.Generator.Compressive.RLEData.Group.SugarData.Generator.FreeMonoidData.GroupData.Group.CombinatorsData.Monoid.AdditiveData.Group.MultiplicativeData.Monoid.Additive.SugarData.Group.Multiplicative.SugarData.Monoid.ApplicativeData.Group.SugarData.Monoid.Categoricalshow/hideMonoidData.Monoid.Combinatorsshow/hideshow/hide
show/hideData.Monoid.AdditiveData.Monoid.FromString
Data.Monoid.Additive.Sugar
show/hideData.Monoid.GeneratorData.Monoid.Applicative
Data.Monoid.Generator.FreeData.Monoid.CategoricalData.Monoid.Generator.LZ78Data.Monoid.CombinatorsData.Monoid.Generator.RLEData.Monoid.FromString
show/hideshow/hide
show/hideshow/hide
show/hideshow/hide
show/hideshow/hide
show/hideshow/hide
show/hideshow/hide
+ + + +Data/Generator/Combinators.hs + + + +
{-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Generator.Combinators
+-- Copyright   :  (c) Edward Kmett 2009
+-- License     :  BSD-style
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  non-portable (type families, MPTCs)
+--
+-- Utilities for working with Monoids that conflict with names from the "Prelude",
+-- "Data.Foldable", "Control.Monad" or elsewhere. Intended to be imported qualified.
+--
+-- > import Data.Generator.Combinators as Generator
+--
+-----------------------------------------------------------------------------
+
+module Data.Generator.Combinators
+    ( module Data.Generator
+    -- * Monadic Reduction
+    , mapM_
+    , forM_
+    , msum
+    -- * Applicative Reduction
+    , traverse_
+    , for_
+    , asum
+    -- * Logical Reduction
+    , and
+    , or
+    , any
+    , all
+    -- * Monoidal Reduction
+    , foldMap
+    , fold
+    , toList 
+    -- * List-Like Reduction
+    , concatMap
+    , elem
+    , filter
+    , filterWith
+    , find
+    , sum
+    , product
+    , notElem
+    ) where
+
+import Prelude hiding (mapM_, any, elem, filter, concatMap, and, or, all, sum, product, notElem, replicate, cycle, repeat)
+import Control.Applicative
+import Control.Monad (MonadPlus)
+import Data.Generator
+import Data.Monoid.Applicative
+import Data.Monoid.Self
+import Data.Monoid.Monad
+
+-- | Efficiently 'mapReduce' a 'Generator' using the 'Traversal' monoid. A specialized version of its namesake from "Data.Foldable"
+--
+-- @
+--     'mapReduce' 'getTraversal'
+-- @
+traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()
+traverse_ = mapReduceWith getTraversal
+{-# INLINE traverse_ #-}
+    
+-- | Convenience function as found in "Data.Foldable"
+--
+-- @
+--     'flip' 'traverse_'
+-- @
+for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()
+for_ = flip traverse_
+{-# INLINE for_ #-}
+
+-- | The sum of a collection of actions, generalizing 'concat'
+--
+-- @
+--    'reduceWith' 'getAlt'
+-- @ 
+asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f a
+asum = reduceWith getAlt
+{-# INLINE asum #-}
+
+-- | Efficiently 'mapReduce' a 'Generator' using the 'Action' monoid. A specialized version of its namesake from "Data.Foldable" and "Control.Monad"
+-- 
+-- @
+--    'mapReduceWith' 'getAction'
+-- @ 
+mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()
+mapM_ = mapReduceWith getAction
+{-# INLINE mapM_ #-}
+
+-- | Convenience function as found in "Data.Foldable" and "Control.Monad"
+--
+-- @
+--     'flip' 'mapM_'
+-- @
+forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()
+forM_ = flip mapM_
+{-# INLINE forM_ #-}
+
+-- | The sum of a collection of actions, generalizing 'concat'
+--
+-- @
+--     'reduceWith' 'getMonadSum'
+-- @
+msum :: (Generator c, MonadPlus m, m a ~ Elem c) => c -> m a
+msum = reduceWith getMonadSum
+{-# INLINE msum #-}
+
+-- | Efficiently 'mapReduce' a 'Generator' using the 'Self' monoid. A specialized version of its namesake from "Data.Foldable"
+--
+-- @
+--     'mapReduceWith' 'getSelf'
+-- @
+foldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m
+foldMap = mapReduceWith getSelf
+{-# INLINE foldMap #-}
+
+-- | Type specialization of "foldMap" above
+concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]
+concatMap = foldMap
+{-# INLINE concatMap #-}
+
+-- | Efficiently 'reduce' a 'Generator' using the 'Self' monoid. A specialized version of its namesake from "Data.Foldable"
+--
+-- @
+--     'reduceWith' 'getSelf'
+-- @
+fold :: (Monoid m, Generator c, Elem c ~ m) => c -> m
+fold = reduceWith getSelf
+{-# INLINE fold #-}
+
+-- | Convert any 'Generator' to a list of its contents. Specialization of 'reduce'
+toList :: Generator c => c -> [Elem c]
+toList = reduce
+{-# INLINE toList #-}
+
+-- | Efficiently 'reduce' a 'Generator' that contains values of type 'Bool'
+--
+-- @
+--     'reduceWith' 'getAll'
+-- @
+and :: (Generator c, Elem c ~ Bool) => c -> Bool
+and = reduceWith getAll
+{-# INLINE and #-}
+
+-- | Efficiently 'reduce' a 'Generator' that contains values of type 'Bool'
+--
+-- @
+--     'reduceWith' 'getAny'
+-- @
+or :: (Generator c, Elem c ~ Bool) => c -> Bool
+or = reduceWith getAny
+{-# INLINE or #-}
+
+-- | Efficiently 'mapReduce' any 'Generator' checking to see if any of its values match the supplied predicate
+--
+-- @
+--     'mapReduceWith' 'getAny'
+-- @
+any :: Generator c => (Elem c -> Bool) -> c -> Bool
+any = mapReduceWith getAny
+{-# INLINE any #-}
+
+-- | Efficiently 'mapReduce' any 'Generator' checking to see if all of its values match the supplied predicate
+--
+-- @
+--     'mapReduceWith' 'getAll'
+-- @
+all :: Generator c => (Elem c -> Bool) -> c -> Bool
+all = mapReduceWith getAll
+{-# INLINE all #-}
+
+-- | Efficiently sum over the members of any 'Generator'
+--
+-- @
+--     'reduceWith' 'getSum'
+-- @
+sum :: (Generator c, Num (Elem c)) => c -> Elem c
+sum = reduceWith getSum
+{-# INLINE sum #-}
+
+-- | Efficiently take the product of every member of a 'Generator'
+--
+-- @
+--     'reduceWith' 'getProduct'
+-- @
+product :: (Generator c, Num (Elem c)) => c -> Elem c
+product = reduceWith getProduct
+{-# INLINE product #-}
+
+-- | Check to see if 'any' member of the 'Generator' matches the supplied value
+elem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool
+elem = any . (==)
+{-# INLINE elem #-}
+
+-- | Check to make sure that the supplied value is not a member of the 'Generator'
+notElem :: (Generator c, Eq (Elem c)) => Elem c -> c -> Bool
+notElem x = not . elem x
+{-# INLINE notElem #-}
+
+-- | Efficiently 'mapReduce' a subset of the elements in a 'Generator'
+filter :: (Generator c, Elem c `Reducer` m) => (Elem c -> Bool) -> c -> m
+filter p = foldMap f where
+    f x | p x = unit x
+        | otherwise = mempty
+{-# INLINE filter #-}
+
+-- | Allows idiomatic specialization of filter by proving a function that will be used to transform the output
+filterWith :: (Generator c, Elem c `Reducer` m) => (m -> n) -> (Elem c -> Bool) -> c -> n 
+filterWith f p = f . filter p
+{-# INLINE filterWith #-}
+
+-- | A specialization of 'filter' using the 'First' 'Monoid', analogous to 'Data.List.find'
+--
+-- @
+--     'filterWith' 'getFirst'
+-- @
+find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)
+find = filterWith getFirst
+{-# INLINE find #-}
+
+
+ hunk ./doc/html/monoids/src/Data-Generator-Compressive-LZ78.html 1 + + + + +Data/Generator/Compressive/LZ78.hs + + + +
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Generator.Compressive.LZ78
+-- Copyright   :  (c) Edward Kmett 2009
+-- License     :  BSD-style
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- Compression algorithms are all about exploiting redundancy. When applying
+-- an expensive 'Reducer' to a redundant source, it may be better to 
+-- extract the structural redundancy that is present. 'LZ78' is a compression
+-- algorithm that does so, without requiring the dictionary to be populated
+-- with all of the possible values of a data type unlike its later 
+-- refinement LZW, and which has fewer comparison reqirements during encoding
+-- than its earlier counterpart LZ77. Since we aren't storing these as a 
+-- bitstream the LZSS refinement of only encoding pointers once you cross
+-- the break-even point is a net loss. 
+-----------------------------------------------------------------------------
+
+
+module Data.Generator.Compressive.LZ78 
+    ( module Data.Generator
+    -- * Lempel-Ziv 78 
+    , LZ78
+    -- * Decoding
+    , decode
+    -- * Encoding
+    , encode
+    , encodeEq
+    -- * QuickCheck Properties
+    , prop_decode_encode
+    , prop_decode_encodeEq
+    ) where
+
+import qualified Data.Sequence as Seq
+import Data.Sequence (Seq,(|>))
+import qualified Data.Map as Map
+import Data.Map (Map)
+import qualified Data.List as List
+import Data.Generator
+import Data.Foldable
+import Data.Monoid.Self
+
+-- | An LZ78 compressing 'Generator', which supports efficient 'mapReduce' operations
+
+data Token a = Token a {-# UNPACK #-} !Int 
+    deriving (Eq,Ord,Show,Read)
+
+-- after using the Functor instance the encoding may no longer be minimal
+instance Functor Token where
+    fmap f (Token a n) = Token (f a) n
+
+newtype LZ78 a = LZ78 { getLZ78 :: [Token a] } 
+    deriving (Eq,Ord,Show)
+
+emptyDict :: Monoid m => Seq m
+emptyDict = Seq.singleton mempty
+
+instance Generator (LZ78 a) where
+    type Elem (LZ78 a) = a
+    mapTo f m (LZ78 xs) = mapTo' f m emptyDict xs
+
+instance Functor LZ78 where
+    fmap f = LZ78 . fmap (fmap f) . getLZ78
+
+instance Foldable LZ78 where
+    foldMap f = getSelf . mapReduce f
+    fold = getSelf . reduce
+    
+mapTo' :: (e `Reducer` m) => (a -> e) -> m -> Seq m -> [Token a] -> m
+mapTo' _ m _ [] = m
+mapTo' f m s (Token c w:ws) = m `mappend` mapTo' f v (s |> v) ws 
+    where 
+        v = Seq.index s w `mappend` unit (f c)
+
+-- | a type-constrained 'reduce' operation
+    
+decode :: LZ78 a -> [a]
+decode = reduce
+
+-- | contruct an LZ78-compressed 'Generator' using a 'Map' internally, requires an instance of Ord.
+
+encode :: Ord a => [a] -> LZ78 a
+encode = LZ78 . encode' Map.empty 1 0
+
+encode' :: Ord a => Map (Token a) Int -> Int -> Int -> [a] -> [Token a]
+encode' _ _ p [c] = [Token c p]
+encode' d f p (c:cs) = let t = Token c p in case Map.lookup t d of
+    Just p' -> encode' d f p' cs
+    Nothing -> t : encode' (Map.insert t f d) (succ f) 0 cs
+encode' _ _ _ [] = []
+
+-- | contruct an LZ78-compressed 'Generator' using a list internally, requires an instance of Eq.
+
+encodeEq :: Eq a => [a] -> LZ78 a
+encodeEq = LZ78 . encodeEq' [] 1 0
+
+encodeEq' :: Eq a => [(Token a,Int)] -> Int -> Int -> [a] -> [Token a]
+encodeEq' _ _ p [c] = [Token c p]
+encodeEq' d f p (c:cs) = let t = Token c p in case List.lookup t d of
+    Just p' -> encodeEq' d f p' cs
+    Nothing -> t : encodeEq' ((t,f):d) (succ f) 0 cs
+encodeEq' _ _ _ [] = []
+
+-- | QuickCheck property: decode . encode = id
+prop_decode_encode :: Ord a => [a] -> Bool
+prop_decode_encode xs = decode (encode xs) == xs
+
+-- | QuickCheck property: decode . encodeEq = id
+prop_decode_encodeEq :: Eq a => [a] -> Bool
+prop_decode_encodeEq xs = decode (encodeEq xs) == xs
+
+ hunk ./doc/html/monoids/src/Data-Generator-Compressive-RLE.html 1 + + + + +Data/Generator/Compressive/RLE.hs + + + +
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, TypeOperators, FlexibleInstances, FlexibleContexts #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Generator.Compressive.RLE
+-- Copyright   :  (c) Edward Kmett 2009
+-- License     :  BSD-style
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- Compression algorithms are all about exploiting redundancy. When applying
+-- an expensive 'Reducer' to a redundant source, it may be better to 
+-- extract the structural redundancy that is present. Run length encoding
+-- can do so for long runs of identical inputs.
+-----------------------------------------------------------------------------
+
+module Data.Generator.Compressive.RLE
+    ( module Data.Generator
+    , RLE(RLE, getRLE)
+    , Run(Run)
+    , decode
+    , encode
+    , encodeList
+    , prop_decode_encode
+    , prop_decode_encodeList
+    ) where
+
+import qualified Data.Sequence as Seq
+import Data.Sequence (Seq,(|>),(<|),ViewL(..),ViewR(..),(><),viewl,viewr)
+import Data.Foldable
+import Data.Generator
+import qualified Data.Monoid.Combinators as Monoid 
+import Control.Functor.Pointed
+
+-- | A single run with a strict length.
+data Run a = Run a {-# UNPACK #-} !Int
+
+instance Functor Run where
+    fmap f (Run a n) = Run (f a) n
+
+instance Pointed Run where
+    point a = Run a 1
+
+-- | A 'Generator' which supports efficient 'mapReduce' operations over run-length encoded data.
+newtype RLE f a = RLE { getRLE :: f (Run a) } 
+
+instance Functor f => Functor (RLE f) where
+    fmap f = RLE . fmap (fmap f) . getRLE
+
+instance Foldable f => Generator (RLE f a) where
+    type Elem (RLE f a) = a
+    mapReduce f = foldMap run . getRLE where
+        run (Run a n) = unit (f a) `Monoid.replicate` n
+
+decode :: Foldable f => RLE f a -> [a]
+decode = reduce
+
+-- | naive left to right encoder, which can handle infinite data
+
+encodeList :: Eq a => [a] -> RLE [] a
+encodeList [] = RLE []
+encodeList (a:as) = RLE (point a `before` as)
+
+before :: Eq a => Run a -> [a] -> [Run a]
+r           `before` []                 = [r]
+r@(Run a n) `before` (b:bs) | a == b    = Run a (n+1) `before` bs
+                            | otherwise = r : point b `before` bs
+
+-- | QuickCheck property: decode . encode = id
+prop_decode_encodeList :: Eq a => [a] -> Bool
+prop_decode_encodeList xs = decode (encode xs) == xs
+
+-- One nice property that run-length encoding has is that it can be computed monoidally as follows
+-- However, this monoid cannot be used to handle infinite sources.
+
+instance Eq a => Monoid (RLE Seq a) where
+    mempty = RLE Seq.empty
+    RLE l `mappend` RLE r = viewr l `merge` viewl r where
+        (l' :> Run a m) `merge` (Run b n :< r')
+            | a == b     = RLE ((l' |> Run a (m+n)) >< r')
+            | otherwise  = RLE (l >< r)
+        EmptyR `merge` _ = RLE r
+        _ `merge` EmptyL = RLE l
+
+instance Eq a => Reducer a (RLE Seq a) where
+    unit = RLE . Seq.singleton . point
+    cons a (RLE r) = case viewl r of
+            Run b n :< r' | a == b    -> RLE (Run a (n+1) <| r')
+                          | otherwise -> RLE (Run a 1     <| r )
+            EmptyL                    -> RLE (return (point a))
+    snoc (RLE l) a = case viewr l of
+            l' :> Run b n | a == b    -> RLE (l' |> Run b (n+1))
+                          | otherwise -> RLE (l  |> Run a 1    )
+            EmptyR                    -> RLE (return (point a))
+
+encode :: (Generator c, Eq (Elem c)) => c -> RLE Seq (Elem c)
+encode = reduce
+
+prop_decode_encode :: (Generator c, Eq (Elem c)) => c -> Bool
+prop_decode_encode xs = decode (encode xs) == reduce xs
+
+ hunk ./doc/html/monoids/src/Data-Generator-Free.html 1 + + + + +Data/Generator/Free.hs + + + +
{-# LANGUAGE UndecidableInstances , FlexibleContexts , MultiParamTypeClasses , FlexibleInstances , GeneralizedNewtypeDeriving, ExistentialQuantification, TypeFamilies #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Generator.Free
+-- Copyright   :  (c) Edward Kmett 2009
+-- License     :  BSD-style
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  non-portable (MPTCs)
+--
+-----------------------------------------------------------------------------
+
+module Data.Generator.Free
+    ( module Data.Generator
+    , module Data.Monoid.Reducer
+    , Free (AnyGenerator)
+    ) where
+
+import Control.Functor.Pointed
+import Control.Monad
+import Data.Generator
+import Data.Foldable
+import Data.Monoid.Reducer
+import Data.Monoid.Additive
+import qualified Data.Generator.Combinators as Generator
+import Data.Monoid.Self
+
+data Free a 
+    = a `Cons` Free a
+    | Free a `Snoc` a
+    | Free a `Plus` Free a
+    | Unit a
+    | Empty
+    | forall c. (Generator c, Elem c ~ a) => AnyGenerator c
+
+instance Eq a => Eq (Free a) where
+    a == b = Generator.toList a == Generator.toList b
+    a /= b = Generator.toList a == Generator.toList b
+
+instance Ord a => Ord (Free a) where
+    a <= b = Generator.toList a <= Generator.toList b
+    a >= b = Generator.toList a >= Generator.toList b
+    a < b  = Generator.toList a <  Generator.toList b
+    a > b  = Generator.toList a >  Generator.toList b
+    a `compare` b = Generator.toList a `compare` Generator.toList b
+
+instance Monoid (Free a) where
+    mempty = Empty
+    mappend = Plus
+
+instance Reducer a (Free a) where
+    unit = Unit
+
+    snoc Empty a = Unit a
+    snoc a b = Snoc a b
+
+    cons b Empty = Unit b
+    cons a b = Cons a b 
+
+instance Functor Free where
+    fmap f (a `Cons` b) = f a `Cons` fmap f b
+    fmap f (a `Snoc` b) = fmap f a `Snoc` f b
+    fmap f (a `Plus` b) = fmap f a `Plus` fmap f b
+    fmap f (Unit a) = Unit (f a)
+    fmap _ Empty = Empty
+    fmap f (AnyGenerator c) = mapReduce f c
+
+instance Pointed Free where
+    point = Unit
+
+instance Monad Free where
+    return = Unit
+    a `Cons` b >>= k     = k a `Plus` (b >>= k)
+    a `Snoc` b >>= k     = (a >>= k) `Plus` k b
+    a `Plus` b >>= k     = (a >>= k) `Plus` (b >>= k)
+    Unit a >>= k         = k a
+    Empty >>= _          = Empty
+    AnyGenerator c >>= k = getSelf (mapReduce k c)
+
+instance MonadPlus Free where
+    mzero = Empty
+    mplus = Plus
+
+instance Foldable Free where
+    foldMap f (a `Cons` b)     = f a `mappend` foldMap f b
+    foldMap f (a `Snoc` b)     = foldMap f a `mappend` f b
+    foldMap f (a `Plus` b)     = foldMap f a `mappend` foldMap f b
+    foldMap f (Unit a)         = f a 
+    foldMap _ Empty            = mempty
+    foldMap f (AnyGenerator c) = Generator.foldMap f c
+
+instance Generator (Free a) where
+    type Elem (Free a) = a
+    mapReduce f (a `Cons` b)     = f a `cons` mapReduce f b
+    mapReduce f (a `Snoc` b)     = mapReduce f a `snoc` f b
+    mapReduce f (a `Plus` b)     = mapReduce f a `plus` mapReduce f b
+    mapReduce f (Unit a)         = unit (f a)
+    mapReduce _ Empty            = mempty
+    mapReduce f (AnyGenerator c) = mapReduce f c
+    
+    mapTo f m (a `Cons` b)       = m `plus` (f a `cons` mapReduce f b)
+    mapTo f m (a `Snoc` b)       = mapTo f m a `snoc` f b
+    mapTo f m (a `Plus` b)       = mapTo f m a `plus` mapReduce f b
+    mapTo f m (Unit a)           = m `snoc` f a
+    mapTo _ m Empty              = m 
+    mapTo f m (AnyGenerator c)   = mapTo f m c
+    
+    mapFrom f (a `Cons` b)     m = f a `cons` mapFrom f b m 
+    mapFrom f (a `Snoc` b)     m = mapFrom f a (f b `cons` m)
+    mapFrom f (a `Plus` b)     m = mapReduce f a `plus` mapFrom f b m
+    mapFrom f (Unit a)         m = f a `cons` m
+    mapFrom _ Empty            m = m 
+    mapFrom f (AnyGenerator c) m = mapFrom f c m 
+
+ hunk ./doc/html/monoids/src/Data-Generator.html 1 + + + + +Data/Generator.hs + + + +
{-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Generator
+-- Copyright   :  (c) Edward Kmett 2009
+-- License     :  BSD-style
+-- Maintainer  :  ekmett@gmail.com
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- A 'Generator' @c@ is a possibly-specialized container, which contains values of 
+-- type 'Elem' @c@, and which knows how to efficiently apply a 'Reducer' to extract
+-- an answer.
+--
+-- Since a 'Generator' is not polymorphic in its contents, it is more specialized
+-- than "Data.Foldable.Foldable", and a 'Reducer' may supply efficient left-to-right
+-- and right-to-left reduction strategies that a 'Generator' may avail itself of.
+-----------------------------------------------------------------------------
+
+module Data.Generator
+    ( module Data.Monoid.Reducer
+    -- * Generators
+    , Generator
+    , Elem
+    , mapReduce
+    , mapTo
+    , mapFrom
+    -- * Generator Transformers
+    , Keys(Keys, getKeys)
+    , Values(Values, getValues)
+    , Char8(Char8, getChar8)
+    -- * Combinators
+    , reduce
+    , mapReduceWith
+    , reduceWith
+    ) where
+
+import Data.Array 
+import Data.Word (Word8)
+import Data.Text (Text)
+import Data.Foldable (fold,foldMap)
+import qualified Data.Text as Text
+import qualified Data.ByteString as Strict (ByteString, foldl')
+import qualified Data.ByteString.Char8 as Strict8 (foldl')
+import qualified Data.ByteString.Lazy as Lazy (ByteString, toChunks)
+import qualified Data.ByteString.Lazy.Char8 as Lazy8 (toChunks)
+import qualified Data.Sequence as Seq
+import Data.FingerTree (Measured, FingerTree)
+import Data.Sequence (Seq)
+import qualified Data.Set as Set
+import Data.Set (Set)
+import qualified Data.IntSet as IntSet
+import Data.IntSet (IntSet)
+import qualified Data.IntMap as IntMap
+import Data.IntMap (IntMap)
+import qualified Data.Map as Map
+import Data.Map (Map)
+
+import Control.Parallel.Strategies
+import Data.Monoid.Reducer
+
+-- | minimal definition 'mapReduce' or 'mapTo'
+class Generator c where
+    type Elem c :: * 
+    mapReduce :: (e `Reducer` m) => (Elem c -> e) -> c -> m
+    mapTo     :: (e `Reducer` m) => (Elem c -> e) -> m -> c -> m 
+    mapFrom   :: (e `Reducer` m) => (Elem c -> e) -> c -> m -> m
+
+    mapReduce f = mapTo f mempty
+    mapTo f m = mappend m . mapReduce f
+    mapFrom f = mappend . mapReduce f
+
+instance Generator Strict.ByteString where
+    type Elem Strict.ByteString = Word8
+    mapTo f = Strict.foldl' (\a -> snoc a . f)
+
+instance Generator Lazy.ByteString where
+    type Elem Lazy.ByteString = Word8
+    mapReduce f = fold . parMap rwhnf (mapReduce f) . Lazy.toChunks
+
+instance Generator Text where
+    type Elem Text = Char
+    mapTo f = Text.foldl' (\a -> snoc a . f)
+
+instance Generator [c] where
+    type Elem [c] = c
+    mapReduce f = foldr (cons . f) mempty
+
+instance Measured v e => Generator (FingerTree v e) where
+    type Elem (FingerTree v e) = e
+    mapReduce f = foldMap (unit . f)
+
+instance Generator (Seq c) where
+    type Elem (Seq c) = c
+    mapReduce f = foldMap (unit . f)
+
+instance Generator IntSet where
+    type Elem IntSet = Int
+    mapReduce f = mapReduce f . IntSet.toList
+
+instance Generator (Set a) where
+    type Elem (Set a) = a
+    mapReduce f = mapReduce f . Set.toList
+
+instance Generator (IntMap v) where
+    type Elem (IntMap v) = (Int,v)
+    mapReduce f = mapReduce f . IntMap.toList
+
+instance Generator (Map k v) where
+    type Elem (Map k v) = (k,v) 
+    mapReduce f = mapReduce f . Map.toList
+
+instance Ix i => Generator (Array i e) where
+    type Elem (Array i e) = (i,e)
+    mapReduce f = mapReduce f . assocs
+
+-- | a 'Generator' transformer that asks only for the keys of an indexed container
+newtype Keys c = Keys { getKeys :: c } 
+
+instance Generator (Keys (IntMap v)) where
+    type Elem (Keys (IntMap v)) = Int
+    mapReduce f = mapReduce f . IntMap.keys . getKeys
+
+instance Generator (Keys (Map k v)) where
+    type Elem (Keys (Map k v)) = k
+    mapReduce f = mapReduce f . Map.keys . getKeys
+
+instance Ix i => Generator (Keys (Array i e)) where
+    type Elem (Keys (Array i e)) = i
+    mapReduce f = mapReduce f . range . bounds . getKeys
+
+-- | a 'Generator' transformer that asks only for the values contained in an indexed container
+newtype Values c = Values { getValues :: c } 
+
+instance Generator (Values (IntMap v)) where
+    type Elem (Values (IntMap v)) = v
+    mapReduce f = mapReduce f . IntMap.elems . getValues
+
+instance Generator (Values (Map k v)) where
+    type Elem (Values (Map k v)) = v
+    mapReduce f = mapReduce f . Map.elems . getValues
+
+instance Ix i => Generator (Values (Array i e)) where
+    type Elem (Values (Array i e)) = e
+    mapReduce f = mapReduce f . elems . getValues
+
+-- | a 'Generator' transformer that treats 'Word8' as 'Char'
+-- This lets you use a 'ByteString' as a 'Char' source without going through a 'Monoid' transformer like 'UTF8'
+newtype Char8 c = Char8 { getChar8 :: c } 
+
+instance Generator (Char8 Strict.ByteString) where
+    type Elem (Char8 Strict.ByteString) = Char
+    mapTo f m = Strict8.foldl' (\a -> snoc a . f) m . getChar8
+
+instance Generator (Char8 Lazy.ByteString) where
+    type Elem (Char8 Lazy.ByteString) = Char
+    mapReduce f = fold . parMap rwhnf (mapReduce f . Char8) . Lazy8.toChunks . getChar8
+
+-- | Apply a 'Reducer' directly to the elements of a 'Generator'
+reduce :: (Generator c, Elem c `Reducer` m) => c -> m
+reduce = mapReduce id
+{-# SPECIALIZE reduce :: (Word8 `Reducer` m) => Strict.ByteString -> m #-}
+{-# SPECIALIZE reduce :: (Word8 `Reducer` m) => Lazy.ByteString -> m #-}
+{-# SPECIALIZE reduce :: (Char `Reducer` m) => Char8 Strict.ByteString -> m #-}
+{-# SPECIALIZE reduce :: (Char `Reducer` m) => Char8 Lazy.ByteString -> m #-}
+{-# SPECIALIZE reduce :: (c `Reducer` m) => [c] -> m #-}
+{-# SPECIALIZE reduce :: (Generator (FingerTree v e), e `Reducer` m) => FingerTree v e -> m #-}
+{-# SPECIALIZE reduce :: (Char `Reducer` m) => Text -> m #-}
+{-# SPECIALIZE reduce :: (e `Reducer` m) => Seq e -> m #-}
+{-# SPECIALIZE reduce :: (Int `Reducer` m) => IntSet -> m #-}
+{-# SPECIALIZE reduce :: (a `Reducer` m) => Set a -> m #-}
+{-# SPECIALIZE reduce :: ((Int,v) `Reducer` m) => IntMap v -> m #-}
+{-# SPECIALIZE reduce :: ((k,v) `Reducer` m) => Map k v -> m #-}
+{-# SPECIALIZE reduce :: (Int `Reducer` m) => Keys (IntMap v) -> m #-}
+{-# SPECIALIZE reduce :: (k `Reducer` m) => Keys (Map k v) -> m #-}
+{-# SPECIALIZE reduce :: (v `Reducer` m) => Values (IntMap v) -> m #-}
+{-# SPECIALIZE reduce :: (v `Reducer` m) => Values (Map k v) -> m #-}
+
+mapReduceWith :: (Generator c, e `Reducer` m) => (m -> n) -> (Elem c -> e) -> c -> n
+mapReduceWith f g = f . mapReduce g
+{-# INLINE mapReduceWith #-}
+
+reduceWith :: (Generator c, Elem c `Reducer` m) => (m -> n) -> c -> n
+reduceWith f = f . reduce
+{-# INLINE reduceWith #-}
+
+ hunk ./doc/html/monoids/src/Data-Monoid-Combinators.html 23 --- > import Data.Group.Combinators as Monoid +-- > import Data.Monoid.Combinators as Monoid hunk ./doc/html/monoids/src/Data-Monoid-Combinators.html 28 -(moduleData.Monoid.Generator --- * Monadic Reduction -,mapM_ -,forM_ -,msum --- * Applicative Reduction -,traverse_ -,for_ -,asum --- * Logical Reduction -,and -,or -,any -,all --- * Monoidal Reduction -,foldMap -,fold -,toList --- * List-Like Reduction -,concatMap -,elem -,filter -,filterWith -,find -,sum -,product -,notElem --- * List-Like Monoid Production -,repeat -,replicate -,cycle --- * QuickCheck Properties -,prop_replicate_right_distributive -)where - -importPreludehiding(mapM_,any,elem,filter,concatMap,and,or,all,sum,product,notElem,replicate,cycle,repeat) -importControl.Applicative -importControl.Monad(MonadPlus) -importData.Monoid.Generator -importData.Monoid.Applicative -importData.Monoid.Self -importData.Monoid.Monad -importTest.QuickCheck - --- | Efficiently 'mapReduce' a 'Generator' using the 'Traversal' monoid. A specialized version of its namesake from "Data.Foldable" --- --- @ --- 'mapReduce' 'getTraversal' --- @ -traverse_::(Generatorc,Applicativef)=>(Elemc->fb)->c->f() -traverse_=mapReduceWithgetTraversal -{-# INLINE traverse_ #-} - --- | Convenience function as found in "Data.Foldable" --- --- @ --- 'flip' 'traverse_' --- @ -for_::(Generatorc,Applicativef)=>c->(Elemc->fb)->f() -for_=fliptraverse_ -{-# INLINE for_ #-} - --- | The sum of a collection of actions, generalizing 'concat' --- --- @ --- 'reduceWith' 'getAlt' --- @ -asum::(Generatorc,Alternativef,fa~Elemc)=>c->fa -asum=reduceWithgetAlt -{-# INLINE asum #-} - --- | Efficiently 'mapReduce' a 'Generator' using the 'Action' monoid. A specialized version of its namesake from "Data.Foldable" and "Control.Monad" --- --- @ --- 'mapReduceWith' 'getAction' --- @ -mapM_::(Generatorc,Monadm)=>(Elemc->mb)->c->m() -mapM_=mapReduceWithgetAction -{-# INLINE mapM_ #-} - --- | Convenience function as found in "Data.Foldable" and "Control.Monad" --- --- @ --- 'flip' 'mapM_' --- @ -forM_::(Generatorc,Monadm)=>c->(Elemc->mb)->m() -forM_=flipmapM_ -{-# INLINE forM_ #-} - --- | The sum of a collection of actions, generalizing 'concat' --- --- @ --- 'reduceWith' 'getMonadSum' --- @ -msum::(Generatorc,MonadPlusm,ma~Elemc)=>c->ma -msum=reduceWithgetMonadSum -{-# INLINE msum #-} - --- | Efficiently 'mapReduce' a 'Generator' using the 'Self' monoid. A specialized version of its namesake from "Data.Foldable" --- --- @ --- 'mapReduceWith' 'getSelf' --- @ -foldMap::(Monoidm,Generatorc)=>(Elemc->m)->c->m -foldMap=mapReduceWithgetSelf -{-# INLINE foldMap #-} - --- | Type specialization of "foldMap" above -concatMap::Generatorc=>(Elemc->[b])->c->[b] -concatMap=foldMap -{-# INLINE concatMap #-} - --- | Efficiently 'reduce' a 'Generator' using the 'Self' monoid. A specialized version of its namesake from "Data.Foldable" --- --- @ --- 'reduceWith' 'getSelf' --- @ -fold::(Monoidm,Generatorc,Elemc~m)=>c->m -fold=reduceWithgetSelf -{-# INLINE fold #-} - --- | Convert any 'Generator' to a list of its contents. Specialization of 'reduce' -toList::Generatorc=>c->[Elemc] -toList=reduce -{-# INLINE toList #-} - --- | Efficiently 'reduce' a 'Generator' that contains values of type 'Bool' --- --- @ --- 'reduceWith' 'getAll' --- @ -and::(Generatorc,Elemc~Bool)=>c->Bool -and=reduceWithgetAll -{-# INLINE and #-} - --- | Efficiently 'reduce' a 'Generator' that contains values of type 'Bool' --- --- @ --- 'reduceWith' 'getAny' --- @ -or::(Generatorc,Elemc~Bool)=>c->Bool -or=reduceWithgetAny -{-# INLINE or #-} - --- | Efficiently 'mapReduce' any 'Generator' checking to see if any of its values match the supplied predicate --- --- @ --- 'mapReduceWith' 'getAny' --- @ -any::Generatorc=>(Elemc->Bool)->c->Bool -any=mapReduceWithgetAny -{-# INLINE any #-} - --- | Efficiently 'mapReduce' any 'Generator' checking to see if all of its values match the supplied predicate --- --- @ --- 'mapReduceWith' 'getAll' --- @ -all::Generatorc=>(Elemc->Bool)->c->Bool -all=mapReduceWithgetAll -{-# INLINE all #-} - --- | Efficiently sum over the members of any 'Generator' --- --- @ --- 'reduceWith' 'getSum' --- @ -sum::(Generatorc,Num(Elemc))=>c->Elemc -sum=reduceWithgetSum -{-# INLINE sum #-} - --- | Efficiently take the product of every member of a 'Generator' --- --- @ --- 'reduceWith' 'getProduct' --- @ -product::(Generatorc,Num(Elemc))=>c->Elemc -product=reduceWithgetProduct -{-# INLINE product #-} - --- | Check to see if 'any' member of the 'Generator' matches the supplied value -elem::(Generatorc,Eq(Elemc))=>Elemc->c->Bool -elem=any.(==) -{-# INLINE elem #-} - --- | Check to make sure that the supplied value is not a member of the 'Generator' -notElem::(Generatorc,Eq(Elemc))=>Elemc->c->Bool -notElemx=not.elemx -{-# INLINE notElem #-} - --- | Efficiently 'mapReduce' a subset of the elements in a 'Generator' -filter::(Generatorc,Elemc`Reducer`m)=>(Elemc->Bool)->c->m -filterp=foldMapfwhere -fx|px=unitx -|otherwise=mempty -{-# INLINE filter #-} - --- | Allows idiomatic specialization of filter by proving a function that will be used to transform the output -filterWith::(Generatorc,Elemc`Reducer`m)=>(m->n)->(Elemc->Bool)->c->n -filterWithfp=f.filterp -{-# INLINE filterWith #-} - --- | A specialization of 'filter' using the 'First' 'Monoid', analogous to 'Data.List.find' --- --- @ --- 'filterWith' 'getFirst' --- @ -find::Generatorc=>(Elemc->Bool)->c->Maybe(Elemc) -find=filterWithgetFirst -{-# INLINE find #-} - --- | A generalization of 'Data.List.replicate' to an arbitrary 'Monoid'. Adapted from --- <http://augustss.blogspot.com/2008/07/lost-and-found-if-i-write-108-in.html> -replicate::(Monoidm,Integraln)=>m->n->m -replicatex0y0 -|y0<0=mempty-- error "negative length" -|y0==0=mempty -|otherwise=fx0y0 -where -fxy -|eveny=f(x`mappend`x)(y`quot`2) -|y==1=x -|otherwise=g(x`mappend`x)((y-1)`quot`2)x -gxyz -|eveny=g(x`mappend`x)(y`quot`2)z -|y==1=x`mappend`z -|otherwise=g(x`mappend`x)((y-1)`quot`2)(x`mappend`z) -{-# INLINE replicate #-} - --- | A generalization of 'Data.List.cycle' to an arbitrary 'Monoid'. May fail to terminate for some values in some monoids. -cycle::Monoidm=>m->m -cyclexs=xs'wherexs'=xs`mappend`xs' - --- | A generalization of 'Data.List.repeat' to an arbitrary 'Monoid'. May fail to terminate for some values in some monoids. -repeat::(e`Reducer`m)=>e->m -repeatx=xswherexs=consxxs - -prop_replicate_right_distributive::(Eqm,Monoidm,Arbitrarym,Integraln)=>m->n->n->Bool -prop_replicate_right_distributivemxy -=replicatem(x+y)==replicatemx`mappend`replicatemy +( +-- * List-Like Monoid Production +repeat +,replicate +,cycle +-- * QuickCheck Properties +,prop_replicate_right_distributive +)where + +importPreludehiding(replicate,cycle,repeat) +importControl.Monad(MonadPlus) +importData.Monoid.Reducer +importTest.QuickCheck + + +-- | A generalization of 'Data.List.cycle' to an arbitrary 'Monoid'. May fail to terminate for some values in some monoids. +cycle::Monoidm=>m->m +cyclexs=xs'wherexs'=xs`mappend`xs' + +-- | A generalization of 'Data.List.repeat' to an arbitrary 'Monoid'. May fail to terminate for some values in some monoids. +repeat::(e`Reducer`m)=>e->m +repeatx=xswherexs=consxxs + +-- | A generalization of 'Data.List.replicate' to an arbitrary 'Monoid'. Adapted from +-- <http://augustss.blogspot.com/2008/07/lost-and-found-if-i-write-108-in.html> +replicate::(Monoidm,Integraln)=>m->n->m +replicatex0y0 +|y0<0=mempty-- error "negative length" +|y0==0=mempty +|otherwise=fx0y0 +where +fxy +|eveny=f(x`mappend`x)(y`quot`2) +|y==1=x +|otherwise=g(x`mappend`x)((y-1)`quot`2)x +gxyz +|eveny=g(x`mappend`x)(y`quot`2)z +|y==1=x`mappend`z +|otherwise=g(x`mappend`x)((y-1)`quot`2)(x`mappend`z) +{-# INLINE replicate #-} + +prop_replicate_right_distributive::(Eqm,Monoidm,Arbitrarym,Integraln)=>m->n->n->Bool +prop_replicate_right_distributivemxy +=replicatem(x+y)==replicatemx`mappend`replicatemy hunk ./doc/html/monoids/src/Data-Monoid-FromString.html 31 -importData.Monoid.Generator +importData.Generator hunk ./doc/html/monoids/src/Data-Monoid-Lexical-SourcePosition.html 44 -importData.Monoid.Generator +importData.Generator hunk ./doc/html/monoids/src/Data-Monoid-Lexical-Words.html 44 -importData.Monoid.Generator +importData.Generator hunk ./doc/html/monoids/src/Data-Monoid-Multiplicative.html 76 -importData.Monoid.Generator +importData.Generator hunk ./doc/html/monoids/src/Data-Monoid-Self.html 36 -importData.Monoid.Generator +importData.Generator hunk ./doc/html/monoids/src/Data-Ring-Semi-Natural.html 46 -importData.Monoid.Generator.Free -importData.Monoid.Generator.RLE +importData.Generator.Free +importData.Generator.Compressive.RLE hunk ./doc/html/monoids/src/Data-Ring-Semi-Near.html 49 -importData.Monoid.Generator +importData.Generator }