New patches: [unrevert anonymous**20090329063138] < > { adddir ./Data/Monoid/Monad adddir ./Data/Monoid/Monad/RWS adddir ./Data/Monoid/Monad/Writer addfile ./Data/Monoid/Monad/Cont.hs hunk ./Data/Monoid/Monad/Cont.hs 1 - + rmfile ./Data/Monoid/Monad/Cont.hs addfile ./Data/Monoid/Monad/Error.hs hunk ./Data/Monoid/Monad/Error.hs 1 - + rmfile ./Data/Monoid/Monad/Error.hs addfile ./Data/Monoid/Monad/IO.hs hunk ./Data/Monoid/Monad/IO.hs 1 - + rmfile ./Data/Monoid/Monad/IO.hs addfile ./Data/Monoid/Monad/RWS/Lazy.hs hunk ./Data/Monoid/Monad/RWS/Lazy.hs 1 - + rmfile ./Data/Monoid/Monad/RWS/Lazy.hs addfile ./Data/Monoid/Monad/RWS/Strict.hs hunk ./Data/Monoid/Monad/RWS/Strict.hs 1 - + rmfile ./Data/Monoid/Monad/RWS/Strict.hs rmdir ./Data/Monoid/Monad/RWS addfile ./Data/Monoid/Monad/Writer/Lazy.hs hunk ./Data/Monoid/Monad/Writer/Lazy.hs 1 - + rmfile ./Data/Monoid/Monad/Writer/Lazy.hs addfile ./Data/Monoid/Monad/Writer/Strict.hs hunk ./Data/Monoid/Monad/Writer/Strict.hs 1 - + rmfile ./Data/Monoid/Monad/Writer/Strict.hs rmdir ./Data/Monoid/Monad/Writer rmdir ./Data/Monoid/Monad hunk ./dist/doc/html/monoids/Data-Group-Combinators.html 1 - - -Data.Group.Combinators
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Group.Combinators
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Utilities for working with Groups that conflict with names from the Prelude. -

Intended to be imported qualified. -

 import Data.Group.Combinators as Group (replicate)
-
Documentation
module Data.Group
replicate :: (Group m, Integral n) => m -> n -> mSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Group-Combinators.html hunk ./dist/doc/html/monoids/Data-Group-Sugar.html 1 - - -Data.Group.Sugar
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Group.Sugar
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Syntactic sugar for working with groups that conflicts with names from the Prelude. -

 import Prelude hiding ((-), (+), negate, subtract)
- import Data.Group.Sugar
-
Documentation
module Data.Monoid.Additive.Sugar
module Data.Group
(-) :: Group g => g -> g -> gSource
negate :: Group g => g -> gSource
subtract :: Group g => g -> g -> gSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Group-Sugar.html hunk ./dist/doc/html/monoids/Data-Group.html 1 - - -Data.Group
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Group
Portabilityportable
Stabilityexperimental
MaintainerEdward Kmett <ekmett@gmail.com>
Description
Extends Monoid to support Group operations -
Synopsis
module Data.Monoid.Additive
class Monoid a => Group a where
gnegate :: a -> a
minus :: a -> a -> a
gsubtract :: a -> a -> a
gnegate :: Group a => a -> a
gsubtract :: Group a => a -> a -> a
minus :: Group a => a -> a -> a
Documentation
module Data.Monoid.Additive
class Monoid a => Group a whereSource
Minimal complete definition: gnegate or minus -
Methods
gnegate :: a -> aSource
minus :: a -> a -> aSource
gsubtract :: a -> a -> aSource
show/hide Instances
Group BoolRing
Group a => Group (Dual a)
Num a => Group (Sum a)
Fractional a => Group (Product a)
Group a => Group (Self a)
Group a => Group (FromString a)
Num a => Group (FromNum a)
(Group m, Applicative f) => Group (TraversalWith f m)
(Group m, Monad f) => Group (ActionWith f m)
(Group r, Module r m, Group m) => Group (D r m)
gnegate :: Group a => a -> aSource
gsubtract :: Group a => a -> a -> aSource
minus :: Group a => a -> a -> aSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Group.html hunk ./dist/doc/html/monoids/Data-Monoid-Additive-Sugar.html 1 - - -Data.Monoid.Additive.Sugar
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Additive.Sugar
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Syntactic sugar for working with a Monoid that conflicts with names from the Prelude. -

 import Prelude hiding ((+))
- import Data.Monoid.Additive.Sugar
-
Documentation
module Data.Monoid.Additive
(+) :: Monoid m => m -> m -> mSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Additive-Sugar.html hunk ./dist/doc/html/monoids/Data-Monoid-Additive.html 1 - - -Data.Monoid.Additive
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Additive
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

More easily understood aliases for mappend and mempty -

 import Data.Monoid.Additive
-
Documentation
plus :: Monoid m => m -> m -> mSource
zero :: Monoid m => mSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Additive.html hunk ./dist/doc/html/monoids/Data-Monoid-Applicative.html 1 - - -Data.Monoid.Applicative
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Applicative
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Monoids for working with an Applicative Functor. -
Synopsis
module Data.Monoid.Reducer
module Data.Ring.Semi.Near
module Data.Ring.Module
newtype Traversal f = Traversal {
getTraversal :: f ()
}
newtype WrappedApplicative f a = WrappedApplicative {
getWrappedApplicative :: f a
}
newtype TraversalWith f m = TraversalWith {
getTraversalWith :: f m
}
snocTraversal :: Reducer (f ()) (Traversal f) => Traversal f -> f () -> Traversal f
Documentation
module Data.Monoid.Reducer
module Data.Ring.Semi.Near
module Data.Ring.Module
newtype Traversal f Source
A Traversal uses an glues together Applicative actions with (*>) - in the manner of traverse_ from Data.Foldable. Any values returned by - reduced actions are discarded. -
Constructors
Traversal
getTraversal :: f ()
show/hide Instances
newtype WrappedApplicative f a Source
A WrappedApplicative turns any Alternative instance into a Monoid. - It also provides a Multiplicative instance for an Applicative functor wrapped around a Monoid - and asserts that any Alternative applied to a Monoid forms a LeftSemiNearRing - under these operations. -
Constructors
WrappedApplicative
getWrappedApplicative :: f a
show/hide Instances
newtype TraversalWith f m Source
if m is a Module and f is a Applicative then f TraversalWith m is a Module as well -
Constructors
TraversalWith
getTraversalWith :: f m
show/hide Instances
snocTraversal :: Reducer (f ()) (Traversal f) => Traversal f -> f () -> Traversal fSource
Efficiently avoid needlessly rebinding when using snoc on an action that already returns () - A rewrite rule automatically applies this when possible -
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Applicative.html hunk ./dist/doc/html/monoids/Data-Monoid-Categorical.html 1 - - -Data.Monoid.Categorical
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Categorical
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Contents
Generalized Endo -
Monoids as Categories -
Description
Synopsis
module Data.Monoid.Reducer
data GEndo k a = GEndo {
getGEndo :: k a a
}
data Mon m n o where
Mon :: Monoid m => m -> Mon m a a
getMon :: Mon m m m -> m
Documentation
module Data.Monoid.Reducer
Generalized Endo -
data GEndo k a Source
The Monoid of the endomorphisms over some object in an arbitrary Category. -
Constructors
GEndo
getGEndo :: k a a
show/hide Instances
Category k => Monoid (GEndo k a)
Monoids as Categories -
data Mon m n o whereSource
A Monoid is just a Category with one object. -
Constructors
Mon :: Monoid m => m -> Mon m a a
show/hide Instances
Reducer c m => Reducer c (Mon m m m)
Monoid m => Category (Mon m)
Monoid m => Monoid (Mon m m m)
getMon :: Mon m m m -> mSource
Extract the Monoid from its representation as a Category -
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Categorical.html hunk ./dist/doc/html/monoids/Data-Monoid-Combinators.html 1 - - -Data.Monoid.Combinators
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Combinators
Portabilitynon-portable (type families, MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Contents
Monadic Reduction -
Applicative Reduction -
Logical Reduction -
Monoidal Reduction -
List-Like Reduction -
List-Like Monoid Generation -
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.Group.Combinators as Monoid 
-
Synopsis
module Data.Monoid.Generator
mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()
forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()
traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()
for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()
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
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
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
repeat :: Reducer e m => e -> m
replicate :: (Monoid m, Integral n) => m -> n -> m
cycle :: Monoid m => m -> m
Documentation
module Data.Monoid.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 -
forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()Source
flipped mapM_ as in Data.Foldable and Control.Monad -
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 in Data.Foldable -
for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()Source
flipped traverse_ as in Data.Foldable -
Logical Reduction -
and :: (Generator c, Elem c ~ Bool) => c -> BoolSource
Efficiently reduce a Generator that contains values of type Bool -
or :: (Generator c, Elem c ~ Bool) => c -> BoolSource
Efficiently reduce a Generator that contains values of type Bool -
any :: Generator c => (Elem c -> Bool) -> c -> BoolSource
Efficiently mapReduce any Generator checking to see if any of its values match the supplied predicate -
all :: Generator c => (Elem c -> Bool) -> c -> BoolSource
Efficiently mapReduce any Generator checking to see if all of its values match the supplied predicate -
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 -
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 -
List-Like Reduction -
concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]Source
A further specialization of foldMap -
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 -
find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)Source
A specialization of filter using the First Monoid, analogous to Data.List.find -
sum :: (Generator c, Num (Elem c)) => c -> Elem cSource
Efficiently mapReduce any Generator using the Sum Monoid -
product :: (Generator c, Num (Elem c)) => c -> Elem cSource
Efficiently mapReduce any Generator using the Product Monoid -
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 -
List-Like Monoid Generation -
repeat :: Reducer e m => e -> mSource
A generalization of Data.List.repeat to an arbitrary Monoid. May fail to terminate for some values in some monoids. -
replicate :: (Monoid m, Integral n) => m -> n -> mSource
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 -
cycle :: Monoid m => m -> mSource
A generalization of Data.List.cycle to an arbitrary Monoid. May fail to terminate for some values in some monoids. -
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Combinators.html hunk ./dist/doc/html/monoids/Data-Monoid-FromString.html 1 - - -Data.Monoid.FromString
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.FromString
Portabilitynon-portable (overloaded strings, MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Transform any Char Reducer into an IsString instance so it can be - used directly with overloaded string literals. -
Documentation
module Data.Monoid.Reducer
data FromString m Source
Constructors
FromString
getFromString :: m
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-FromString.html hunk ./dist/doc/html/monoids/Data-Monoid-Generator-LZ78.html 1 - - -Data.Monoid.Generator.LZ78
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Generator.LZ78
Documentation
module Data.Monoid.Generator
newtype LZ78 a Source
Constructors
LZ78
getLZ78 :: [(Int, a)]
show/hide Instances
decode :: LZ78 a -> [a]Source
encode :: Ord a => [a] -> LZ78 aSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Generator-LZ78.html hunk ./dist/doc/html/monoids/Data-Monoid-Generator.html 1 - - -Data.Monoid.Generator
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Generator
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
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
reduce :: (Generator c, Reducer (Elem c) m) => c -> m
newtype Keys c = Keys {
getKeys :: c
}
newtype Values c = Values {
getValues :: c
}
newtype Char8 c = Char8 {
getChar8 :: c
}
Documentation
module Data.Monoid.Reducer
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
reduce :: (Generator c, Reducer (Elem c) m) => c -> mSource
Apply a Reducer directly to the elements of a Generator -
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
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Generator.html hunk ./dist/doc/html/monoids/Data-Monoid-Instances.html 1 - - -Data.Monoid.Instances
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Instances
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

A collection of orphan instance declarations for Monoids that should - eventually be pushed back down to the source packages. -

Every package that uses these instances includes this package internally. -

Includes: -

  • Monoid instances for the Monad transformers from the mtl package -
  • A Monoid instance for the ParsecT Monad from parsec-3. -
  • IsString instances for tuples of IsString for overloaded string support. -
  • A Monoid instance for the FingerTree in the fingertree package -
  • Monoid instances for Int, Integer, and Ratio using (+,0) -

This module is automatically included everywhere this functionality is required - within this package. You should only have to import this module yourself if you - want these instances for your own purposes. -

Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Instances.html hunk ./dist/doc/html/monoids/Data-Monoid-Lexical-RunLengthEncoding.html 1 - - -Data.Monoid.Lexical.RunLengthEncoding
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Lexical.RunLengthEncoding
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
A simple Monoid transformer that turns any monoidal Reducer into a - a reducer that expects to be supplied both a run length n with each item - and which efficiently exponentiates the result of unit n times through - replicate. -
Documentation
module Data.Monoid.Reducer
newtype RLE n m Source
Constructors
RLE
getRLE :: m
show/hide Instances
(Integral n, Monoid m) => Monoid (RLE n m)
(Integral n, Reducer c m) => Reducer ((,) n c) (RLE n m)
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Lexical-RunLengthEncoding.html hunk ./dist/doc/html/monoids/Data-Monoid-Lexical-SourcePosition.html 1 - - -Data.Monoid.Lexical.SourcePosition
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Lexical.SourcePosition
Portabilitynon-portable (MPTCs, OverloadedStrings)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Incrementally determine locations in a source file through local information - This allows for efficient recomputation of line #s and token locations - while the file is being interactively updated by storing this as a supplemental - measure on a FingerTree. -

The general idea is to use this as part of a measure in a FingerTree so you can - use mappend to prepend a startOfFile with the file information. -

Synopsis
module Data.Monoid.Reducer.Char
nextTab :: Int -> Int
data SourcePosition file
type SourceLine = Int
type SourceColumn = Int
sourceLine :: SourcePosition f -> Maybe SourceLine
sourceColumn :: SourcePosition f -> Maybe SourceColumn
startOfFile :: f -> SourcePosition f
showSourcePosition :: SourcePosition String -> String
Documentation
module Data.Monoid.Reducer.Char
nextTab :: Int -> IntSource
Compute the location of the next standard 8-column aligned tab -
data SourcePosition file Source
A Monoid of partial information about locations in a source file. - This is polymorphic in the kind of information you want to maintain about each source file. -
show/hide Instances
type SourceLine = IntSource
type SourceColumn = IntSource
sourceLine :: SourcePosition f -> Maybe SourceLineSource
extract partial information about the current line number if possible -
sourceColumn :: SourcePosition f -> Maybe SourceColumnSource
extract partial information about the current column, even in the absence of knowledge of the source file -
startOfFile :: f -> SourcePosition fSource
lift information about a source file into a starting SourcePosition for that file -
showSourcePosition :: SourcePosition String -> StringSource
extract the standard format for an absolute source position -
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Lexical-SourcePosition.html hunk ./dist/doc/html/monoids/Data-Monoid-Lexical-UTF8-Decoder.html 1 - - -Data.Monoid.Lexical.UTF8.Decoder
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Lexical.UTF8.Decoder
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

UTF8 encoded unicode characters can be parsed both forwards and backwards, - since the start of each Char is clearly marked. This Monoid accumulates - information about the characters represented and reduces that information - using a CharReducer, which is just a Reducer Monoid that knows what - it wants to do about an invalidChar -- a string of Word8 values that - don't form a valid UTF8 character. -

As this monoid parses chars it just feeds them upstream to the underlying - CharReducer. Efficient left-to-right and right-to-left traversals are - supplied so that a lazy ByteString can be parsed efficiently by - chunking it into strict chunks, and batching the traversals over each - before stitching the edges together. -

Because this needs to be a Monoid and should return the exact same result - regardless of forward or backwards parsing, it chooses to parse only - canonical UTF8 unlike most Haskell UTF8 parsers, which will blissfully - accept illegal alternative long encodings of a character. -

This actually fixes a potential class of security issues in some scenarios: -

http://prowebdevelopmentblog.com/content/big-overhaul-java-utf-8-charset -

NB: Due to naive use of a list to track the tail of an unfinished character - this may exhibit O(n^2) behavior parsing backwards along an invalid sequence - of a large number of bytes that all claim to be in the tail of a character. -

Documentation
module Data.Monoid.Reducer.Char
data UTF8 m Source
show/hide Instances
runUTF8 :: CharReducer m => UTF8 m -> mSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Lexical-UTF8-Decoder.html hunk ./dist/doc/html/monoids/Data-Monoid-Lexical-Words.html 1 - - -Data.Monoid.Lexical.Words
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Lexical.Words
Portabilitynon-portable (MPTCs, OverloadedStrings)
Stabilityexperimental
Maintainerlibraries@haskell.org
Contents
Words -
Lines -
Description
A simple demonstration of tokenizing a Generator into distinct words - and/or lines using a word-parsing Monoid that accumulates partial - information about words and then builds up a token stream. -
Synopsis
module Data.Monoid.Reducer.Char
data Words m
runWords :: Words m -> [m]
data Unspaced m
wordsFrom :: (Generator c, Elem c ~ Char, Reducer Char m, Reducer Char n, Reducer Char o) => m -> c -> [(m, n, o)]
data Lines m
runLines :: Lines m -> [m]
data Unlined m
linesFrom :: (Generator c, Elem c ~ Char, Reducer Char m, Reducer Char n, Reducer Char o) => m -> c -> [(m, n, o)]
Documentation
module Data.Monoid.Reducer.Char
Words -
data Words m Source
A CharReducer transformer that breaks a Char Generator into distinct words, feeding a Char Reducer each line in turn -
show/hide Instances
runWords :: Words m -> [m]Source
Extract the matched words from the Words Monoid -
data Unspaced m Source
A CharReducer transformer that strips out any character matched by isSpace -
show/hide Instances
wordsFrom :: (Generator c, Elem c ~ Char, Reducer Char m, Reducer Char n, Reducer Char o) => m -> c -> [(m, n, o)]Source
Utility function to extract words using accumulator, inside-word, and until-next-word monoids -
Lines -
data Lines m Source
A CharReducer transformer that breaks a Char Generator into distinct lines, feeding a Char Reducer each line in turn. -
show/hide Instances
runLines :: Lines m -> [m]Source
Extract the matched lines from the Lines Monoid -
data Unlined m Source
A CharReducer transformer that strips out newlines -
show/hide Instances
linesFrom :: (Generator c, Elem c ~ Char, Reducer Char m, Reducer Char n, Reducer Char o) => m -> c -> [(m, n, o)]Source
Utility function to extract lines using accumulator, inside-line, and until-next-line monoids -
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Lexical-Words.html hunk ./dist/doc/html/monoids/Data-Monoid-Monad.html 1 - - -Data.Monoid.Monad
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Monad
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Contents
Actions -
Lifting Modules -
Wrapped Monads -
Description
Monoid instances for working with a Monad -
Synopsis
module Data.Monoid.Reducer
module Data.Ring.Semi.Near
newtype Action m = Action {
getAction :: m ()
}
snocAction :: Reducer (m ()) (Action m) => Action m -> m () -> Action m
newtype ActionWith f m = ActionWith {
getActionWith :: f m
}
newtype WrappedMonad m a = WrappedMonad {
getWrappedMonad :: m a
}
Documentation
module Data.Monoid.Reducer
module Data.Ring.Semi.Near
Actions -
newtype Action m Source
An Action uses glues together Monad actions with (>>) - in the manner of mapM_ from Data.Foldable. Any values returned by - reduced actions are discarded. -
Constructors
Action
getAction :: m ()
show/hide Instances
Monad m => Monoid (Action m)
Monad m => Reducer (m a) (Action m)
snocAction :: Reducer (m ()) (Action m) => Action m -> m () -> Action mSource
Efficiently avoid needlessly rebinding when using snoc on an action that already returns () - A rewrite rule automatically applies this when possible -
Lifting Modules -
newtype ActionWith f m Source
if m is a Module over r and f is a Monad then f ActionWith m is a Module as well -
Constructors
ActionWith
getActionWith :: f m
show/hide Instances
(Reducer c m, Monad f) => Reducer c (ActionWith f m)
(Module r m, Monad f) => Module r (ActionWith f m)
(RightModule r m, Monad f) => RightModule r (ActionWith f m)
(LeftModule r m, Monad f) => LeftModule r (ActionWith f m)
Monad f => Monad (ActionWith f)
Functor f => Functor (ActionWith f)
MonadPlus f => MonadPlus (ActionWith f)
Pointed f => Pointed (ActionWith f)
Eq (f m) => Eq (ActionWith f m)
Ord (f m) => Ord (ActionWith f m)
Read (f m) => Read (ActionWith f m)
Show (f m) => Show (ActionWith f m)
(Monoid m, Monad f) => Monoid (ActionWith f m)
(Group m, Monad f) => Group (ActionWith f m)
Wrapped Monads -
newtype WrappedMonad m a Source
A WrappedMonad turns any MonadPlus instance into a Monoid. - It also provides a Multiplicative instance for a Monad wrapped around a Monoid - and asserts that any MonadPlus applied to a Monoid forms a LeftSemiNearRing - under these operations. -
Constructors
WrappedMonad
getWrappedMonad :: m a
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Monad.html hunk ./dist/doc/html/monoids/Data-Monoid-Multiplicative-Sugar.html 1 - - -Data.Monoid.Multiplicative.Sugar
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Multiplicative.Sugar
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Syntactic sugar for working with a Multiplicative monoids that conflicts with names from the Prelude. -

 import Prelude hiding ((+),(*))
- import Data.Monoid.Multiplicative.Sugar
-
Documentation
module Data.Monoid.Additive.Sugar
module Data.Monoid.Multiplicative
(*) :: Multiplicative r => r -> r -> rSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Multiplicative-Sugar.html hunk ./dist/doc/html/monoids/Data-Monoid-Multiplicative.html 1 - - -Data.Monoid.Multiplicative
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Multiplicative
Portabilityportable (but instances use MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Contents
Multiplicative Monoids -
Multiplicative to Monoid -
Monoid to Multiplicative -
Description

When dealing with a Ring or other structure, you often need a pair of - Monoid instances that are closely related. Making a newtype for one - is unsatisfying and yields an unnatural programming style. -

A Multiplicative is a Monoid that is intended for use in a scenario - that can be extended to have another Monoid slot in for addition. This - enables one to use common notation. -

Any Multiplicative can be turned into a Monoid using the Log wrapper. -

Any Monoid can be turned into a Multiplicative using the Exp wrapper. -

Instances are supplied for common Monads of Monoids, in a fashion - which can be extended if the Monad is a MonadPlus to yield a LeftSemiNearRing -

Instances are also supplied for common Applicatives of Monoids, in a - fashion which can be extended if the Applicative is Alternative to - yield a LeftSemiNearRing -

Synopsis
module Data.Monoid.Additive
class Multiplicative m where
one :: m
times :: m -> m -> m
one :: Multiplicative m => m
times :: Multiplicative m => m -> m -> m
data Log m = Log {
getLog :: m
}
data Exp m = Exp {
getExp :: m
}
Documentation
module Data.Monoid.Additive
Multiplicative Monoids -
class Multiplicative m whereSource
Methods
one :: mSource
times :: m -> m -> mSource
show/hide Instances
Multiplicative Int
Multiplicative Integer
Multiplicative BoolRing
Monoid m => Multiplicative ([] m)
Integral m => Multiplicative (Ratio m)
Monoid n => Multiplicative (IO n)
Monoid m => Multiplicative (Maybe m)
Monoid n => Multiplicative (ZipList n)
Monoid n => Multiplicative (STM n)
Monoid m => Multiplicative (Seq m)
Monoid m => Multiplicative (Identity m)
Multiplicative m => Multiplicative (Self m)
Multiplicative m => Multiplicative (FromString m)
Monoid m => Multiplicative (Exp m)
Num a => Multiplicative (Tropical a)
Ord a => Multiplicative (Priority a)
(Bounded a, Ord a) => Multiplicative (Order a)
Num a => Multiplicative (FromNum a)
Monoid m => Multiplicative (Const m a)
Monoid n => Multiplicative (ST s n)
Monoid n => Multiplicative (ST s n)
Monoid m => Multiplicative (Cont r m)
(Monoid w, Monoid m) => Multiplicative (Writer w m)
(Monoid w, Monoid m) => Multiplicative (Writer w m)
Monoid m => Multiplicative (State s m)
Monoid m => Multiplicative (State s m)
Monoid m => Multiplicative (Reader e m)
(Measured v m, Monoid m) => Multiplicative (FingerTree v m)
(Alternative f, Monoid a) => Multiplicative (WrappedApplicative f a)
(Monad m, Monoid a) => Multiplicative (WrappedMonad m a)
Module r m => Multiplicative (D r m)
(Monad m, Monoid n) => Multiplicative (ContT r m n)
(Monad m, Monoid w, Monoid n) => Multiplicative (WriterT w m n)
(Monad m, Monoid w, Monoid n) => Multiplicative (WriterT w m n)
(Monad m, Monoid n) => Multiplicative (StateT s m n)
(Monad m, Monoid n) => Multiplicative (StateT s m n)
(Monad m, Monoid n) => Multiplicative (ReaderT e m n)
(Monoid w, Monoid m) => Multiplicative (RWS r w s m)
(Monoid w, Monoid m) => Multiplicative (RWS r w s m)
(Stream s m t, Monoid n) => Multiplicative (ParsecT s u m n)
(Monad m, Monoid w, Monoid n) => Multiplicative (RWST r w s m n)
(Monad m, Monoid w, Monoid n) => Multiplicative (RWST r w s m n)
one :: Multiplicative m => mSource
times :: Multiplicative m => m -> m -> mSource
Multiplicative to Monoid -
data Log m Source
Convert a Multiplicative into a Monoid. Mnemonic: Log a + Log b = Log (a * b) -
Constructors
Log
getLog :: m
show/hide Instances
Monoid to Multiplicative -
data Exp m Source
Convert a Monoid into a Multiplicative. Mnemonic: Exp a * Exp b = Exp (a + b) -
Constructors
Exp
getExp :: m
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Multiplicative.html hunk ./dist/doc/html/monoids/Data-Monoid-Ord.html 1 - - -Data.Monoid.Ord
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Ord
Contents
Max -
Min -
MaxPriority: Max semigroup w/ added bottom -
MinPriority: Min semigroup w/ added top -
Synopsis
module Data.Monoid.Reducer
newtype Max a = Max {
getMax :: a
}
newtype Min a = Min {
getMin :: a
}
newtype MaxPriority a = MaxPriority {
getMaxPriority :: Maybe a
}
minfinity :: MaxPriority a
newtype MinPriority a = MinPriority {
getMinPriority :: Maybe a
}
infinity :: MinPriority a
Documentation
module Data.Monoid.Reducer
Max -
newtype Max a Source
The Monoid (max,minBound) -
Constructors
Max
getMax :: a
show/hide Instances
Functor Max
Pointed Max
Copointed Max
(Ord a, Bounded a) => Reducer a (Max a)
Bounded a => Bounded (Max a)
Eq a => Eq (Max a)
Ord a => Ord (Max a)
Read a => Read (Max a)
Show a => Show (Max a)
(Ord a, Bounded a) => Monoid (Max a)
Min -
newtype Min a Source
The Monoid given by (min,maxBound) -
Constructors
Min
getMin :: a
show/hide Instances
Functor Min
Pointed Min
Copointed Min
(Ord a, Bounded a) => Reducer a (Min a)
Bounded a => Bounded (Min a)
Eq a => Eq (Min a)
Ord a => Ord (Min a)
Read a => Read (Min a)
Show a => Show (Min a)
(Ord a, Bounded a) => Monoid (Min a)
MaxPriority: Max semigroup w/ added bottom -
newtype MaxPriority a Source
The Monoid (max,Nothing) over Maybe a where Nothing is the bottom element -
Constructors
MaxPriority
getMaxPriority :: Maybe a
show/hide Instances
minfinity :: MaxPriority aSource
MinPriority: Min semigroup w/ added top -
newtype MinPriority a Source
The Monoid (min,Nothing) over Maybe a where Nothing is the top element -
Constructors
MinPriority
getMinPriority :: Maybe a
show/hide Instances
infinity :: MinPriority aSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Ord.html hunk ./dist/doc/html/monoids/Data-Monoid-Reducer-Char.html 1 - - -Data.Monoid.Reducer.Char
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Reducer.Char
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Synopsis
module Data.Monoid.Reducer
class Reducer Char m => CharReducer m where
fromChar :: Char -> m
invalidChar :: [Word8] -> m
invalidChar :: CharReducer m => [Word8] -> m
fromChar :: CharReducer m => Char -> m
Documentation
module Data.Monoid.Reducer
class Reducer Char m => CharReducer m whereSource
Provides a mechanism for the UTF8 Monoid to report invalid characters to one or more monoids. -
Methods
fromChar :: Char -> mSource
invalidChar :: [Word8] -> mSource
show/hide Instances
invalidChar :: CharReducer m => [Word8] -> mSource
fromChar :: CharReducer m => Char -> mSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Reducer-Char.html hunk ./dist/doc/html/monoids/Data-Monoid-Reducer-With.html 1 - - -Data.Monoid.Reducer.With
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Reducer.With
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Synopsis
module Data.Monoid.Reducer
newtype WithReducer c m = WithReducer {
withoutReducer :: c
}
Documentation
module Data.Monoid.Reducer
newtype WithReducer c m Source
If m is a c-Reducer, then m is (c WithReducer m)-Reducer - This can be used to quickly select a Reducer for use as a FingerTree - measure. -
Constructors
WithReducer
withoutReducer :: c
show/hide Instances
Reducer c m => Measured m (WithReducer c m)
Reducer c m => Reducer (WithReducer c m) m
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Reducer-With.html hunk ./dist/doc/html/monoids/Data-Monoid-Reducer.html 1 - - -Data.Monoid.Reducer
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Reducer
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
A c-Reducer is a Monoid with a canonical mapping from c to the Monoid. - This unit acts in many ways like return for a Monad but is limited - to a single type. -
Synopsis
class Monoid m => Reducer c m where
unit :: c -> m
snoc :: m -> c -> m
cons :: c -> m -> m
unit :: Reducer c m => c -> m
snoc :: Reducer c m => m -> c -> m
cons :: Reducer c m => c -> m -> m
foldMapReduce :: (Foldable f, Reducer e m) => (a -> e) -> f a -> m
foldReduce :: (Foldable f, Reducer e m) => f e -> m
pureUnit :: (Applicative f, Reducer c n) => c -> f n
returnUnit :: (Monad m, Reducer c n) => c -> m n
Documentation
class Monoid m => Reducer c m whereSource

This type may be best read infix. A c Reducer m is a Monoid m that maps - values of type c through unit to values of type m. A c-Reducer may also - supply operations which tack-on another c to an existing Monoid m on the left - or right. These specialized reductions may be more efficient in some scenarios - and are used when appropriate by a Generator. The names cons and snoc work - by analogy to the synonymous operations in the list monoid. -

This class deliberately avoids functional-dependencies, so that () can be a c-Reducer - for all c, and so many common reducers can work over multiple types, for instance, - First and Last may reduce both a and Maybe a. Since a Generator has a fixed element - type, the input to the reducer is generally known and extracting from the monoid usually - is sufficient to fix the result type. Combinators are available for most scenarios where - this is not the case, and the few remaining cases can be handled by using an explicit - type annotation. -

Minimal definition: unit or snoc -

Methods
unit :: c -> mSource
Convert a value into a Monoid -
snoc :: m -> c -> mSource
Append a value to a Monoid for use in left-to-right reduction -
cons :: c -> m -> mSource
Prepend a value onto a Monoid for use during right-to-left reduction -
show/hide Instances
Reducer Bool All
Reducer Bool All
Reducer Bool Any
Reducer Bool Any
Reducer Bool BoolRing
Reducer Bool BoolRing
Reducer Int IntSet
Reducer Int IntSet
Reducer c ()
Reducer Char (SourcePosition file)
Reducer Char (SourcePosition file)
Reducer Char m => Reducer Char (Unlined m)
Reducer Char m => Reducer Char (Unlined m)
Reducer Char m => Reducer Char (Unspaced m)
Reducer Char m => Reducer Char (Unspaced m)
Reducer Char m => Reducer Char (Lines m)
Reducer Char m => Reducer Char (Lines m)
Reducer Char m => Reducer Char (Words m)
Reducer Char m => Reducer Char (Words m)
Reducer Char m => Reducer Char (FromString m)
Reducer Char m => Reducer Char (FromString m)
Num a => Reducer Integer (FromNum a)
Num a => Reducer Integer (FromNum a)
CharReducer m => Reducer Word8 (UTF8 m)
CharReducer m => Reducer Word8 (UTF8 m)
Ord a => Reducer a (Set a)
Reducer a (Seq a)
Reducer a (Last a)
Reducer a (First a)
Num a => Reducer a (Product a)
Num a => Reducer a (Sum a)
Monoid a => Reducer a (Dual a)
Reducer c ([] c)
HasUnion f => Reducer f (Union f)
Monoid m => Reducer m (Self m)
(Ord a, Bounded a) => Reducer a (Min a)
(Ord a, Bounded a) => Reducer a (Max a)
Ord a => Reducer a (Tropical a)
Ord a => Reducer a (Priority a)
(Bounded a, Ord a) => Reducer a (Order a)
Measured v a => Reducer a (FingerTree v a)
(Reducer c m, Reducer c n) => Reducer c ((,) m n)
(Reducer c m, Applicative f) => Reducer c (TraversalWith f m)
(Alternative f, Reducer c a) => Reducer c (WrappedApplicative f a)
(Reducer c m, Monad f) => Reducer c (ActionWith f m)
(MonadPlus m, Reducer c a) => Reducer c (WrappedMonad m a)
(Reducer c r, Reducer c m) => Reducer c (D r m)
(Reducer c m, Reducer c n, Reducer c o) => Reducer c ((,,) m n o)
Reducer c m => Reducer c (Mon m m m)
(Stream s m t, Reducer c a) => Reducer c (ParsecT s u m a)
(Reducer c m, Reducer c n, Reducer c o, Reducer c p) => Reducer c ((,,,) m n o p)
Applicative f => Reducer (f a) (Traversal f)
Monad m => Reducer (m a) (Action m)
Reducer (Maybe a) (Last a)
Reducer (Maybe a) (Last a)
Reducer (Maybe a) (First a)
Reducer (Maybe a) (First a)
Ord a => Reducer (Maybe a) (MinPriority a)
Ord a => Reducer (Maybe a) (MinPriority a)
Ord a => Reducer (Maybe a) (MaxPriority a)
Ord a => Reducer (Maybe a) (MaxPriority a)
Ord a => Reducer (Maybe a) (Tropical a)
Ord a => Reducer (Maybe a) (Tropical a)
Ord a => Reducer (MinPriority a) (Tropical a)
Ord a => Reducer (MinPriority a) (Tropical a)
Ord a => Reducer (MinPriority a) (Priority a)
Ord a => Reducer (MinPriority a) (Priority a)
Ord a => Reducer (MaxPriority a) (Priority a)
Ord a => Reducer (MaxPriority a) (Priority a)
(HasUnionWith f, Monoid m) => Reducer (f m) (UnionWith f m)
Reducer c m => Reducer (WithReducer c m) m
Reducer (a -> a) (Endo a)
Reducer (a -> a) (Endo a)
Reducer ((,) Int v) (IntMap v)
Reducer ((,) Int v) (IntMap v)
Ord k => Reducer ((,) k v) (Map k v)
Ord k => Reducer ((,) k v) (Map k v)
(Integral n, Reducer c m) => Reducer ((,) n c) (RLE n m)
(Integral n, Reducer c m) => Reducer ((,) n c) (RLE n m)
unit :: Reducer c m => c -> mSource
Convert a value into a Monoid -
snoc :: Reducer c m => m -> c -> mSource
Append a value to a Monoid for use in left-to-right reduction -
cons :: Reducer c m => c -> m -> mSource
Prepend a value onto a Monoid for use during right-to-left reduction -
foldMapReduce :: (Foldable f, Reducer e m) => (a -> e) -> f a -> mSource
Apply a Reducer to a Foldable container, after mapping the contents into a suitable form for reduction. -
foldReduce :: (Foldable f, Reducer e m) => f e -> mSource
Apply a Reducer to a Foldable mapping each element through unit -
pureUnit :: (Applicative f, Reducer c n) => c -> f nSource
returnUnit :: (Monad m, Reducer c n) => c -> m nSource
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Reducer.html hunk ./dist/doc/html/monoids/Data-Monoid-Self.html 1 - - -Data.Monoid.Self
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Self
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

A simple Monoid transformer that takes a Monoid m and produces a new m-Reducer named Self m -

This is useful when you have a generator that already contains monoidal values or someone supplies - the map to the monoid in the form of a function rather than as a Reducer instance. You can just - getSelf . reduce or getSelf . mapReduce f in those scenarios. These behaviors are encapsulated - into the fold and foldMap combinators in Data.Monoid.Combinators respectively. -

Documentation
module Data.Monoid.Reducer
newtype Self m Source
Constructors
Self
getSelf :: m
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Self.html hunk ./dist/doc/html/monoids/Data-Monoid-Union.html 1 - - -Data.Monoid.Union
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Monoid.Union
Contents
Unions of Containers -
Unions of Containers of Monoids -
Synopsis
module Data.Monoid.Reducer
class HasUnion f where
empty :: f
union :: f -> f -> f
empty :: HasUnion f => f
union :: HasUnion f => f -> f -> f
newtype Union f = Union {
getUnion :: f
}
class HasUnionWith f where
unionWith :: (a -> a -> a) -> f a -> f a -> f a
emptyWith :: f a
emptyWith :: HasUnionWith f => f a
unionWith :: HasUnionWith f => (a -> a -> a) -> f a -> f a -> f a
newtype UnionWith f m = UnionWith {
getUnionWith :: f m
}
Documentation
module Data.Monoid.Reducer
Unions of Containers -
class HasUnion f whereSource
A Container suitable for the Union Monoid -
Methods
empty :: fSource
union :: f -> f -> fSource
show/hide Instances
empty :: HasUnion f => fSource
union :: HasUnion f => f -> f -> fSource
newtype Union f Source
The Monoid (union,empty) -
Constructors
Union
getUnion :: f
show/hide Instances
Functor Union
Pointed Union
Copointed Union
HasUnion f => Reducer f (Union f)
Eq f => Eq (Union f)
Ord f => Ord (Union f)
Read f => Read (Union f)
Show f => Show (Union f)
HasUnion f => Monoid (Union f)
Unions of Containers of Monoids -
class HasUnionWith f whereSource
Polymorphic containers that we can supply an operation to handle unions with -
Methods
unionWith :: (a -> a -> a) -> f a -> f a -> f aSource
emptyWith :: f aSource
show/hide Instances
emptyWith :: HasUnionWith f => f aSource
unionWith :: HasUnionWith f => (a -> a -> a) -> f a -> f a -> f aSource
newtype UnionWith f m Source
The Monoid ('unionWith mappend',empty) for containers full of monoids. -
Constructors
UnionWith
getUnionWith :: f m
show/hide Instances
Monad f => Monad (UnionWith f)
Functor f => Functor (UnionWith f)
Pointed f => Pointed (UnionWith f)
(HasUnionWith f, Monoid m) => Reducer (f m) (UnionWith f m)
Eq (f m) => Eq (UnionWith f m)
Ord (f m) => Ord (UnionWith f m)
Read (f m) => Read (UnionWith f m)
Show (f m) => Show (UnionWith f m)
(HasUnionWith f, Monoid m) => Monoid (UnionWith f m)
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Monoid-Union.html hunk ./dist/doc/html/monoids/Data-Ring-Boolean.html 1 - - -Data.Ring.Boolean
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Boolean
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
A Boolean Ring over Bool. Note well that the mappend of this ring is - symmetric difference and not disjunction like you might expect. To get that - you should use use Ord from Data.Ring.Semi.Ord.Order on Bool to get the '&&'/'||'-based - distributive-lattice SemiRing -
Documentation
module Data.Ring
newtype BoolRing Source
Constructors
BoolRing
getBoolRing :: Bool
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Boolean.html hunk ./dist/doc/html/monoids/Data-Ring-FromNum.html 1 - - -Data.Ring.FromNum
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.FromNum
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
A wrapper that lies for you and claims any instance of Num is a Ring. - Who knows, for your type it might even be telling the truth! -
Documentation
module Data.Ring
newtype FromNum a Source
Constructors
FromNum
getFromNum :: a
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-FromNum.html hunk ./dist/doc/html/monoids/Data-Ring-Module-AutomaticDifferentiation.html 1 - - -Data.Ring.Module.AutomaticDifferentiation
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Module.AutomaticDifferentiation
Documentation
module Data.Ring.Module
data D r m Source
show/hide Instances
(Reducer c r, Reducer c m) => Reducer c (D r m)
(Monoid r, Monoid m) => Monoid (D r m)
Module r m => Multiplicative (D r m)
(LeftSemiNearRing r, Module r m) => LeftSemiNearRing (D r m)
(RightSemiNearRing r, Module r m) => RightSemiNearRing (D r m)
(SemiRing r, Module r m) => SemiRing (D r m)
(Group r, Module r m, Group m) => Group (D r m)
(Ring r, Module r m, Group m) => Ring (D r m)
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Module-AutomaticDifferentiation.html hunk ./dist/doc/html/monoids/Data-Ring-Module.html 1 - - -Data.Ring.Module
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Module
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Left- and right- modules over rings, semirings, and Seminearrings. - To avoid a proliferation of classes. These only require that there - be an addition and multiplication operation for the Ring -
Synopsis
module Data.Ring
class (Monoid r, Multiplicative r, Monoid m) => LeftModule r m where
(*.) :: r -> m -> m
(*.) :: LeftModule r m => r -> m -> m
class (Monoid r, Multiplicative r, Monoid m) => RightModule r m where
(.*) :: m -> r -> m
(.*) :: RightModule r m => m -> r -> m
class (LeftModule r m, RightModule r m) => Module r m
Documentation
module Data.Ring
class (Monoid r, Multiplicative r, Monoid m) => LeftModule r m whereSource
 (x * y) *. m = x * (y *. m)
Methods
(*.) :: r -> m -> mSource
show/hide Instances
(*.) :: LeftModule r m => r -> m -> mSource
class (Monoid r, Multiplicative r, Monoid m) => RightModule r m whereSource
 (m .* x) * y = m .* (x * y)
Methods
(.*) :: m -> r -> mSource
show/hide Instances
(.*) :: RightModule r m => m -> r -> mSource
class (LeftModule r m, RightModule r m) => Module r m Source
 (x *. m) .* y = x *. (m .* y)
show/hide Instances
(Module r m, Applicative f) => Module r (TraversalWith f m)
(Module r m, Monad f) => Module r (ActionWith f m)
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Module.html hunk ./dist/doc/html/monoids/Data-Ring-Semi-Near.html 1 - - -Data.Ring.Semi.Near
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Semi.Near
Portabilityportable (instances use MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Defines left- and right- seminearrings. Every MonadPlus wrapped around - a Monoid qualifies due to the distributivity of (>>=) over mplus. -

See http://conway.rutgers.edu/~ccshan/wiki/blog/posts/WordNumbers1/ -

Synopsis
module Data.Monoid.Multiplicative
class (Multiplicative m, Monoid m) => LeftSemiNearRing m
class (Multiplicative m, Monoid m) => RightSemiNearRing m
Documentation
module Data.Monoid.Multiplicative
class (Multiplicative m, Monoid m) => LeftSemiNearRing m Source
a * (b + c) = (a * b) + (a * c)
show/hide Instances
class (Multiplicative m, Monoid m) => RightSemiNearRing m Source
(a + b) * c = (a * c) + (b * c)
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Semi-Near.html hunk ./dist/doc/html/monoids/Data-Ring-Semi-Ord.html 1 - - -Data.Ring.Semi.Ord
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Semi.Ord
Stabilityexperimental
Maintainerekmett@gmail.com
Description
Turn an instance of Ord into a SemiRing over max and min -
Synopsis
module Data.Ring.Semi
newtype Order a = Order {
getOrder :: a
}
data Priority a
= MinBound
| Priority a
| MaxBound
Documentation
module Data.Ring.Semi
newtype Order a Source
A SemiRing using a type's built-in Bounded instance. -
Constructors
Order
getOrder :: a
show/hide Instances
Functor Order
Pointed Order
Copointed Order
(Bounded a, Ord a) => Reducer a (Order a)
Bounded a => Bounded (Order a)
Eq a => Eq (Order a)
Ord a => Ord (Order a)
Read a => Read (Order a)
Show a => Show (Order a)
Arbitrary a => Arbitrary (Order a)
(Bounded a, Ord a) => Monoid (Order a)
(Bounded a, Ord a) => Multiplicative (Order a)
(Bounded a, Ord a) => LeftSemiNearRing (Order a)
(Bounded a, Ord a) => RightSemiNearRing (Order a)
(Bounded a, Ord a) => SemiRing (Order a)
data Priority a Source
A SemiRing which adds minBound and maxBound to a pre-existing type. -
Constructors
MinBound
Priority a
MaxBound
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Semi-Ord.html hunk ./dist/doc/html/monoids/Data-Ring-Semi-Tropical.html 1 - - -Data.Ring.Semi.Tropical
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Semi.Tropical
Contents
Tropical Semirings -
Synopsis
module Data.Monoid.Reducer
module Data.Ring.Semi
infinity :: Tropical a
newtype Tropical a = Tropical {
getTropical :: Maybe a
}
Documentation
module Data.Monoid.Reducer
module Data.Ring.Semi
Tropical Semirings -
infinity :: Tropical aSource
newtype Tropical a Source

The SemiRing (min,+) over a extended with infinity. - When a has a Num instance with an addition that respects order, then this is - transformed into a tropical semiring. It is assumed that 0 is the least element - of a. -

http://hal.archives-ouvertes.fr/docs/00/11/37/79/PDF/Tropical.pdf -

Constructors
Tropical
getTropical :: Maybe a
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Semi-Tropical.html hunk ./dist/doc/html/monoids/Data-Ring-Semi.html 1 - - -Data.Ring.Semi
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Semi
Portabilitynon-portable (MPTCs)
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Synopsis
module Data.Ring.Semi.Near
class (RightSemiNearRing a, LeftSemiNearRing a) => SemiRing a
Documentation
module Data.Ring.Semi.Near
class (RightSemiNearRing a, LeftSemiNearRing a) => SemiRing a Source
A SemiRing is an instance of both Multiplicative and Monoid where - times distributes over plus. -
show/hide Instances
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Semi.html hunk ./dist/doc/html/monoids/Data-Ring-Sugar.html 1 - - -Data.Ring.Sugar
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring.Sugar
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description

Syntactic sugar for working with rings that conflicts with names from the Prelude. -

 import Prelude hiding ((-), (+), (*), negate, subtract)
- import Data.Ring.Sugar
-
Documentation
module Data.Monoid.Multiplicative.Sugar
module Data.Ring.Semi.Near
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring-Sugar.html hunk ./dist/doc/html/monoids/Data-Ring.html 1 - - -Data.Ring
 monoids-0.1.8: Lots of MonoidsSource codeContentsIndex
Data.Ring
Documentation
module Data.Group
module Data.Ring.Semi
class (Group a, SemiRing a) => Ring a Source
show/hide Instances
Ring BoolRing
Num a => Ring (FromNum a)
(Ring r, Module r m, Group m) => Ring (D r m)
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/Data-Ring.html hunk ./dist/doc/html/monoids/doc-index.html 1 - - -monoids-0.1.8: Lots of Monoids (Index)
 monoids-0.1.8: Lots of MonoidsContentsIndex
Search:
*
*.
+
-
.
.*
<<<
>>>
Action
1 (Type/Class)
2 (Data Constructor)
ActionWith
1 (Type/Class)
2 (Data Constructor)
All
1 (Data Constructor)
2 (Type/Class)
all
and
Any
1 (Data Constructor)
2 (Type/Class)
any
appEndo
BoolRing
1 (Type/Class)
2 (Data Constructor)
Category
Char8
1 (Type/Class)
2 (Data Constructor)
CharReducer
concatMap
cons
cycle
D
decode
Dual
1 (Data Constructor)
2 (Type/Class)
Elem
elem
empty
emptyWith
encode
Endo
1 (Data Constructor)
2 (Type/Class)
Exp
1 (Type/Class)
2 (Data Constructor)
filter
find
First
1 (Data Constructor)
2 (Type/Class)
fold
foldMap
foldMapReduce
foldReduce
forM_
for_
fromChar
FromNum
1 (Type/Class)
2 (Data Constructor)
FromString
1 (Type/Class)
2 (Data Constructor)
GEndo
1 (Type/Class)
2 (Data Constructor)
Generator
getAction
getActionWith
getAll
getAny
getBoolRing
getChar8
getDual
getExp
getFirst
getFromNum
getFromString
getGEndo
getKeys
getLast
getLog
getLZ78
getMax
getMaxPriority
getMin
getMinPriority
getMon
getOrder
getProduct
getRLE
getSelf
getSum
getTraversal
getTraversalWith
getTropical
getUnion
getUnionWith
getValues
getWrappedApplicative
getWrappedMonad
gnegate
Group
gsubtract
HasUnion
HasUnionWith
id
infinity
1 (Function)
2 (Function)
invalidChar
Keys
1 (Type/Class)
2 (Data Constructor)
Last
1 (Data Constructor)
2 (Type/Class)
LeftModule
LeftSemiNearRing
Lines
linesFrom
Log
1 (Type/Class)
2 (Data Constructor)
LZ78
1 (Type/Class)
2 (Data Constructor)
mapFrom
mapM_
mappend
mapReduce
mapTo
Max
1 (Type/Class)
2 (Data Constructor)
MaxBound
MaxPriority
1 (Type/Class)
2 (Data Constructor)
mconcat
mempty
Min
1 (Type/Class)
2 (Data Constructor)
MinBound
minfinity
MinPriority
1 (Type/Class)
2 (Data Constructor)
minus
Module
Mon
1 (Type/Class)
2 (Data Constructor)
Monoid
Multiplicative
negate
nextTab
notElem
one
or
Order
1 (Type/Class)
2 (Data Constructor)
plus
Priority
1 (Type/Class)
2 (Data Constructor)
Product
1 (Data Constructor)
2 (Type/Class)
product
pureUnit
reduce
Reducer
repeat
replicate
1 (Function)
2 (Function)
returnUnit
RightModule
RightSemiNearRing
Ring
RLE
1 (Type/Class)
2 (Data Constructor)
runLines
runUnlined
runUnspaced
runUTF8
runWords
Self
1 (Type/Class)
2 (Data Constructor)
SemiRing
showSourcePosition
snoc
snocAction
snocTraversal
SourceColumn
sourceColumn
SourceLine
sourceLine
SourcePosition
startOfFile
subtract
Sum
1 (Data Constructor)
2 (Type/Class)
sum
times
Traversal
1 (Type/Class)
2 (Data Constructor)
TraversalWith
1 (Type/Class)
2 (Data Constructor)
traverse_
Tropical
1 (Type/Class)
2 (Data Constructor)
Union
1 (Type/Class)
2 (Data Constructor)
union
UnionWith
1 (Type/Class)
2 (Data Constructor)
unionWith
unit
Unlined
Unspaced
UTF8
Values
1 (Type/Class)
2 (Data Constructor)
withoutReducer
WithReducer
1 (Type/Class)
2 (Data Constructor)
Words
wordsFrom
WrappedApplicative
1 (Type/Class)
2 (Data Constructor)
WrappedMonad
1 (Type/Class)
2 (Data Constructor)
zero
rmfile ./dist/doc/html/monoids/doc-index.html hunk ./dist/doc/html/monoids/haddock-util.js 1 -// Haddock JavaScript utilities -function toggle(button,id) -{ - var n = document.getElementById(id).style; - if (n.display == "none") - { - button.src = "minus.gif"; - n.display = "block"; - } - else - { - button.src = "plus.gif"; - n.display = "none"; - } -} - - -var max_results = 75; // 50 is not enough to search for map in the base libraries -var shown_range = null; -var last_search = null; - -function quick_search() -{ - perform_search(false); -} - -function full_search() -{ - perform_search(true); -} - - -function perform_search(full) -{ - var text = document.getElementById("searchbox").value.toLowerCase(); - if (text == last_search && !full) return; - last_search = text; - - var table = document.getElementById("indexlist"); - var status = document.getElementById("searchmsg"); - var children = table.firstChild.childNodes; - - // first figure out the first node with the prefix - var first = bisect(-1); - var last = (first == -1 ? -1 : bisect(1)); - - if (first == -1) - { - table.className = ""; - status.innerHTML = "No results found, displaying all"; - } - else if (first == 0 && last == children.length - 1) - { - table.className = ""; - status.innerHTML = ""; - } - else if (last - first >= max_results && !full) - { - table.className = ""; - status.innerHTML = "More than " + max_results + ", press Search to display"; - } - else - { - // decide what you need to clear/show - if (shown_range) - setclass(shown_range[0], shown_range[1], "indexrow"); - setclass(first, last, "indexshow"); - shown_range = [first, last]; - table.className = "indexsearch"; - status.innerHTML = ""; - } - - - function setclass(first, last, status) - { - for (var i = first; i <= last; i++) - { - children[i].className = status; - } - } - - - // do a binary search, treating 0 as ... - // return either -1 (no 0's found) or location of most far match - function bisect(dir) - { - var first = 0, finish = children.length - 1; - var mid, success = false; - - while (finish - first > 3) - { - mid = Math.floor((finish + first) / 2); - - var i = checkitem(mid); - if (i == 0) i = dir; - if (i == -1) - finish = mid; - else - first = mid; - } - var a = (dir == 1 ? first : finish); - var b = (dir == 1 ? finish : first); - for (var i = b; i != a - dir; i -= dir) - { - if (checkitem(i) == 0) return i; - } - return -1; - } - - - // from an index, decide what the result is - // 0 = match, -1 is lower, 1 is higher - function checkitem(i) - { - var s = getitem(i).toLowerCase().substr(0, text.length); - if (s == text) return 0; - else return (s > text ? -1 : 1); - } - - - // from an index, get its string - // this abstracts over alternates - function getitem(i) - { - for ( ; i >= 0; i--) - { - var s = children[i].firstChild.firstChild.data; - if (s.indexOf(' ') == -1) - return s; - } - return ""; // should never be reached - } -} rmfile ./dist/doc/html/monoids/haddock-util.js hunk ./dist/doc/html/monoids/haddock.css 1 -/* -------- Global things --------- */ - -BODY { - background-color: #ffffff; - color: #000000; - font-family: sans-serif; - } - -A:link { color: #0000e0; text-decoration: none } -A:visited { color: #0000a0; text-decoration: none } -A:hover { background-color: #e0e0ff; text-decoration: none } - -TABLE.vanilla { - width: 100%; - border-width: 0px; - /* I can't seem to specify cellspacing or cellpadding properly using CSS... */ -} - -TABLE.vanilla2 { - border-width: 0px; -} - -/* font is a little too small in MSIE */ -TT { font-size: 100%; } -PRE { font-size: 100%; } - -LI P { margin: 0pt } - -TD { - border-width: 0px; -} - -TABLE.narrow { - border-width: 0px; -} - -TD.s8 { height: 8px; } -TD.s15 { height: 15px; } - -SPAN.keyword { text-decoration: underline; } - -/* Resize the buttom image to match the text size */ -IMG.coll { width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em } - -/* --------- Contents page ---------- */ - -DIV.node { - padding-left: 3em; -} - -DIV.cnode { - padding-left: 1.75em; -} - -SPAN.pkg { - position: absolute; - left: 50em; -} - -/* --------- Documentation elements ---------- */ - -TD.children { - padding-left: 25px; - } - -TD.synopsis { - padding: 2px; - background-color: #f0f0f0; - font-family: monospace - } - -TD.decl { - padding: 2px; - background-color: #f0f0f0; - font-family: monospace; - vertical-align: top; - } - -TD.topdecl { - padding: 2px; - background-color: #f0f0f0; - font-family: monospace; - vertical-align: top; -} - -TABLE.declbar { - border-spacing: 0px; - } - -TD.declname { - width: 100%; - } - -TD.declbut { - padding-left: 5px; - padding-right: 5px; - border-left-width: 1px; - border-left-color: #000099; - border-left-style: solid; - white-space: nowrap; - font-size: small; - } - -/* - arg is just like decl, except that wrapping is not allowed. It is - used for function and constructor arguments which have a text box - to the right, where if wrapping is allowed the text box squashes up - the declaration by wrapping it. -*/ -TD.arg { - padding: 2px; - background-color: #f0f0f0; - font-family: monospace; - vertical-align: top; - white-space: nowrap; - } - -TD.recfield { padding-left: 20px } - -TD.doc { - padding-top: 2px; - padding-left: 10px; - } - -TD.ndoc { - padding: 2px; - } - -TD.rdoc { - padding: 2px; - padding-left: 10px; - width: 100%; - } - -TD.body { - padding-left: 10px - } - -TD.pkg { - width: 100%; - padding-left: 10px -} - -TABLE.indexsearch TR.indexrow { - display: none; -} -TABLE.indexsearch TR.indexshow { - display: table-row; -} - -TD.indexentry { - vertical-align: top; - padding-right: 10px - } - -TD.indexannot { - vertical-align: top; - padding-left: 20px; - white-space: nowrap - } - -TD.indexlinks { - width: 100% - } - -/* ------- Section Headings ------- */ - -TD.section1 { - padding-top: 15px; - font-weight: bold; - font-size: 150% - } - -TD.section2 { - padding-top: 10px; - font-weight: bold; - font-size: 130% - } - -TD.section3 { - padding-top: 5px; - font-weight: bold; - font-size: 110% - } - -TD.section4 { - font-weight: bold; - font-size: 100% - } - -/* -------------- The title bar at the top of the page */ - -TD.infohead { - color: #ffffff; - font-weight: bold; - padding-right: 10px; - text-align: left; -} - -TD.infoval { - color: #ffffff; - padding-right: 10px; - text-align: left; -} - -TD.topbar { - background-color: #000099; - padding: 5px; -} - -TD.title { - color: #ffffff; - padding-left: 10px; - width: 100% - } - -TD.topbut { - padding-left: 5px; - padding-right: 5px; - border-left-width: 1px; - border-left-color: #ffffff; - border-left-style: solid; - white-space: nowrap; - } - -TD.topbut A:link { - color: #ffffff - } - -TD.topbut A:visited { - color: #ffff00 - } - -TD.topbut A:hover { - background-color: #6060ff; - } - -TD.topbut:hover { - background-color: #6060ff - } - -TD.modulebar { - background-color: #0077dd; - padding: 5px; - border-top-width: 1px; - border-top-color: #ffffff; - border-top-style: solid; - } - -/* --------- The page footer --------- */ - -TD.botbar { - background-color: #000099; - color: #ffffff; - padding: 5px - } -TD.botbar A:link { - color: #ffffff; - text-decoration: underline - } -TD.botbar A:visited { - color: #ffff00 - } -TD.botbar A:hover { - background-color: #6060ff - } - rmfile ./dist/doc/html/monoids/haddock.css binary ./dist/doc/html/monoids/haskell_icon.gif oldhex *47494638376110001000f70f00000000800000008000808000000080800080008080c0c0c08080 *80ff000000ff00ffff000000ffff00ff00ffffffffff0000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0021f90401000000002c000000001000100007086c0001007840b0a0418202073e38b0b021c387 *07143e2440c0a143040e091cd0787021c686151f84347800e343901d4b12646870e44a930d0952 *3ca832a6cc990555b2bc2992e4c79d3847ea2c88b3a7c89a2c8b8aa43874e941a60810003840b5 *aa55aa511346ddca75abc080003b newhex * rmfile ./dist/doc/html/monoids/haskell_icon.gif hunk ./dist/doc/html/monoids/index.html 1 - - -monoids-0.1.8: Lots of Monoids
 monoids-0.1.8: Lots of MonoidsContentsIndex
monoids-0.1.8: Lots of Monoids
Lots of Monoids -
Modules
show/hideData
show/hideData.Group
Data.Group.Combinators
Data.Group.Sugar
show/hideMonoid
show/hideData.Monoid.Additive
Data.Monoid.Additive.Sugar
Data.Monoid.Applicative
Data.Monoid.Categorical
Data.Monoid.Combinators
Data.Monoid.FromString
show/hideData.Monoid.Generator
Data.Monoid.Generator.LZ78
Data.Monoid.Instances
show/hideLexical
Data.Monoid.Lexical.RunLengthEncoding
Data.Monoid.Lexical.SourcePosition
show/hideUTF8
Data.Monoid.Lexical.UTF8.Decoder
Data.Monoid.Lexical.Words
Data.Monoid.Monad
show/hideData.Monoid.Multiplicative
Data.Monoid.Multiplicative.Sugar
Data.Monoid.Ord
show/hideData.Monoid.Reducer
Data.Monoid.Reducer.Char
Data.Monoid.Reducer.With
Data.Monoid.Self
Data.Monoid.Union
show/hideData.Ring
Data.Ring.Boolean
Data.Ring.FromNum
show/hideData.Ring.Module
Data.Ring.Module.AutomaticDifferentiation
show/hideData.Ring.Semi
Data.Ring.Semi.Near
Data.Ring.Semi.Ord
Data.Ring.Semi.Tropical
Data.Ring.Sugar
Produced by Haddock version 2.3.0
rmfile ./dist/doc/html/monoids/index.html binary ./dist/doc/html/monoids/minus.gif oldhex *47494638396109000900910000fefefe8282820202020000002c00000000090009000002118c8f *a00bc6eb5e0b40583b6596f1a11f14003b newhex * rmfile ./dist/doc/html/monoids/minus.gif binary ./dist/doc/html/monoids/monoids.haddock oldhex *0d0cface0004000000000000f730000000000000e035b700000000000000000000000000000000 *000000000000000100000000000000010000000000000000000000000000000100000000000000 *020000000000000000000000000000000100000000000000030000000000000000000000000000 *000100000000000000040000000000000000000000000000000100000000000000050000000000 *000000000000000000000100000000000000060000000000000000000000000000000100000000 *000000070000000000000000000000000000000100000000000000080000000000000000000000 *0000000002000000000000000900000000000000000000000000000002000000000000000a0000 *0000000000000000000000000002000000000000000b0000000000000000000000000000000300 *0000000000000c00000000000000000000000000000003000000000000000d0000000000000000 *0000000000000003000000000000000e0000000000000000000000000000000400000000000000 *0f0000000000000000000000000000000400000000000000100000000000000000000000000000 *000400000000000000110000000000000000000000000000000400000000000000120000000000 *000000000000000000000400000000000000130000000000000000000000000000000400000000 *000000140000000000000000000000000000000400000000000000150000000000000000000000 *000000000400000000000000160000000000000000000000000000000400000000000000170000 *000000000000000000000000000400000000000000180000000000000000000000000000000400 *0000000000001900000000000000000000000000000004000000000000001a0000000000000000 *0000000000000005000000000000001b0000000000000000000000000000000500000000000000 *1c00000000000000000000000000000006000000000000001d0000000000000000000000000000 *0006000000000000001e00000000000000000000000000000006000000000000001f0000000000 *000000000000000000000600000000000000200000000000000000000000000000000600000000 *000000210000000000000000000000000000000600000000000000220000000000000000000000 *000000000600000000000000230000000000000000000000000000000600000000000000240000 *000000000000000000000000000600000000000000250000000000000000000000000000000600 *000000000000260000000000000000000000000000000600000000000000270000000000000000 *000000000000000600000000000000280000000000000000000000000000000600000000000000 *2900000000000000000000000000000006000000000000002a0000000000000000000000000000 *0006000000000000002b00000000000000000000000000000007000000000000002c0000000000 *0000000000000000000007000000000000002d0000000000000000000000000000000700000000 *0000002e00000000000000000000000000000007000000000000002f0000000000000000000000 *000000000700000000000000300000000000000000000000000000000700000000000000310000 *000000000000000000000000000700000000000000320000000000000000000000000000000700 *000000000000330000000000000000000000000000000800000000000000340000000000000000 *000000000000000800000000000000350000000000000000000000000000000800000000000000 *360000000000000000000000000000000800000000000000370000000000000000000000000000 *000800000000000000380000000000000000000000000000000800000000000000390000000000 *0000000000000000000008000000000000003a0000000000000000000000000000000800000000 *0000003b00000000000000000000000000000008000000000000003c0000000000000000000000 *0000000008000000000000003d00000000000000000000000000000009000000000000003e0000 *0000000000000000000000000009000000000000003f0000000000000000000000000000000900 *000000000000400000000000000000000000000000000a00000000000000410000000000000000 *000000000000000a00000000000000420000000000000000000000000000000a00000000000000 *430000000000000000000000000000000a00000000000000440000000000000000000000000000 *000a00000000000000450000000000000000000000000000000b00000000000000460000000000 *000000000000000000000b00000000000000470000000000000000000000000000000b00000000 *000000480000000000000000000000000000000c00000000000000490000000000000000000000 *000000000c000000000000004a0000000000000000000000000000000c000000000000004b0000 *000000000000000000000000000c000000000000004c0000000000000000000000000000000c00 *0000000000004d0000000000000000000000000000000c000000000000004e0000000000000000 *000000000000000d000000000000004f0000000000000000000000000000000d00000000000000 *500000000000000000000000000000000e00000000000000510000000000000000000000000000 *000f00000000000000520000000000000000000000000000000f00000000000000530000000000 *000000000000000000000f00000000000000540000000000000000000000000000000f00000000 *000000550000000000000000000000000000000f00000000000000560000000000000000000000 *000000000f00000000000000570000000000000000000000000000000f00000000000000580000 *000000000000000000000000000f00000000000000590000000000000000000000000000000f00 *0000000000005a00000000000000000000000000000010000000000000005b0000000000000000 *0000000000000011000000000000005c0000000000000000000000000000001100000000000000 *5d00000000000000000000000000000012000000000000005e0000000000000000000000000000 *0013000000000000005f0000000000000000000000000000001300000000000000600000000000 *000000000000000000001300000000000000610000000000000000000000000000001300000000 *000000620000000000000000000000000000001300000000000000630000000000000000000000 *000000001300000000000000640000000000000000000000000000001300000000000000650000 *000000000000000000000000001300000000000000660000000000000000000000000000001300 *000000000000670000000000000000000000000000001300000000000000680000000000000000 *000000000000001300000000000000690000000000000000000000000000001300000000000000 *6a00000000000000000000000000000013000000000000006b0000000000000000000000000000 *0013000000000000006c00000000000000000000000000000014000000000000006d0000000000 *0000000000000000000014000000000000006e0000000000000000000000000000001400000000 *0000006f0000000000000000000000000000001400000000000000700000000000000000000000 *000000001500000000000000710000000000000000000000000000001500000000000000720000 *000000000000000000000000001500000000000000730000000000000000000000000000001500 *000000000000740000000000000000000000000000001500000000000000750000000000000000 *000000000000001500000000000000760000000000000000000000000000001500000000000000 *770000000000000000000000000000001600000000000000780000000000000000000000000000 *0016000000000000007900000000000000000000000000000016000000000000007a0000000000 *0000000000000000000016000000000000007b0000000000000000000000000000001700000000 *0000007c00000000000000000000000000000018000000000000007d0000000000000000000000 *0000000018000000000000007e00000000000000000000000000000018000000000000007f0000 *000000000000000000000000001900000000000000800000000000000000000000000000001a00 *000000000000810000000000000000000000000000001a00000000000000820000000000000000 *000000000000001a00000000000000830000000000000000000000000000001b00000000000000 *840000000000000000000000000000001b00000000000000850000000000000000000000000000 *001b00000000000000860000000000000000000000000000001c00000000000000870000000000 *000000000000000000001c00000000000000880000000000000000000000000000001c00000000 *000000890000000000000000000000000000001c000000000000008a0000000000000000000000 *000000001c000000000000008b0000000000000000000000000000001d000000000000008c0000 *000000000000000000000000001d000000000000008d0000000000000000000000000000001d00 *0000000000008e0000000000000000000000000000001d000000000000008f0000000000000000 *000000000000001d00000000000000900000000000000000000000000000001d00000000000000 *910000000000000000000000000000001d00000000000000920000000000000000000000000000 *001d00000000000000930000000000000000000000000000001d00000000000000940000000000 *000000000000000000001d00000000000000950000000000000000000000000000001e00000000 *000000960000000000000000000000000000001e00000000000000970000000000000000000000 *000000001e00000000000000980000000000000000000000000000001e00000000000000990000 *000000000000000000000000001e000000000000009a0000000000000000000000000000001e00 *0000000000009b0000000000000000000000000000001e000000000000009c0000000000000000 *000000000000001e000000000000009d0000000000000000000000000000001e00000000000000 *9e0000000000000000000000000000001e000000000000009f0000000000000000000000000000 *001f00000000000000a00000000000000000000000000000001f00000000000000a10000000000 *000000000000000000001f00000000000000a20000000000000000000000000000001f00000000 *000000a30000000000000000000000000000001f00000000000000a40000000000000000000000 *000000001f00000000000000a50000000000000000000000000000001f00000000000000a60000 *000000000000000000000000001f00000000000000a70000000000000000000000000000001f00 *000000000000a80000000000000000000000000000001f00000000000000a90000000000000000 *000000000000001f00000000000000aa0000000000000000000000000000001f00000000000000 *ab0000000000000000000000000000001f00000000000000ac0000000000000000000000000000 *001f00000000000000ad0000000000000000000000000000001f00000000000000ae0000000000 *000000000000000000001f00000000000000af0000000000000000000000000000001f00000000 *000000b00000000000000000000000000000001f00000000000000b10000000000000000000000 *000000001f00000000000000b20000000000000000000000000000001f00000000000000b30000 *000000000000000000000000002000000000000000b40000000000000000000000000000002000 *000000000000b50000000000000000000000000000002000000000000000b60000000000000000 *00000000000000212300000000000000000000000000000022000108000000700000006f000000 *720000007400000061000000620000006c00000065010c00000065000000780000007000000065 *00000072000000690000006d000000650000006e00000074000000610000006c01150000006c00 *000069000000620000007200000061000000720000006900000065000000730000004000000068 *00000061000000730000006b000000650000006c0000006c0000002e0000006f00000072000000 *67000000000000000000000000000000000000010001140000006e0000006f0000006e0000002d *000000700000006f000000720000007400000061000000620000006c0000006500000020000000 *280000004d0000005000000054000000430000007300000029010c000000650000007800000070 *0000006500000072000000690000006d000000650000006e00000074000000610000006c011500 *00006c000000690000006200000072000000610000007200000069000000650000007300000040 *0000006800000061000000730000006b000000650000006c0000006c0000002e0000006f000000 *720000006706000000000000000001030102240000005400000068000000690000007300000020 *00000074000000790000007000000065000000200000006d000000610000007900000020000000 *620000006500000020000000620000006500000073000000740000002000000072000000650000 *00610000006400000020000000690000006e0000006600000069000000780000002e0000002000 *000041000000200107010202000000630000002001040100000000000000000000000000000000 *0000000000000000010202000000200000006d0102060000002000000069000000730000002000 *000061000000200104010000000000000000b70000000000000023000000000000002401020100 *000020010702010000006d01020b00000020000000740000006800000061000000740000002000 *00006d0000006100000070000000730000000a0102100000002000000076000000610000006c00 *0000750000006500000073000000200000006f0000006600000020000000740000007900000070 *00000065000000200107020100000063010209000000200000007400000068000000720000006f *0000007500000067000000680000002001070204000000750000006e0000006900000074010213 *00000020000000740000006f0000002000000076000000610000006c0000007500000065000000 *73000000200000006f000000660000002000000074000000790000007000000065000000200107 *02010000006d0102040000002e0000002000000041000000200107020100000063010201000000 *2d0104010000000000000000000000000000000000000000000000000101020a00000020000000 *6d000000610000007900000020000000610000006c000000730000006f0000000a010229000000 *20000000730000007500000070000000700000006c00000079000000200000006f000000700000 *0065000000720000006100000074000000690000006f0000006e00000073000000200000007700 *000068000000690000006300000068000000200000007400000061000000630000006b0000002d *0000006f0000006e00000020000000610000006e0000006f000000740000006800000065000000 *7200000020010702010000006301021000000020000000740000006f0000002000000061000000 *6e000000200000006500000078000000690000007300000074000000690000006e000000670000 *00200104010000000000000000b700000000000000230000000000000024010201000000200107 *02010000006d01020d000000200000006f0000006e000000200000007400000068000000650000 *00200000006c0000006500000066000000740000000a010250000000200000006f000000720000 *002000000072000000690000006700000068000000740000002e00000020000000540000006800 *000065000000730000006500000020000000730000007000000065000000630000006900000061 *0000006c000000690000007a000000650000006400000020000000720000006500000064000000 *750000006300000074000000690000006f0000006e00000073000000200000006d000000610000 *0079000000200000006200000065000000200000006d0000006f00000072000000650000002000 *0000650000006600000066000000690000006300000069000000650000006e0000007400000020 *000000690000006e00000020000000730000006f0000006d000000650000002000000073000000 *63000000650000006e0000006100000072000000690000006f000000730000000a010224000000 *20000000610000006e000000640000002000000061000000720000006500000020000000750000 *00730000006500000064000000200000007700000068000000650000006e000000200000006100 *00007000000070000000720000006f000000700000007200000069000000610000007400000065 *00000020000000620000007900000020000000610000002001020900000047000000650000006e *000000650000007200000061000000740000006f0000007201020c0000002e0000002000000054 *0000006800000065000000200000006e000000610000006d000000650000007300000020010401 *000000000000000003000000000000000000000000000000010102050000002000000061000000 *6e0000006400000020010401000000000000000002000000000000000000000000000000010102 *0600000020000000770000006f000000720000006b0000000a023d000000200000006200000079 *00000020000000610000006e000000610000006c0000006f000000670000007900000020000000 *740000006f000000200000007400000068000000650000002000000073000000790000006e0000 *006f0000006e000000790000006d0000006f0000007500000073000000200000006f0000007000 *000065000000720000006100000074000000690000006f0000006e000000730000002000000069 *0000006e00000020000000740000006800000065000000200000006c0000006900000073000000 *74000000200000006d0000006f0000006e0000006f00000069000000640000002e0000000a0103 *01024c0000005400000068000000690000007300000020000000630000006c0000006100000073 *000000730000002000000064000000650000006c00000069000000620000006500000072000000 *6100000074000000650000006c000000790000002000000061000000760000006f000000690000 *0064000000730000002000000066000000750000006e0000006300000074000000690000006f00 *00006e000000610000006c0000002d000000640000006500000070000000650000006e00000064 *000000650000006e000000630000006900000065000000730000002c0000002000000073000000 *6f0000002000000074000000680000006100000074000000200000002800000029000000200000 *0063000000610000006e0000002000000062000000650000002000000061000000200107020100 *0000630102090000002d0000005200000065000000640000007500000063000000650000007200 *00000a01020900000020000000660000006f0000007200000020000000610000006c0000006c00 *000020010702010000006301024a0000002c00000020000000610000006e000000640000002000 *0000730000006f000000200000006d000000610000006e0000007900000020000000630000006f *0000006d0000006d0000006f0000006e0000002000000072000000650000006400000075000000 *630000006500000072000000730000002000000063000000610000006e00000020000000770000 *006f000000720000006b000000200000006f000000760000006500000072000000200000006d00 *0000750000006c0000007400000069000000700000006c00000065000000200000007400000079 *0000007000000065000000730000002c00000020000000660000006f0000007200000020000000 *690000006e0000007300000074000000610000006e00000063000000650000002c0000000a0102 *2000000020000000460000006900000072000000730000007400000020000000610000006e0000 *0064000000200000004c000000610000007300000074000000200000006d000000610000007900 *00002000000072000000650000006400000075000000630000006500000020000000620000006f *000000740000006800000020010702010000006101020500000020000000610000006e00000064 *000000200104010000000000000000b80000000000000023000000000000002501020100000020 *010702010000006101020a0000002e0000002000000053000000690000006e0000006300000065 *00000020000000610000002001020900000047000000650000006e000000650000007200000061 *000000740000006f00000072010215000000200000006800000061000000730000002000000061 *00000020000000660000006900000078000000650000006400000020000000650000006c000000 *650000006d000000650000006e000000740000000a01025a000000200000007400000079000000 *70000000650000002c0000002000000074000000680000006500000020000000690000006e0000 *0070000000750000007400000020000000740000006f0000002000000074000000680000006500 *000020000000720000006500000064000000750000006300000065000000720000002000000069 *000000730000002000000067000000650000006e0000006500000072000000610000006c000000 *6c00000079000000200000006b0000006e0000006f000000770000006e00000020000000610000 *006e00000064000000200000006500000078000000740000007200000061000000630000007400 *0000690000006e000000670000002000000066000000720000006f0000006d0000002000000074 *0000006800000065000000200000006d0000006f0000006e0000006f0000006900000064000000 *20000000750000007300000075000000610000006c0000006c000000790000000a01025a000000 *200000006900000073000000200000007300000075000000660000006600000069000000630000 *0069000000650000006e0000007400000020000000740000006f00000020000000660000006900 *000078000000200000007400000068000000650000002000000072000000650000007300000075 *0000006c0000007400000020000000740000007900000070000000650000002e00000020000000 *430000006f0000006d00000062000000690000006e00000061000000740000006f000000720000 *007300000020000000610000007200000065000000200000006100000076000000610000006900 *00006c00000061000000620000006c0000006500000020000000660000006f0000007200000020 *0000006d0000006f0000007300000074000000200000007300000063000000650000006e000000 *6100000072000000690000006f0000007300000020000000770000006800000065000000720000 *00650000000a010258000000200000007400000068000000690000007300000020000000690000 *0073000000200000006e0000006f00000074000000200000007400000068000000650000002000 *0000630000006100000073000000650000002c00000020000000610000006e0000006400000020 *000000740000006800000065000000200000006600000065000000770000002000000072000000 *650000006d00000061000000690000006e000000690000006e0000006700000020000000630000 *00610000007300000065000000730000002000000063000000610000006e000000200000006200 *0000650000002000000068000000610000006e000000640000006c000000650000006400000020 *0000006200000079000000200000007500000073000000690000006e0000006700000020000000 *610000006e000000200000006500000078000000700000006c0000006900000063000000690000 *0074000000200000000a0212000000200000007400000079000000700000006500000020000000 *610000006e0000006e0000006f000000740000006100000074000000690000006f0000006e0000 *002e0000000a030102140000004d000000690000006e000000690000006d000000610000006c00 *000020000000640000006500000066000000690000006e0000006900000074000000690000006f *0000006e0000003a00000020010401000000000000000001000000000000000000000000000000 *01010204000000200000006f000000720000002001040100000000000000000200000000000000 *00000000000000000102010000000a000000000000000103010217000000430000006f0000006e *000000760000006500000072000000740000002000000061000000200000007600000061000000 *6c000000750000006500000020000000690000006e000000740000006f00000020000000610000 *00200104010000000000000000b70000000000000023000000000000002402010000000a000000 *000000000203010214000000410000007000000070000000650000006e00000064000000200000 *00610000002000000076000000610000006c000000750000006500000020000000740000006f00 *00002000000061000000200104010000000000000000b700000000000000230000000000000024 *022400000020000000660000006f00000072000000200000007500000073000000650000002000 *0000690000006e000000200000006c0000006500000066000000740000002d000000740000006f *0000002d0000007200000069000000670000006800000074000000200000007200000065000000 *64000000750000006300000074000000690000006f0000006e0000000a00000000000000030301 *021700000050000000720000006500000070000000650000006e00000064000000200000006100 *00002000000076000000610000006c0000007500000065000000200000006f0000006e00000074 *0000006f0000002000000061000000200104010000000000000000b70000000000000023000000 *0000000024022800000020000000660000006f0000007200000020000000750000007300000065 *00000020000000640000007500000072000000690000006e000000670000002000000072000000 *690000006700000068000000740000002d000000740000006f0000002d0000006c000000650000 *006600000074000000200000007200000065000000640000007500000063000000740000006900 *00006f0000006e0000000a0000000000000004030102080000004100000070000000700000006c *000000790000002000000061000000200104010000000000000000000000000000000000000000 *000000000101020600000020000000740000006f00000020000000610000002001040100000000 *00000000b900000000000000230000000000000026024b00000020000000630000006f0000006e *0000007400000061000000690000006e00000065000000720000002c0000002000000061000000 *66000000740000006500000072000000200000006d000000610000007000000070000000690000 *006e000000670000002000000074000000680000006500000020000000630000006f0000006e00 *000074000000650000006e000000740000007300000020000000690000006e000000740000006f *000000200000006100000020000000730000007500000069000000740000006100000062000000 *6c0000006500000020000000660000006f000000720000006d00000020000000660000006f0000 *007200000020000000720000006500000064000000750000006300000074000000690000006f00 *00006e0000002e0000000a0000000000000005030102080000004100000070000000700000006c *000000790000002000000061000000200104010000000000000000000000000000000000000000 *000000000101020600000020000000740000006f00000020000000610000002001040100000000 *00000000b90000000000000023000000000000002601021e000000200000006d00000061000000 *7000000070000000690000006e0000006700000020000000650000006100000063000000680000 *0020000000650000006c000000650000006d000000650000006e00000074000000200000007400 *000068000000720000006f00000075000000670000006800000020010401000000000000000001 *0000000000000000000000000000000102010000000a2400000000000000ba00000000000000bb *00000000000000bc00000000000000b700000000000000bd00000000000000be00000000000000 *bf00000000000000c000000000000000c100000000000000c200000000000000c3000000000000 *00c400000000000000c500000000000000c600000000000000c700000000000000c80000000000 *0000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd00000000 *000000ce00000000000000cf00000000000000d000000000000000d100000000000000d2000000 *00000000d300000000000000d40000000000000000000000000000000100000000000000020000 *000000000003000000000000000400000000000000050000000000000006000000000000000708 *000000000000000000000000000000010000000000000002000000000000000300000000000000 *040000000000000005000000000000000700000000000000060000000000000000000000000000 *00020001140000006e0000006f0000006e0000002d000000700000006f00000072000000740000 *0061000000620000006c0000006500000020000000280000004d00000050000000540000004300 *00007300000029010c0000006500000078000000700000006500000072000000690000006d0000 *00650000006e00000074000000610000006c01150000006c000000690000006200000072000000 *6100000072000000690000006500000073000000400000006800000061000000730000006b0000 *00650000006c0000006c0000002e0000006f000000720000006701000000000000000803010222 *00000050000000720000006f000000760000006900000064000000650000007300000020000000 *61000000200000006d000000650000006300000068000000610000006e00000069000000730000 *006d00000020000000660000006f00000072000000200000007400000068000000650000002000 *000055000000540000004600000038000000200104010000000000000000b70000000000000023 *0000000000000024023600000020000000740000006f0000002000000072000000650000007000 *00006f000000720000007400000020000000690000006e00000076000000610000006c00000069 *000000640000002000000063000000680000006100000072000000610000006300000074000000 *65000000720000007300000020000000740000006f000000200000006f0000006e000000650000 *00200000006f00000072000000200000006d0000006f0000007200000065000000200000006d00 *00006f0000006e0000006f0000006900000064000000730000002e0000000a2700000000000000 *ba00000000000000bb00000000000000bc00000000000000b700000000000000bd000000000000 *00be00000000000000bf00000000000000c000000000000000c100000000000000c20000000000 *0000c300000000000000c400000000000000c500000000000000c600000000000000c700000000 *000000c800000000000000c900000000000000ca00000000000000cb00000000000000cc000000 *00000000cd00000000000000ce00000000000000cf00000000000000d000000000000000d10000 *0000000000d200000000000000d300000000000000d40000000000000000000000000000000100 *000000000000020000000000000003000000000000000400000000000000050000000000000006 *000000000000000700000000000000080000000000000009000000000000000a03000000000000 *0008000000000000000a0000000000000009000000000000000000000000000000030001140000 *006e0000006f0000006e0000002d000000700000006f0000007200000074000000610000006200 *00006c0000006500000020000000280000004d0000005000000054000000430000007300000029 *010c0000006500000078000000700000006500000072000000690000006d000000650000006e00 *000074000000610000006c01150000006c00000069000000620000007200000061000000720000 *00690000006500000073000000400000006800000061000000730000006b000000650000006c00 *00006c0000002e0000006f000000720000006701000000000000000b0301020300000049000000 *6600000020010702010000006d0102060000002000000069000000730000002000000061000000 *2001070201000000630102010000002d0105070000005200000065000000640000007500000063 *000000650000007201020c0000002c000000200000007400000068000000650000006e00000020 *0000006d0000002000000069000000730000002001070102030000002800000063000000200104 *0200000000000000000c0000000000000000000000000000000300000000000000000b00000000 *0000000000000000000000030203000000200000006d000000290102010000002d010507000000 *520000006500000064000000750000006300000065000000720102010000000a01022800000020 *000000200000002000000054000000680000006900000073000000200000006300000061000000 *6e0000002000000062000000650000002000000075000000730000006500000064000000200000 *00740000006f00000020000000710000007500000069000000630000006b0000006c0000007900 *00002000000073000000650000006c000000650000006300000074000000200000006100000020 *0105070000005200000065000000640000007500000063000000650000007201020e0000002000 *0000660000006f0000007200000020000000750000007300000065000000200000006100000073 *0000002000000061000000200104010100000000000000d50102010000000a0102030000002000 *000020000000200104010100000000000000d602020000002e0000000a2700000000000000ba00 *000000000000bb00000000000000bc00000000000000b700000000000000bd00000000000000be *00000000000000bf00000000000000c000000000000000c100000000000000c200000000000000 *c300000000000000c400000000000000c500000000000000c600000000000000c7000000000000 *00c800000000000000c900000000000000ca00000000000000cb00000000000000cc0000000000 *0000cd00000000000000ce00000000000000cf00000000000000d000000000000000d100000000 *000000d200000000000000d300000000000000d400000000000000000000000000000001000000 *000000000200000000000000030000000000000004000000000000000500000000000000060000 *000000000007000000000000000b000000000000000c000000000000000d03000000000000000b *000000000000000c000000000000000d0000000000000000000000000000000400000000040000 *00000000000e03010204000000540000006800000065000000200104010000000000000000b700 *000000000000230000000000000024010201000000200107010201000000280102010000002701 *0211000000750000006e000000690000006f0000006e0000005700000069000000740000006800 *0000200000006d000000610000007000000070000000650000006e000000640102010000002701 *02010000002c010401000000000000000018000000000000000000000000000000040201000000 *29022100000020000000660000006f0000007200000020000000630000006f0000006e00000074 *00000061000000690000006e000000650000007200000073000000200000006600000075000000 *6c0000006c000000200000006f00000066000000200000006d0000006f0000006e0000006f0000 *006900000064000000730000002e0000000a000000000000001103024d000000500000006f0000 *006c000000790000006d0000006f00000072000000700000006800000069000000630000002000 *0000630000006f0000006e0000007400000061000000690000006e000000650000007200000073 *000000200000007400000068000000610000007400000020000000770000006500000020000000 *63000000610000006e00000020000000730000007500000070000000700000006c000000790000 *0020000000610000006e000000200000006f000000700000006500000072000000610000007400 *0000690000006f0000006e00000020000000740000006f0000002000000068000000610000006e *000000640000006c0000006500000020000000750000006e000000690000006f0000006e000000 *7300000020000000770000006900000074000000680000000a0000000000000014030102040000 *00540000006800000065000000200104010000000000000000b700000000000000230000000000 *000024010201000000200107010201000000280104010000000000000000190000000000000000 *00000000000000040102010000002c010401000000000000000018000000000000000000000000 *0000000402010000002902010000000a00000000000000170301021d0000004100000020000000 *430000006f0000006e0000007400000061000000690000006e0000006500000072000000200000 *007300000075000000690000007400000061000000620000006c00000065000000200000006600 *00006f000000720000002000000074000000680000006500000020010402000000000000000015 *000000000000000000000000000000040000000000000000140000000000000000000000000000 *0004010201000000200104010000000000000000b7000000000000002300000000000000240201 *0000000a1300000000000000ba00000000000000bc00000000000000b700000000000000000000 *00000000000100000000000000020000000000000003000000000000000e000000000000000f00 *000000000000100000000000000011000000000000001200000000000000130000000000000014 *000000000000001500000000000000160000000000000017000000000000001800000000000000 *190c00000000000000170000000000000018000000000000001900000000000000140000000000 *000015000000000000001600000000000000110000000000000013000000000000001200000000 *0000000e000000000000000f000000000000001000000000000000000000000000000005000114 *0000006e0000006f0000006e0000002d000000700000006f000000720000007400000061000000 *620000006c0000006500000020000000280000004d000000500000005400000043000000730000 *0029010c0000006500000078000000700000006500000072000000690000006d00000065000000 *6e00000074000000610000006c01150000006c0000006900000062000000720000006100000072 *000000690000006500000073000000400000006800000061000000730000006b00000065000000 *6c0000006c0000002e0000006f0000007200000067002900000000000000ba00000000000000bb *00000000000000bc00000000000000b700000000000000bd00000000000000be00000000000000 *bf00000000000000c000000000000000c100000000000000c200000000000000c3000000000000 *00c400000000000000c500000000000000c600000000000000c700000000000000c80000000000 *0000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd00000000 *000000ce00000000000000cf00000000000000d000000000000000d100000000000000d2000000 *00000000d300000000000000d40000000000000000000000000000000100000000000000020000 *000000000003000000000000000400000000000000050000000000000006000000000000000700 *000000000000080000000000000009000000000000000a000000000000001a000000000000001b *02000000000000001a000000000000001b00000000000000000000000000000006000108000000 *700000006f000000720000007400000061000000620000006c00000065010c0000006500000078 *000000700000006500000072000000690000006d000000650000006e0000007400000061000000 *6c01150000006c0000006900000062000000720000006100000072000000690000006500000073 *000000400000006800000061000000730000006b000000650000006c0000006c0000002e000000 *6f000000720000006705000000000000001c030102020000006100000020010401000000000000 *000025000000000000000000000000000000060102190000002000000074000000720000006100 *00006e00000073000000660000006f000000720000006d00000065000000720000002000000074 *000000680000006100000074000000200000007400000072000000650000006100000074000000 *73000000200104010000000000000000d700000000000000230000000000000027010204000000 *200000006100000073000000200104010000000000000000d80000000000000028000000000000 *00290102010000000a010215000000200000005400000068000000690000007300000020000000 *6c00000065000000740000007300000020000000790000006f0000007500000020000000750000 *00730000006500000020000000610000002001020a000000420000007900000074000000650000 *00530000007400000072000000690000006e000000670102060000002000000061000000730000 *002000000061000000200104010000000000000000d80000000000000028000000000000002901 *022000000020000000730000006f00000075000000720000006300000065000000200000007700 *00006900000074000000680000006f000000750000007400000020000000670000006f00000069 *0000006e00000067000000200000007400000068000000720000006f0000007500000067000000 *680000002000000061000000200104010000000000000000b70000000000000023000000000000 *0024010212000000200000007400000072000000610000006e00000073000000660000006f0000 *00720000006d0000006500000072000000200000006c000000690000006b000000650000002001 *02040000005500000054000000460000003802010000000a000000000000001f03010202000000 *610000002001040100000000000000002500000000000000000000000000000006024d00000020 *0000007400000072000000610000006e00000073000000660000006f000000720000006d000000 *650000007200000020000000740000006800000061000000740000002000000061000000730000 *006b00000073000000200000006f0000006e0000006c0000007900000020000000660000006f00 *000072000000200000007400000068000000650000002000000076000000610000006c00000075 *000000650000007300000020000000630000006f0000006e000000740000006100000069000000 *6e000000650000006400000020000000690000006e00000020000000610000006e000000200000 *00690000006e000000640000006500000078000000650000006400000020000000630000006f00 *00006e0000007400000061000000690000006e00000065000000720000000a0000000000000022 *030102020000006100000020010401000000000000000025000000000000000000000000000000 *060241000000200000007400000072000000610000006e00000073000000660000006f00000072 *0000006d0000006500000072000000200000007400000068000000610000007400000020000000 *61000000730000006b00000073000000200000006f0000006e0000006c00000079000000200000 *00660000006f0000007200000020000000740000006800000065000000200000006b0000006500 *00007900000073000000200000006f0000006600000020000000610000006e0000002000000069 *0000006e000000640000006500000078000000650000006400000020000000630000006f000000 *6e0000007400000061000000690000006e00000065000000720000000a00000000000000250301 *02130000006d000000690000006e000000690000006d000000610000006c000000200000006400 *00006500000066000000690000006e0000006900000074000000690000006f0000006e00000020 *01040100000000000000002700000000000000000000000000000006010204000000200000006f *000000720000002001040100000000000000002800000000000000000000000000000006020100 *00000a000000000000002a030102080000004100000070000000700000006c0000007900000020 *00000061000000200104010000000000000000000000000000000000000000000000000101021f *000000200000006400000069000000720000006500000063000000740000006c00000079000000 *20000000740000006f0000002000000074000000680000006500000020000000650000006c0000 *00650000006d000000650000006e0000007400000073000000200000006f000000660000002000 *000061000000200104010000000000000000250000000000000000000000000000000602010000 *000a3300000000000000ba00000000000000bb00000000000000bc00000000000000b700000000 *000000bd00000000000000be00000000000000bf00000000000000c000000000000000c1000000 *00000000c200000000000000c300000000000000c400000000000000c500000000000000c60000 *0000000000c700000000000000c800000000000000c900000000000000ca00000000000000cb00 *000000000000cc00000000000000cd00000000000000ce00000000000000cf00000000000000d0 *00000000000000d100000000000000d200000000000000d300000000000000d400000000000000 *000000000000000001000000000000000200000000000000030000000000000004000000000000 *000500000000000000060000000000000007000000000000001c000000000000001d0000000000 *00001e000000000000001f00000000000000200000000000000021000000000000002200000000 *000000230000000000000024000000000000002500000000000000260000000000000027000000 *00000000280000000000000029000000000000002a0f0000000000000025000000000000002600 *0000000000002700000000000000280000000000000029000000000000002a0000000000000022 *00000000000000230000000000000024000000000000001f000000000000002000000000000000 *21000000000000001c000000000000001d000000000000001e0000000000000000000000000000 *00070001270000006e0000006f0000006e0000002d000000700000006f00000072000000740000 *0061000000620000006c0000006500000020000000280000004d00000050000000540000004300 *0000730000002c000000200000004f0000007600000065000000720000006c0000006f00000061 *000000640000006500000064000000530000007400000072000000690000006e00000067000000 *7300000029010c0000006500000078000000700000006500000072000000690000006d00000065 *0000006e00000074000000610000006c01150000006c0000006900000062000000720000006100 *000072000000690000006500000073000000400000006800000061000000730000006b00000065 *0000006c0000006c0000002e0000006f000000720000006706000000000000002b030102020000 *0041000000200104010000000000000000b70000000000000023000000000000002401023a0000 *00200000006f000000660000002000000070000000610000007200000074000000690000006100 *00006c00000020000000690000006e000000660000006f000000720000006d0000006100000074 *000000690000006f0000006e0000002000000061000000620000006f0000007500000074000000 *200000006c0000006f000000630000006100000074000000690000006f0000006e000000730000 *0020000000690000006e000000200000006100000020000000730000006f000000750000007200 *000063000000650000002000000066000000690000006c000000650000002e0000000a025f0000 *002000000020000000200000005400000068000000690000007300000020000000690000007300 *000020000000700000006f0000006c000000790000006d0000006f000000720000007000000068 *000000690000006300000020000000690000006e00000020000000740000006800000065000000 *200000006b000000690000006e00000064000000200000006f0000006600000020000000690000 *006e000000660000006f000000720000006d0000006100000074000000690000006f0000006e00 *000020000000790000006f000000750000002000000077000000610000006e0000007400000020 *000000740000006f000000200000006d00000061000000690000006e0000007400000061000000 *690000006e0000002000000061000000620000006f000000750000007400000020000000650000 *0061000000630000006800000020000000730000006f0000007500000072000000630000006500 *00002000000066000000690000006c000000650000002e0000000a000000000000002e03023f00 *0000430000006f0000006d00000070000000750000007400000065000000200000007400000068 *00000065000000200000006c0000006f000000630000006100000074000000690000006f000000 *6e000000200000006f0000006600000020000000740000006800000065000000200000006e0000 *00650000007800000074000000200000007300000074000000610000006e000000640000006100 *0000720000006400000020000000380000002d000000630000006f0000006c000000750000006d *0000006e00000020000000610000006c00000069000000670000006e0000006500000064000000 *200000007400000061000000620000000a000000000000002f030102350000006c000000690000 *00660000007400000020000000690000006e000000660000006f000000720000006d0000006100 *000074000000690000006f0000006e0000002000000061000000620000006f0000007500000074 *000000200000006100000020000000730000006f00000075000000720000006300000065000000 *2000000066000000690000006c0000006500000020000000690000006e000000740000006f0000 *002000000061000000200000007300000074000000610000007200000074000000690000006e00 *0000670000002001040100000000000000002b00000000000000000000000000000007020f0000 *0020000000660000006f0000007200000020000000740000006800000061000000740000002000 *000066000000690000006c000000650000000a000000000000003003026a000000650000007800 *000074000000720000006100000063000000740000002000000070000000610000007200000074 *00000069000000610000006c00000020000000690000006e000000660000006f00000072000000 *6d0000006100000074000000690000006f0000006e0000002000000061000000620000006f0000 *007500000074000000200000007400000068000000650000002000000063000000750000007200 *000072000000650000006e0000007400000020000000630000006f0000006c000000750000006d *0000006e0000002c000000200000006500000076000000650000006e0000002000000069000000 *6e0000002000000074000000680000006500000020000000610000006200000073000000650000 *006e0000006300000065000000200000006f00000066000000200000006b0000006e0000006f00 *0000770000006c00000065000000640000006700000065000000200000006f0000006600000020 *00000074000000680000006500000020000000730000006f000000750000007200000063000000 *650000002000000066000000690000006c000000650000000a0000000000000031030246000000 *650000007800000074000000720000006100000063000000740000002000000070000000610000 *00720000007400000069000000610000006c00000020000000690000006e000000660000006f00 *0000720000006d0000006100000074000000690000006f0000006e000000200000006100000062 *0000006f0000007500000074000000200000007400000068000000650000002000000063000000 *750000007200000072000000650000006e00000074000000200000006c000000690000006e0000 *0065000000200000006e000000750000006d000000620000006500000072000000200000006900 *00006600000020000000700000006f000000730000007300000069000000620000006c00000065 *0000000a000000000000003203023c000000650000007800000074000000720000006100000063 *000000740000002000000074000000680000006500000020000000730000007400000061000000 *6e0000006400000061000000720000006400000020000000660000006f000000720000006d0000 *00610000007400000020000000660000006f0000007200000020000000610000006e0000002000 *00006100000062000000730000006f0000006c0000007500000074000000650000002000000073 *0000006f0000007500000072000000630000006500000020000000700000006f00000073000000 *6900000074000000690000006f0000006e0000000a2f00000000000000ba00000000000000bb00 *000000000000bc00000000000000b700000000000000bd00000000000000be00000000000000bf *00000000000000c000000000000000c100000000000000c200000000000000c300000000000000 *c400000000000000c500000000000000c600000000000000c700000000000000c8000000000000 *00c900000000000000ca00000000000000cb00000000000000cc00000000000000cd0000000000 *0000ce00000000000000cf00000000000000d000000000000000d100000000000000d200000000 *000000d300000000000000d4000000000000000000000000000000010000000000000002000000 *000000000300000000000000040000000000000005000000000000000600000000000000070000 *0000000000080000000000000009000000000000000a000000000000002b000000000000002c00 *0000000000002d000000000000002e000000000000002f00000000000000300000000000000031 *000000000000003208000000000000002e000000000000002b000000000000002d000000000000 *002c00000000000000310000000000000030000000000000002f00000000000000320000000000 *00000000000000000000080001270000006e0000006f0000006e0000002d000000700000006f00 *0000720000007400000061000000620000006c0000006500000020000000280000004d00000050 *0000005400000043000000730000002c000000200000004f000000760000006500000072000000 *6c0000006f00000061000000640000006500000064000000530000007400000072000000690000 *006e000000670000007300000029010c0000006500000078000000700000006500000072000000 *690000006d000000650000006e00000074000000610000006c01150000006c0000006900000062 *000000720000006100000072000000690000006500000073000000400000006800000061000000 *730000006b000000650000006c0000006c0000002e0000006f0000007200000067080000000000 *000033030102020000004100000020010401000000000000000008000000000000000000000000 *000000020226000000200000007400000072000000610000006e00000073000000660000006f00 *0000720000006d0000006500000072000000200000007400000068000000610000007400000020 *000000730000007400000072000000690000007000000073000000200000006f00000075000000 *74000000200000006e00000065000000770000006c000000690000006e00000065000000730000 *000a00000000000000350301020200000041000000200104010000000000000000080000000000 *0000000000000000000002010236000000200000007400000072000000610000006e0000007300 *0000660000006f000000720000006d000000650000007200000020000000740000006800000061 *000000740000002000000073000000740000007200000069000000700000007300000020000000 *6f000000750000007400000020000000610000006e000000790000002000000063000000680000 *0061000000720000006100000063000000740000006500000072000000200000006d0000006100 *000074000000630000006800000065000000640000002000000062000000790000002001040100 *00000000000000d90000000000000023000000000000002a02010000000a000000000000003703 *010202000000410000002001040100000000000000000800000000000000000000000000000002 *01021b000000200000007400000072000000610000006e00000073000000660000006f00000072 *0000006d0000006500000072000000200000007400000068000000610000007400000020000000 *620000007200000065000000610000006b00000073000000200000006100000020010401000000 *0000000000d8000000000000002800000000000000290102010000002001040100000000000000 *00250000000000000000000000000000000601022000000020000000690000006e000000740000 *006f0000002000000064000000690000007300000074000000690000006e000000630000007400 *0000200000006c000000690000006e00000065000000730000002c000000200000006600000065 *0000006500000064000000690000006e0000006700000020000000610000002001040100000000 *00000000d800000000000000280000000000000029010201000000200104010000000000000000 *000000000000000000000000000000000102140000002000000065000000610000006300000068 *000000200000006c000000690000006e0000006500000020000000690000006e00000020000000 *7400000075000000720000006e0000002e0000000a000000000000003803010202000000410000 *00200104010000000000000000080000000000000000000000000000000201021b000000200000 *007400000072000000610000006e00000073000000660000006f000000720000006d0000006500 *000072000000200000007400000068000000610000007400000020000000620000007200000065 *000000610000006b000000730000002000000061000000200104010000000000000000d8000000 *000000002800000000000000290102010000002001040100000000000000002500000000000000 *00000000000000000601022000000020000000690000006e000000740000006f00000020000000 *64000000690000007300000074000000690000006e000000630000007400000020000000770000 *006f0000007200000064000000730000002c000000200000006600000065000000650000006400 *0000690000006e000000670000002000000061000000200104010000000000000000d800000000 *000000280000000000000029010201000000200104010000000000000000000000000000000000 *000000000000000102130000002000000065000000610000006300000068000000200000006c00 *0000690000006e0000006500000020000000690000006e00000020000000740000007500000072 *0000006e0000000a00000000000000390301022300000045000000780000007400000072000000 *61000000630000007400000020000000740000006800000065000000200000006d000000610000 *00740000006300000068000000650000006400000020000000770000006f000000720000006400 *0000730000002000000066000000720000006f0000006d00000020000000740000006800000065 *000000200104010000000000000000380000000000000000000000000000000801020100000020 *0104010000000000000000b70000000000000023000000000000002402010000000a0000000000 *00003a030102230000004500000078000000740000007200000061000000630000007400000020 *000000740000006800000065000000200000006d00000061000000740000006300000068000000 *6500000064000000200000006c000000690000006e000000650000007300000020000000660000 *00720000006f0000006d0000002000000074000000680000006500000020010401000000000000 *00003700000000000000000000000000000008010201000000200104010000000000000000b700 *00000000000023000000000000002402010000000a000000000000003b03025e00000055000000 *74000000690000006c0000006900000074000000790000002000000066000000750000006e0000 *006300000074000000690000006f0000006e00000020000000740000006f000000200000006500 *000078000000740000007200000061000000630000007400000020000000770000006f00000072 *0000006400000073000000200000007500000073000000690000006e0000006700000020000000 *610000006300000063000000750000006d000000750000006c00000061000000740000006f0000 *00720000002c00000020000000690000006e000000730000006900000064000000650000002d00 *0000770000006f00000072000000640000002c00000020000000610000006e0000006400000020 *000000750000006e00000074000000690000006c0000002d0000006e0000006500000078000000 *740000002d000000770000006f0000007200000064000000200000006d0000006f0000006e0000 *006f0000006900000064000000730000000a000000000000003c03025e00000055000000740000 *00690000006c0000006900000074000000790000002000000066000000750000006e0000006300 *000074000000690000006f0000006e00000020000000740000006f000000200000006500000078 *0000007400000072000000610000006300000074000000200000006c000000690000006e000000 *6500000073000000200000007500000073000000690000006e0000006700000020000000610000 *006300000063000000750000006d000000750000006c00000061000000740000006f0000007200 *00002c00000020000000690000006e000000730000006900000064000000650000002d0000006c *000000690000006e000000650000002c00000020000000610000006e0000006400000020000000 *750000006e00000074000000690000006c0000002d0000006e0000006500000078000000740000 *002d0000006c000000690000006e00000065000000200000006d0000006f0000006e0000006f00 *00006900000064000000730000000a3100000000000000ba00000000000000bb00000000000000 *bc00000000000000b700000000000000bd00000000000000be00000000000000bf000000000000 *00c000000000000000c100000000000000c200000000000000c300000000000000c40000000000 *0000c500000000000000c600000000000000c700000000000000c800000000000000c900000000 *000000ca00000000000000cb00000000000000cc00000000000000cd00000000000000ce000000 *00000000cf00000000000000d000000000000000d100000000000000d200000000000000d30000 *0000000000d4000000000000000000000000000000010000000000000002000000000000000300 *000000000000040000000000000005000000000000000600000000000000070000000000000008 *0000000000000009000000000000000a0000000000000033000000000000003400000000000000 *350000000000000036000000000000003700000000000000380000000000000039000000000000 *003a000000000000003b000000000000003c0a0000000000000038000000000000003900000000 *000000350000000000000036000000000000003b0000000000000037000000000000003a000000 *00000000330000000000000034000000000000003c000000000000000000000000000000090001 *08000000700000006f000000720000007400000061000000620000006c00000065010c00000065 *00000078000000700000006500000072000000690000006d000000650000006e00000074000000 *610000006c01150000006c00000069000000620000007200000061000000720000006900000065 *00000073000000400000006800000061000000730000006b000000650000006c0000006c000000 *2e0000006f0000007200000067002700000000000000ba00000000000000bb00000000000000bc *00000000000000b700000000000000bd00000000000000be00000000000000bf00000000000000 *c000000000000000c100000000000000c200000000000000c300000000000000c4000000000000 *00c500000000000000c600000000000000c700000000000000c800000000000000c90000000000 *0000ca00000000000000cb00000000000000cc00000000000000cd00000000000000ce00000000 *000000cf00000000000000d000000000000000d100000000000000d200000000000000d3000000 *00000000d400000000000000000000000000000001000000000000000200000000000000030000 *000000000004000000000000000500000000000000060000000000000007000000000000003d00 *0000000000003e000000000000003f03000000000000003d000000000000003e00000000000000 *3f0000000000000000000000000000000a00000000003800000000000000ba00000000000000bb *00000000000000bc00000000000000b700000000000000bd00000000000000be00000000000000 *bf00000000000000c000000000000000c100000000000000c200000000000000c3000000000000 *00c400000000000000c500000000000000c600000000000000c700000000000000c80000000000 *0000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd00000000 *000000ce00000000000000cf00000000000000d000000000000000d100000000000000d2000000 *00000000d300000000000000d40000000000000000000000000000000100000000000000020000 *000000000003000000000000000400000000000000050000000000000006000000000000000700 *0000000000001c000000000000001d000000000000001e000000000000001f0000000000000020 *000000000000002100000000000000220000000000000023000000000000002400000000000000 *250000000000000026000000000000002700000000000000280000000000000029000000000000 *002a00000000000000400000000000000041000000000000004200000000000000430000000000 *000044050000000000000040000000000000004100000000000000420000000000000043000000 *00000000440000000000000000000000000000000b0001280000006e0000006f0000006e000000 *2d000000700000006f000000720000007400000061000000620000006c00000065000000200000 *00280000006f0000007600000065000000720000006c0000006f00000061000000640000006500 *00006400000020000000730000007400000072000000690000006e00000067000000730000002c *000000200000004d0000005000000054000000430000007300000029010c000000650000007800 *0000700000006500000072000000690000006d000000650000006e00000074000000610000006c *01150000006c000000690000006200000072000000610000007200000069000000650000007300 *0000400000006800000061000000730000006b000000650000006c0000006c0000002e0000006f *0000007200000067002700000000000000ba00000000000000bb00000000000000bc0000000000 *0000b700000000000000bd00000000000000be00000000000000bf00000000000000c000000000 *000000c100000000000000c200000000000000c300000000000000c400000000000000c5000000 *00000000c600000000000000c700000000000000c800000000000000c900000000000000ca0000 *0000000000cb00000000000000cc00000000000000cd00000000000000ce00000000000000cf00 *000000000000d000000000000000d100000000000000d200000000000000d300000000000000d4 *000000000000000000000000000000010000000000000002000000000000000300000000000000 *040000000000000005000000000000000600000000000000070000000000000045000000000000 *004600000000000000470300000000000000450000000000000046000000000000004700000000 *00000000000000000000000c000108000000700000006f00000072000000740000006100000062 *0000006c00000065010c0000006500000078000000700000006500000072000000690000006d00 *0000650000006e00000074000000610000006c01150000006c0000006900000062000000720000 *006100000072000000690000006500000073000000400000006800000061000000730000006b00 *0000650000006c0000006c0000002e0000006f0000007200000067030000000000000048030102 *0200000041000000200104010000000000000000b7000000000000002300000000000000240102 *0b000000200000006900000073000000200000006a000000750000007300000074000000200000 *0061000000200104010000000000000000da0000000000000023000000000000002b0213000000 *2000000077000000690000007400000068000000200000006f0000006e00000065000000200000 *006f000000620000006a0000006500000063000000740000002e000000200000000a0000000000 *00004a03010204000000540000006800000065000000200104010000000000000000b700000000 *000000230000000000000024010237000000200000006f00000066000000200000007400000068 *0000006500000020000000650000006e000000640000006f0000006d0000006f00000072000000 *700000006800000069000000730000006d00000073000000200000006f00000076000000650000 *007200000020000000730000006f0000006d00000065000000200000006f000000620000006a00 *000065000000630000007400000020000000690000006e00000020000000610000006e00000020 *000000610000007200000062000000690000007400000072000000610000007200000079000000 *200104010000000000000000da0000000000000023000000000000002b02020000002e0000000a *000000000000004d0301020c000000450000007800000074000000720000006100000063000000 *7400000020000000740000006800000065000000200104010000000000000000b7000000000000 *0023000000000000002401021e0000002000000066000000720000006f0000006d000000200000 *006900000074000000730000002000000072000000650000007000000072000000650000007300 *0000650000006e000000740000006100000074000000690000006f0000006e0000002000000061 *000000730000002000000061000000200104010000000000000000da0000000000000023000000 *000000002b02010000000a2f00000000000000ba00000000000000bb00000000000000bc000000 *00000000b700000000000000bd00000000000000be00000000000000bf00000000000000c00000 *0000000000c100000000000000c200000000000000c300000000000000c400000000000000c500 *000000000000c600000000000000c700000000000000c800000000000000c900000000000000ca *00000000000000cb00000000000000cc00000000000000cd00000000000000ce00000000000000 *cf00000000000000d000000000000000d100000000000000d200000000000000d3000000000000 *00d400000000000000db00000000000000dc00000000000000dd00000000000000de0000000000 *0000da000000000000000000000000000000010000000000000002000000000000000300000000 *000000040000000000000005000000000000000600000000000000070000000000000048000000 *0000000049000000000000004a000000000000004b000000000000004c000000000000004d0600 *0000000000004a000000000000004b000000000000004c00000000000000480000000000000049 *000000000000004d0000000000000000000000000000000d000108000000700000006f00000072 *0000007400000061000000620000006c00000065010c0000006500000078000000700000006500 *000072000000690000006d000000650000006e00000074000000610000006c01150000006c0000 *006900000062000000720000006100000072000000690000006500000073000000400000006800 *000061000000730000006b000000650000006c0000006c0000002e0000006f0000007200000067 *001e00000000000000ba00000000000000bb00000000000000bc00000000000000b70000000000 *0000bd00000000000000be00000000000000bf00000000000000c000000000000000c100000000 *000000c200000000000000c300000000000000c400000000000000c500000000000000c6000000 *00000000c700000000000000c800000000000000c900000000000000ca00000000000000cb0000 *0000000000cc00000000000000cd00000000000000ce00000000000000cf00000000000000d000 *000000000000d100000000000000d200000000000000d300000000000000d4000000000000004e *000000000000004f02000000000000004e000000000000004f0000000000000000000000000000 *000e000108000000700000006f000000720000007400000061000000620000006c00000065010c *0000006500000078000000700000006500000072000000690000006d000000650000006e000000 *74000000610000006c01150000006c000000690000006200000072000000610000007200000069 *0000006500000073000000400000006800000061000000730000006b000000650000006c000000 *6c0000002e0000006f0000007200000067001f00000000000000ba00000000000000bb00000000 *000000bc00000000000000b700000000000000bd00000000000000be00000000000000bf000000 *00000000c000000000000000c100000000000000c200000000000000c300000000000000c40000 *0000000000c500000000000000c600000000000000c700000000000000c800000000000000c900 *000000000000ca00000000000000cb00000000000000cc00000000000000cd00000000000000ce *00000000000000cf00000000000000d000000000000000d100000000000000d200000000000000 *d300000000000000d4000000000000004e000000000000004f0000000000000050010000000000 *0000500000000000000000000000000000000f000122000000700000006f000000720000007400 *000061000000620000006c00000065000000200000002800000062000000750000007400000020 *000000690000006e0000007300000074000000610000006e000000630000006500000073000000 *20000000750000007300000065000000200000004d000000500000005400000043000000730000 *0029010c0000006500000078000000700000006500000072000000690000006d00000065000000 *6e00000074000000610000006c01150000006c0000006900000062000000720000006100000072 *000000690000006500000073000000400000006800000061000000730000006b00000065000000 *6c0000006c0000002e0000006f00000072000000670200000000000000510301020a0000004300 *00006f0000006e0000007600000065000000720000007400000020000000610000002001040100 *00000000000000b70000000000000023000000000000002401020800000020000000690000006e *000000740000006f00000020000000610000002001040100000000000000005700000000000000 *00000000000000000f01020c0000002e000000200000004d0000006e000000650000006d000000 *6f0000006e00000069000000630000003a000000200107021b0000004500000078000000700000 *002000000061000000200000002a00000020000000450000007800000070000000200000006200 *0000200000003d0000002000000045000000780000007000000020000000280000006100000020 *0000002b00000020000000620000002902010000000a00000000000000540301020a0000004300 *00006f0000006e0000007600000065000000720000007400000020000000610000002001040100 *00000000000000570000000000000000000000000000000f01020800000020000000690000006e *000000740000006f0000002000000061000000200104010000000000000000b700000000000000 *23000000000000002401020c0000002e000000200000004d0000006e000000650000006d000000 *6f0000006e00000069000000630000003a000000200107021b0000004c0000006f000000670000 *002000000061000000200000002b000000200000004c0000006f00000067000000200000006200 *0000200000003d000000200000004c0000006f0000006700000020000000280000006100000020 *0000002a00000020000000620000002902010000000a2700000000000000ba00000000000000bb *00000000000000bc00000000000000b700000000000000bd00000000000000be00000000000000 *bf00000000000000c000000000000000c100000000000000c200000000000000c3000000000000 *00c400000000000000c500000000000000c600000000000000c700000000000000c80000000000 *0000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd00000000 *000000ce00000000000000cf00000000000000d000000000000000d100000000000000d2000000 *00000000d300000000000000d4000000000000004e000000000000004f00000000000000510000 *000000000052000000000000005300000000000000540000000000000055000000000000005600 *000000000000570000000000000058000000000000005909000000000000005700000000000000 *580000000000000059000000000000005400000000000000550000000000000056000000000000 *005100000000000000520000000000000053000000000000000000000000000000100001080000 *00700000006f000000720000007400000061000000620000006c00000065010c00000065000000 *78000000700000006500000072000000690000006d000000650000006e00000074000000610000 *006c01150000006c00000069000000620000007200000061000000720000006900000065000000 *73000000400000006800000061000000730000006b000000650000006c0000006c0000002e0000 *006f0000007200000067002900000000000000ba00000000000000bb00000000000000bc000000 *00000000b700000000000000bd00000000000000be00000000000000bf00000000000000c00000 *0000000000c100000000000000c200000000000000c300000000000000c400000000000000c500 *000000000000c600000000000000c700000000000000c800000000000000c900000000000000ca *00000000000000cb00000000000000cc00000000000000cd00000000000000ce00000000000000 *cf00000000000000d000000000000000d100000000000000d200000000000000d3000000000000 *00d4000000000000004e000000000000004f000000000000005000000000000000510000000000 *000052000000000000005300000000000000540000000000000055000000000000005600000000 *0000005700000000000000580000000000000059000000000000005a01000000000000005a0000 *000000000000000000000000001100011e000000700000006f0000007200000074000000610000 *00620000006c000000650000002000000028000000690000006e00000073000000740000006100 *00006e00000063000000650000007300000020000000750000007300000065000000200000004d *0000005000000054000000430000007300000029010c0000006500000078000000700000006500 *000072000000690000006d000000650000006e00000074000000610000006c01150000006c0000 *006900000062000000720000006100000072000000690000006500000073000000400000006800 *000061000000730000006b000000650000006c0000006c0000002e0000006f0000007200000067 *02000000000000005b0b021f00000061000000200000002a000000200000002800000062000000 *200000002b000000200000006300000029000000200000003d0000002000000028000000610000 *00200000002a000000200000006200000029000000200000002b00000020000000280000006100 *0000200000002a000000200000006300000029000000000000005c0b021f000000280000006100 *0000200000002b000000200000006200000029000000200000002a000000200000006300000020 *0000003d000000200000002800000061000000200000002a000000200000006300000029000000 *200000002b000000200000002800000062000000200000002a0000002000000063000000292900 *000000000000ba00000000000000bb00000000000000bc00000000000000b700000000000000bd *00000000000000be00000000000000bf00000000000000c000000000000000c100000000000000 *c200000000000000c300000000000000c400000000000000c500000000000000c6000000000000 *00c700000000000000c800000000000000c900000000000000ca00000000000000cb0000000000 *0000cc00000000000000cd00000000000000ce00000000000000cf00000000000000d000000000 *000000d100000000000000d200000000000000d300000000000000d4000000000000004e000000 *000000004f00000000000000510000000000000052000000000000005300000000000000540000 *000000000055000000000000005600000000000000570000000000000058000000000000005900 *0000000000005b000000000000005c02000000000000005b000000000000005c00000000000000 *0000000000000000120001140000006e0000006f0000006e0000002d000000700000006f000000 *720000007400000061000000620000006c0000006500000020000000280000004d000000500000 *0054000000430000007300000029010c0000006500000078000000700000006500000072000000 *690000006d000000650000006e00000074000000610000006c01150000006c0000006900000062 *000000720000006100000072000000690000006500000073000000400000006800000061000000 *730000006b000000650000006c0000006c0000002e0000006f0000007200000067010000000000 *00005d03010202000000410000002001040100000000000000005d000000000000000000000000 *0000001201021800000020000000690000007300000020000000610000006e0000002000000069 *0000006e0000007300000074000000610000006e0000006300000065000000200000006f000000 *6600000020000000620000006f0000007400000068000000200104010000000000000000570000 *000000000000000000000000000f01020500000020000000610000006e00000064000000200104 *010000000000000000b70000000000000023000000000000002401020800000020000000770000 *0068000000650000007200000065000000200000000a0102030000002000000020000000200104 *010000000000000000590000000000000000000000000000000f01021200000020000000640000 *006900000073000000740000007200000069000000620000007500000074000000650000007300 *0000200000006f0000007600000065000000720000002001040100000000000000004e00000000 *00000000000000000000000d02020000002e0000000a2a00000000000000ba00000000000000bb *00000000000000bc00000000000000b700000000000000bd00000000000000be00000000000000 *bf00000000000000c000000000000000c100000000000000c200000000000000c3000000000000 *00c400000000000000c500000000000000c600000000000000c700000000000000c80000000000 *0000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd00000000 *000000ce00000000000000cf00000000000000d000000000000000d100000000000000d2000000 *00000000d300000000000000d4000000000000004e000000000000004f00000000000000510000 *000000000052000000000000005300000000000000540000000000000055000000000000005600 *0000000000005700000000000000580000000000000059000000000000005b000000000000005c *000000000000005d01000000000000005d00000000000000000000000000000013000000000400 *0000000000005e03010204000000540000006800000065000000200104010000000000000000b7 *000000000000002300000000000000240102010000002001070102010000002801040100000000 *00000000df0000000000000023000000000000002c0102010000002c0104010000000000000000 *e000000000000000230000000000000025020100000029010206000000200000006f0000007600 *000065000000720000002001070104010000000000000000b80000000000000023000000000000 *002502020000002000000061010207000000200000007700000068000000650000007200000065 *000000200104010000000000000000e00000000000000023000000000000002502140000002000 *000069000000730000002000000074000000680000006500000020000000740000006f00000070 *00000020000000650000006c000000650000006d000000650000006e000000740000000a000000 *000000006103010204000000540000006800000065000000200104010000000000000000b70000 *000000000023000000000000002401020100000020010701020100000028010401000000000000 *0000e10000000000000023000000000000002c0102010000002c0104010000000000000000e000 *000000000000230000000000000025020100000029010206000000200000006f00000076000000 *65000000720000002001070104010000000000000000b800000000000000230000000000000025 *020200000020000000610102070000002000000077000000680000006500000072000000650000 *00200104010000000000000000e000000000000000230000000000000025021700000020000000 *69000000730000002000000074000000680000006500000020000000620000006f000000740000 *00740000006f0000006d00000020000000650000006c000000650000006d000000650000006e00 *0000740000000a0000000000000064030102040000005400000068000000650000002001040100 *00000000000000b70000000000000023000000000000002401020a000000200000006700000069 *00000076000000650000006e000000200000006200000079000000200107010201000000280104 *010000000000000000df0000000000000023000000000000002c0102010000002c010401000000 *0000000000e20000000000000023000000000000002d02010000002902010000000a0000000000 *00006703010204000000540000006800000065000000200104010000000000000000b700000000 *000000230000000000000024010201000000200107010201000000280104010000000000000000 *e10000000000000023000000000000002c0102010000002c0104010000000000000000e3000000 *0000000023000000000000002d02010000002902010000000a1300000000000000ba0000000000 *0000bc00000000000000b700000000000000000000000000000001000000000000005e00000000 *0000005f0000000000000060000000000000006100000000000000620000000000000063000000 *000000006400000000000000650000000000000066000000000000006700000000000000680000 *000000000069000000000000006a000000000000006b0e00000000000000670000000000000068 *000000000000006900000000000000640000000000000065000000000000006600000000000000 *6100000000000000620000000000000063000000000000006a000000000000005e000000000000 *005f0000000000000060000000000000006b000000000000000000000000000000140000000001 *000000000000006c01030102040000005400000068000000650000002001040100000000000000 *005d00000000000000000000000000000012010201000000200107010201000000280104010000 *000000000000df0000000000000023000000000000002c0102010000002c010401000000000000 *0000e40000000000000023000000000000002d020100000029010206000000200000006f000000 *7600000065000000720000002001070102010000006101020f0000002000000065000000780000 *0074000000650000006e0000006400000065000000640000002000000077000000690000007400 *00006800000020040100000000000000006f000000000000000000000000000000140102020000 *002e0000000a0102080000002000000020000000200000005700000068000000650000006e0000 *002001070201000000610102480000002000000068000000610000007300000020000000610000 *00200000004e000000750000006d00000020000000690000006e00000073000000740000006100 *00006e000000630000006500000020000000770000006900000074000000680000002000000061 *0000006e000000200000006100000064000000640000006900000074000000690000006f000000 *6e0000002000000074000000680000006100000074000000200000007200000065000000730000 *007000000065000000630000007400000073000000200000006f00000072000000640000006500 *0000720000002c000000200000007400000068000000650000006e000000200000007400000068 *0000006900000073000000200000006900000073000000200000000a0102530000002000000020 *000000200000007400000072000000610000006e00000073000000660000006f00000072000000 *6d000000650000006400000020000000690000006e000000740000006f00000020000000610000 *002000000074000000720000006f000000700000006900000063000000610000006c0000002000 *000073000000650000006d0000006900000072000000690000006e000000670000002e00000020 *000000490000007400000020000000690000007300000020000000610000007300000073000000 *750000006d00000065000000640000002000000074000000680000006100000074000000200000 *003000000020000000690000007300000020000000740000006800000065000000200000006c00 *00006500000061000000730000007400000020000000650000006c000000650000006d00000065 *0000006e000000740000000a02090000002000000020000000200000006f000000660000002000 *0000610000002e0000000a03010c41000000680000007400000074000000700000003a0000002f *0000002f00000068000000610000006c0000002e00000061000000720000006300000068000000 *690000007600000065000000730000002d0000006f000000750000007600000065000000720000 *007400000065000000730000002e00000066000000720000002f000000640000006f0000006300 *0000730000002f00000030000000300000002f00000031000000310000002f0000003300000037 *0000002f00000037000000390000002f0000005000000044000000460000002f00000054000000 *720000006f000000700000006900000063000000610000006c0000002e00000070000000640000 *006602010000000a3000000000000000ba00000000000000bb00000000000000bc000000000000 *00b700000000000000bd00000000000000be00000000000000bf00000000000000c00000000000 *0000c100000000000000c200000000000000c300000000000000c400000000000000c500000000 *000000c600000000000000c700000000000000c800000000000000c900000000000000ca000000 *00000000cb00000000000000cc00000000000000cd00000000000000ce00000000000000cf0000 *0000000000d000000000000000d100000000000000d200000000000000d300000000000000d400 *000000000000000000000000000001000000000000004e000000000000004f0000000000000051 *000000000000005200000000000000530000000000000054000000000000005500000000000000 *56000000000000005700000000000000580000000000000059000000000000005b000000000000 *005c000000000000005d000000000000006c000000000000006d000000000000006e0000000000 *00006f04000000000000006f000000000000006c000000000000006d000000000000006e000000 *000000000000000000000000150000010c00000065000000780000007000000065000000720000 *00690000006d000000650000006e00000074000000610000006c0110000000650000006b000000 *6d00000065000000740000007400000040000000670000006d00000061000000690000006c0000 *002e000000630000006f0000006d02000000000000007003010202000000410000002001040100 *000000000000005d0000000000000000000000000000001201020c000000200000007700000068 *000000690000006300000068000000200000006100000064000000640000007300000020010401 *0000000000000000e30000000000000023000000000000002d0102050000002000000061000000 *6e00000064000000200104010000000000000000e20000000000000023000000000000002d0219 *00000020000000740000006f000000200000006100000020000000700000007200000065000000 *2d0000006500000078000000690000007300000074000000690000006e00000067000000200000 *00740000007900000070000000650000002e0000000a0000000000000074030102020000004100 *00002001040100000000000000005d0000000000000000000000000000001201020d0000002000 *00007500000073000000690000006e000000670000002000000061000000200000007400000079 *000000700000006501020100000027021d00000073000000200000006200000075000000690000 *006c000000740000002d000000690000006e00000020000000420000006f000000750000006e00 *000064000000650000006400000020000000690000006e0000007300000074000000610000006e *00000063000000650000002e0000000a3100000000000000ba00000000000000bb000000000000 *00bc00000000000000b700000000000000bd00000000000000be00000000000000bf0000000000 *0000c000000000000000c100000000000000c200000000000000c300000000000000c400000000 *000000c500000000000000c600000000000000c700000000000000c800000000000000c9000000 *00000000ca00000000000000cb00000000000000cc00000000000000cd00000000000000ce0000 *0000000000cf00000000000000d000000000000000d100000000000000d200000000000000d300 *000000000000d4000000000000004e000000000000004f00000000000000510000000000000052 *000000000000005300000000000000540000000000000055000000000000005600000000000000 *5700000000000000580000000000000059000000000000005b000000000000005c000000000000 *005d00000000000000700000000000000071000000000000007200000000000000730000000000 *000074000000000000007500000000000000760700000000000000740000000000000075000000 *000000007600000000000000700000000000000073000000000000007200000000000000710000 *000000000000000000000000002e000108000000700000006f0000007200000074000000610000 *00620000006c00000065010c000000650000007800000070000000650000007200000069000000 *6d000000650000006e00000074000000610000006c01150000006c000000690000006200000072 *000000610000007200000069000000650000007300000040000000680000006100000073000000 *6b000000650000006c0000006c0000002e0000006f0000007200000067002b00000000000000ba *00000000000000bb00000000000000bc00000000000000b700000000000000bd00000000000000 *be00000000000000bf00000000000000c000000000000000c100000000000000c2000000000000 *00c300000000000000c400000000000000c500000000000000c600000000000000c70000000000 *0000c800000000000000c900000000000000ca00000000000000cb00000000000000cc00000000 *000000cd00000000000000ce00000000000000cf00000000000000d000000000000000d1000000 *00000000d200000000000000d300000000000000d4000000000000004e000000000000004f0000 *000000000050000000000000005100000000000000520000000000000053000000000000005400 *000000000000550000000000000056000000000000005700000000000000580000000000000059 *000000000000005a000000000000005b000000000000005c000000000000000000000000000000 *0016000108000000700000006f000000720000007400000061000000620000006c00000065010c *0000006500000078000000700000006500000072000000690000006d000000650000006e000000 *74000000610000006c011f00000045000000640000007700000061000000720000006400000020 *0000004b0000006d000000650000007400000074000000200000003c000000650000006b000000 *6d00000065000000740000007400000040000000670000006d00000061000000690000006c0000 *002e000000630000006f0000006d0000003e0100000000000000770301021d0000004d00000069 *0000006e000000690000006d000000610000006c00000020000000630000006f0000006d000000 *700000006c00000065000000740000006500000020000000640000006500000066000000690000 *006e0000006900000074000000690000006f0000006e0000003a00000020010401000000000000 *00007800000000000000000000000000000016010204000000200000006f000000720000002001 *04010000000000000000790000000000000000000000000000001602010000000a220000000000 *0000ba00000000000000bb00000000000000bc00000000000000b700000000000000bd00000000 *000000be00000000000000bf00000000000000c000000000000000c100000000000000c2000000 *00000000c300000000000000c400000000000000c500000000000000c600000000000000c70000 *0000000000c800000000000000c900000000000000ca00000000000000cb00000000000000cc00 *000000000000cd00000000000000ce00000000000000cf00000000000000d000000000000000d1 *00000000000000d200000000000000d300000000000000d4000000000000004e00000000000000 *4f000000000000007700000000000000780000000000000079000000000000007a040000000000 *0000770000000000000078000000000000007a0000000000000079000000000000000000000000 *00000017000108000000700000006f000000720000007400000061000000620000006c00000065 *010c0000006500000078000000700000006500000072000000690000006d000000650000006e00 *000074000000610000006c01150000006c00000069000000620000007200000061000000720000 *00690000006500000073000000400000006800000061000000730000006b000000650000006c00 *00006c0000002e0000006f0000007200000067002300000000000000ba00000000000000bb0000 *0000000000bc00000000000000b700000000000000bd00000000000000be00000000000000bf00 *000000000000c000000000000000c100000000000000c200000000000000c300000000000000c4 *00000000000000c500000000000000c600000000000000c700000000000000c800000000000000 *c900000000000000ca00000000000000cb00000000000000cc00000000000000cd000000000000 *00ce00000000000000cf00000000000000d000000000000000d100000000000000d20000000000 *0000d300000000000000d4000000000000004e000000000000004f000000000000007700000000 *000000780000000000000079000000000000007a000000000000007b01000000000000007b0000 *0000000000000000000000000018000108000000700000006f0000007200000074000000610000 *00620000006c00000065010c000000650000007800000070000000650000007200000069000000 *6d000000650000006e00000074000000610000006c01150000006c000000690000006200000072 *000000610000007200000069000000650000007300000040000000680000006100000073000000 *6b000000650000006c0000006c0000002e0000006f0000007200000067002600000000000000ba *00000000000000bb00000000000000bc00000000000000b700000000000000bd00000000000000 *be00000000000000bf00000000000000c000000000000000c100000000000000c2000000000000 *00c300000000000000c400000000000000c500000000000000c600000000000000c70000000000 *0000c800000000000000c900000000000000ca00000000000000cb00000000000000cc00000000 *000000cd00000000000000ce00000000000000cf00000000000000d000000000000000d1000000 *00000000d200000000000000d300000000000000d4000000000000004e000000000000004f0000 *000000000050000000000000007700000000000000780000000000000079000000000000007a00 *0000000000007c000000000000007d000000000000007e03000000000000007c00000000000000 *7d000000000000007e0000000000000000000000000000001900000000002f00000000000000ba *00000000000000bb00000000000000bc00000000000000b700000000000000bd00000000000000 *be00000000000000bf00000000000000c000000000000000c100000000000000c2000000000000 *00c300000000000000c400000000000000c500000000000000c600000000000000c70000000000 *0000c800000000000000c900000000000000ca00000000000000cb00000000000000cc00000000 *000000cd00000000000000ce00000000000000cf00000000000000d000000000000000d1000000 *00000000d200000000000000d300000000000000d4000000000000004e000000000000004f0000 *000000000051000000000000005200000000000000530000000000000054000000000000005500 *00000000000056000000000000005700000000000000580000000000000059000000000000005b *000000000000005c000000000000005d0000000000000077000000000000007800000000000000 *79000000000000007a000000000000007f01000000000000007f00000000000000000000000000 *00001a0001140000006e0000006f0000006e0000002d000000700000006f000000720000007400 *000061000000620000006c0000006500000020000000280000004d000000500000005400000043 *0000007300000029010c0000006500000078000000700000006500000072000000690000006d00 *0000650000006e00000074000000610000006c01150000006c0000006900000062000000720000 *006100000072000000690000006500000073000000400000006800000061000000730000006b00 *0000650000006c0000006c0000002e0000006f0000007200000067003200000000000000ba0000 *0000000000bb00000000000000bc00000000000000b700000000000000bd00000000000000be00 *000000000000bf00000000000000c000000000000000c100000000000000c200000000000000c3 *00000000000000c400000000000000c500000000000000c600000000000000c700000000000000 *c800000000000000c900000000000000ca00000000000000cb00000000000000cc000000000000 *00cd00000000000000ce00000000000000cf00000000000000d000000000000000d10000000000 *0000d200000000000000d300000000000000d4000000000000004e000000000000004f00000000 *000000510000000000000052000000000000005300000000000000540000000000000055000000 *0000000056000000000000005700000000000000580000000000000059000000000000005b0000 *00000000005c000000000000005d00000000000000770000000000000078000000000000007900 *0000000000007a000000000000007f000000000000008000000000000000810000000000000082 *030000000000000080000000000000008100000000000000820000000000000000000000000000 *001b0001140000006e0000006f0000006e0000002d000000700000006f00000072000000740000 *0061000000620000006c0000006500000020000000280000004d00000050000000540000004300 *00007300000029010c0000006500000078000000700000006500000072000000690000006d0000 *00650000006e00000074000000610000006c01150000006c000000690000006200000072000000 *6100000072000000690000006500000073000000400000006800000061000000730000006b0000 *00650000006c0000006c0000002e0000006f0000007200000067003200000000000000ba000000 *00000000bb00000000000000bc00000000000000b700000000000000bd00000000000000be0000 *0000000000bf00000000000000c000000000000000c100000000000000c200000000000000c300 *000000000000c400000000000000c500000000000000c600000000000000c700000000000000c8 *00000000000000c900000000000000ca00000000000000cb00000000000000cc00000000000000 *cd00000000000000ce00000000000000cf00000000000000d000000000000000d1000000000000 *00d200000000000000d300000000000000d4000000000000004e000000000000004f0000000000 *000051000000000000005200000000000000530000000000000054000000000000005500000000 *00000056000000000000005700000000000000580000000000000059000000000000005b000000 *000000005c000000000000005d0000000000000077000000000000007800000000000000790000 *00000000007a000000000000007f00000000000000830000000000000084000000000000008503 *000000000000008300000000000000840000000000000085000000000000000000000000000000 *1c0001140000006e0000006f0000006e0000002d000000700000006f0000007200000074000000 *61000000620000006c0000006500000020000000280000004d0000005000000054000000430000 *007300000029010c0000006500000078000000700000006500000072000000690000006d000000 *650000006e00000074000000610000006c01150000006c00000069000000620000007200000061 *00000072000000690000006500000073000000400000006800000061000000730000006b000000 *650000006c0000006c0000002e0000006f00000072000000670300000000000000860b021e0000 *00200000002800000078000000200000002a0000002e000000200000006d000000290000002000 *00002e0000002a0000002000000079000000200000003d0000002000000078000000200000002a *0000002e00000020000000280000006d000000200000002e0000002a0000002000000079000000 *2900000000000000870b021c00000020000000280000006d000000200000002e0000002a000000 *200000007800000029000000200000002a0000002000000079000000200000003d000000200000 *006d000000200000002e0000002a000000200000002800000078000000200000002a0000002000 *0000790000002900000000000000890b021c000000200000002800000078000000200000002a00 *0000200000007900000029000000200000002a0000002e000000200000006d000000200000003d *0000002000000078000000200000002a000000200000002800000079000000200000002a000000 *2e000000200000006d000000293400000000000000ba00000000000000bb00000000000000bc00 *000000000000b700000000000000bd00000000000000be00000000000000bf00000000000000c0 *00000000000000c100000000000000c200000000000000c300000000000000c400000000000000 *c500000000000000c600000000000000c700000000000000c800000000000000c9000000000000 *00ca00000000000000cb00000000000000cc00000000000000cd00000000000000ce0000000000 *0000cf00000000000000d000000000000000d100000000000000d200000000000000d300000000 *000000d4000000000000004e000000000000004f00000000000000510000000000000052000000 *000000005300000000000000540000000000000055000000000000005600000000000000570000 *0000000000580000000000000059000000000000005b000000000000005c000000000000005d00 *0000000000007700000000000000780000000000000079000000000000007a000000000000007f *000000000000008600000000000000870000000000000088000000000000008900000000000000 *8a050000000000000089000000000000008a000000000000008700000000000000880000000000 *0000860000000000000000000000000000001d0001140000006e0000006f0000006e0000002d00 *0000700000006f000000720000007400000061000000620000006c000000650000002000000028 *0000004d0000005000000054000000430000007300000029010c00000065000000780000007000 *00006500000072000000690000006d000000650000006e00000074000000610000006c01150000 *006c00000069000000620000007200000061000000720000006900000065000000730000004000 *00006800000061000000730000006b000000650000006c0000006c0000002e0000006f00000072 *0000006704000000000000008b03010203000000690000006600000020010702010000006d0102 *060000002000000069000000730000002000000061000000200104010000000000000000860000 *000000000000000000000000001c01020500000020000000610000006e00000064000000200107 *020100000066010206000000200000006900000073000000200000006100000020010401000000 *0000000000e50000000000000023000000000000002f0102060000002000000074000000680000 *00650000006e000000200107010202000000660000002001040200000000000000008c00000000 *00000000000000000000001d00000000000000008b0000000000000000000000000000001d0202 *000000200000006d01020600000020000000690000007300000020000000610000002001040100 *00000000000000860000000000000000000000000000001c020900000020000000610000007300 *00002000000077000000650000006c0000006c0000000a000000000000008e0301020200000041 *0000002001040200000000000000008f0000000000000000000000000000001d00000000000000 *008e0000000000000000000000000000001d01020b000000200000007400000075000000720000 *006e0000007300000020000000610000006e00000079000000200104010000000000000000e600 *00000000000023000000000000002f01021100000020000000690000006e000000730000007400 *0000610000006e000000630000006500000020000000690000006e000000740000006f00000020 *00000061000000200104010000000000000000b700000000000000230000000000000024010202 *0000002e0000000a01021600000020000000200000002000000049000000740000002000000061 *0000006c000000730000006f0000002000000070000000720000006f0000007600000069000000 *640000006500000073000000200000006100000020010401000000000000000057000000000000 *0000000000000000000f01021100000020000000690000006e0000007300000074000000610000 *006e000000630000006500000020000000660000006f0000007200000020000000610000006e00 *0000200104010000000000000000e50000000000000023000000000000002f01021a0000002000 *000066000000750000006e00000063000000740000006f00000072000000200000007700000072 *00000061000000700000007000000065000000640000002000000061000000720000006f000000 *750000006e000000640000002000000061000000200104010000000000000000b7000000000000 *002300000000000000240102010000000a01021800000020000000200000002000000061000000 *6e0000006400000020000000610000007300000073000000650000007200000074000000730000 *00200000007400000068000000610000007400000020000000610000006e000000790000002001 *04010000000000000000e60000000000000023000000000000002f01020e000000200000006100 *000070000000700000006c00000069000000650000006400000020000000740000006f00000020 *00000061000000200104010000000000000000b700000000000000230000000000000024010209 *00000020000000660000006f000000720000006d00000073000000200000006100000020010401 *00000000000000005b00000000000000000000000000000011010202000000200000000a021b00 *0000200000002000000020000000750000006e0000006400000065000000720000002000000074 *00000068000000650000007300000065000000200000006f000000700000006500000072000000 *6100000074000000690000006f0000006e000000730000002e0000000a00000000000000910301 *020200000041000000200104020000000000000000920000000000000000000000000000001d00 *00000000000000910000000000000000000000000000001d010218000000200000007500000073 *000000650000007300000020000000610000006e00000020000000670000006c00000075000000 *650000007300000020000000740000006f00000067000000650000007400000068000000650000 *0072000000200104010000000000000000e50000000000000023000000000000002f0102130000 *0020000000610000006300000074000000690000006f0000006e00000073000000200000007700 *000069000000740000006800000020000000280000002a0000003e000000290000000a01021400 *0000200000002000000020000000690000006e0000002000000074000000680000006500000020 *0000006d000000610000006e0000006e0000006500000072000000200000006f00000066000000 *200102090000007400000072000000610000007600000065000000720000007300000065000000 *5f0102060000002000000066000000720000006f0000006d0000002001050d0000004400000061 *00000074000000610000002e000000460000006f0000006c000000640000006100000062000000 *6c0000006501021a0000002e00000020000000410000006e000000790000002000000076000000 *610000006c00000075000000650000007300000020000000720000006500000074000000750000 *00720000006e0000006500000064000000200000006200000079000000200000000a0222000000 *200000002000000020000000720000006500000064000000750000006300000065000000640000 *0020000000610000006300000074000000690000006f0000006e00000073000000200000006100 *000072000000650000002000000064000000690000007300000063000000610000007200000064 *00000065000000640000002e0000000a0000000000000094030102320000004500000066000000 *66000000690000006300000069000000650000006e000000740000006c00000079000000200000 *0061000000760000006f0000006900000064000000200000006e00000065000000650000006400 *00006c0000006500000073000000730000006c0000007900000020000000720000006500000062 *000000690000006e00000064000000690000006e00000067000000200000007700000068000000 *650000006e000000200000007500000073000000690000006e0000006700000020010401000000 *00000000000200000000000000000000000000000001010226000000200000006f0000006e0000 *0020000000610000006e00000020000000610000006300000074000000690000006f0000006e00 *0000200000007400000068000000610000007400000020000000610000006c0000007200000065 *000000610000006400000079000000200000007200000065000000740000007500000072000000 *6e000000730000002000000028000000290000000a023b00000020000000200000002000000041 *000000200000007200000065000000770000007200000069000000740000006500000020000000 *72000000750000006c00000065000000200000006100000075000000740000006f0000006d0000 *0061000000740000006900000063000000610000006c0000006c00000079000000200000006100 *000070000000700000006c00000069000000650000007300000020000000740000006800000069 *00000073000000200000007700000068000000650000006e00000020000000700000006f000000 *730000007300000069000000620000006c000000650000000a4600000000000000ba0000000000 *0000bb00000000000000bc00000000000000b700000000000000bd00000000000000be00000000 *000000bf00000000000000c000000000000000c100000000000000c200000000000000c3000000 *00000000c400000000000000c500000000000000c600000000000000c700000000000000c80000 *0000000000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd00 *000000000000ce00000000000000cf00000000000000d000000000000000d100000000000000d2 *00000000000000d300000000000000d40000000000000000000000000000000100000000000000 *020000000000000003000000000000000400000000000000050000000000000006000000000000 *0007000000000000004e000000000000004f000000000000005100000000000000520000000000 *000053000000000000005400000000000000550000000000000056000000000000005700000000 *000000580000000000000059000000000000005b000000000000005c000000000000005d000000 *000000007700000000000000780000000000000079000000000000007a000000000000007f0000 *000000000086000000000000008700000000000000880000000000000089000000000000008a00 *0000000000008b000000000000008c000000000000008d000000000000008e000000000000008f *000000000000009000000000000000910000000000000092000000000000009300000000000000 *940a000000000000009100000000000000920000000000000093000000000000008e0000000000 *00008f0000000000000090000000000000008b000000000000008c000000000000008d00000000 *000000940000000000000000000000000000001e0001140000006e0000006f0000006e0000002d *000000700000006f000000720000007400000061000000620000006c0000006500000020000000 *280000004d0000005000000054000000430000007300000029010c000000650000007800000070 *0000006500000072000000690000006d000000650000006e00000074000000610000006c011500 *00006c000000690000006200000072000000610000007200000069000000650000007300000040 *0000006800000061000000730000006b000000650000006c0000006c0000002e0000006f000000 *720000006704000000000000009503010203000000690000006600000020010702010000006d01 *020600000020000000690000007300000020000000610000002001040100000000000000008600 *00000000000000000000000000001c010206000000200000006f00000076000000650000007200 *000020010702010000007201020500000020000000610000006e00000064000000200107020100 *000066010206000000200000006900000073000000200000006100000020010401000000000000 *0000e7000000000000002300000000000000300102060000002000000074000000680000006500 *00006e000000200107010202000000660000002001040200000000000000009600000000000000 *00000000000000001e0000000000000000950000000000000000000000000000001e0202000000 *200000006d01020600000020000000690000007300000020000000610000002001040100000000 *00000000860000000000000000000000000000001c020900000020000000610000007300000020 *00000077000000650000006c0000006c0000000a00000000000000980301020200000041000000 *200104020000000000000000990000000000000000000000000000001e00000000000000009800 *00000000000000000000000000001e01020b000000200000007400000075000000720000006e00 *00007300000020000000610000006e00000079000000200104010000000000000000e800000000 *00000023000000000000003001021100000020000000690000006e000000730000007400000061 *0000006e000000630000006500000020000000690000006e000000740000006f00000020000000 *61000000200104010000000000000000b700000000000000230000000000000024010202000000 *2e0000000a01021600000020000000200000002000000049000000740000002000000061000000 *6c000000730000006f0000002000000070000000720000006f0000007600000069000000640000 *006500000073000000200000006100000020010401000000000000000057000000000000000000 *0000000000000f01021000000020000000690000006e0000007300000074000000610000006e00 *0000630000006500000020000000660000006f0000007200000020000000610000002001040100 *00000000000000e700000000000000230000000000000030010212000000200000007700000072 *00000061000000700000007000000065000000640000002000000061000000720000006f000000 *750000006e000000640000002000000061000000200104010000000000000000b7000000000000 *002300000000000000240102010000000a01021800000020000000200000002000000061000000 *6e0000006400000020000000610000007300000073000000650000007200000074000000730000 *00200000007400000068000000610000007400000020000000610000006e000000790000002001 *04010000000000000000e80000000000000023000000000000003001020e000000200000006100 *000070000000700000006c00000069000000650000006400000020000000740000006f00000020 *00000061000000200104010000000000000000b700000000000000230000000000000024010209 *00000020000000660000006f000000720000006d00000073000000200000006100000020010401 *00000000000000005b00000000000000000000000000000011010202000000200000000a021b00 *0000200000002000000020000000750000006e0000006400000065000000720000002000000074 *00000068000000650000007300000065000000200000006f000000700000006500000072000000 *6100000074000000690000006f0000006e000000730000002e0000000a000000000000009b0301 *0203000000410000006e0000002001040200000000000000009c00000000000000000000000000 *00001e00000000000000009b0000000000000000000000000000001e0102150000002000000075 *00000073000000650000007300000020000000670000006c000000750000006500000073000000 *20000000740000006f000000670000006500000074000000680000006500000072000000200104 *010000000000000000e70000000000000023000000000000003001021300000020000000610000 *006300000074000000690000006f0000006e000000730000002000000077000000690000007400 *00006800000020000000280000003e0000003e000000290000000a010214000000200000002000 *000020000000690000006e00000020000000740000006800000065000000200000006d00000061 *0000006e0000006e0000006500000072000000200000006f000000660000002001040100000000 *00000000e900000000000000230000000000000030010206000000200000006600000072000000 *6f0000006d0000002001050d000000440000006100000074000000610000002e00000046000000 *6f0000006c0000006400000061000000620000006c0000006501021a0000002e00000020000000 *410000006e000000790000002000000076000000610000006c0000007500000065000000730000 *002000000072000000650000007400000075000000720000006e00000065000000640000002000 *00006200000079000000200000000a022200000020000000200000002000000072000000650000 *006400000075000000630000006500000064000000200000006100000063000000740000006900 *00006f0000006e0000007300000020000000610000007200000065000000200000006400000069 *000000730000006300000061000000720000006400000065000000640000002e0000000a000000 *000000009e03010232000000450000006600000066000000690000006300000069000000650000 *006e000000740000006c000000790000002000000061000000760000006f000000690000006400 *0000200000006e0000006500000065000000640000006c0000006500000073000000730000006c *0000007900000020000000720000006500000062000000690000006e0000006400000069000000 *6e00000067000000200000007700000068000000650000006e0000002000000075000000730000 *00690000006e000000670000002001040100000000000000000200000000000000000000000000 *000001010226000000200000006f0000006e00000020000000610000006e000000200000006100 *00006300000074000000690000006f0000006e0000002000000074000000680000006100000074 *00000020000000610000006c000000720000006500000061000000640000007900000020000000 *72000000650000007400000075000000720000006e000000730000002000000028000000290000 *000a023b0000002000000020000000200000004100000020000000720000006500000077000000 *720000006900000074000000650000002000000072000000750000006c00000065000000200000 *006100000075000000740000006f0000006d000000610000007400000069000000630000006100 *00006c0000006c00000079000000200000006100000070000000700000006c0000006900000065 *000000730000002000000074000000680000006900000073000000200000007700000068000000 *650000006e00000020000000700000006f000000730000007300000069000000620000006c0000 *00650000000a3b00000000000000ba00000000000000bb00000000000000bc00000000000000b7 *00000000000000bd00000000000000be00000000000000bf00000000000000c000000000000000 *c100000000000000c200000000000000c300000000000000c400000000000000c5000000000000 *00c600000000000000c700000000000000c800000000000000c900000000000000ca0000000000 *0000cb00000000000000cc00000000000000cd00000000000000ce00000000000000cf00000000 *000000d000000000000000d100000000000000d200000000000000d300000000000000d4000000 *000000000000000000000000010000000000000002000000000000000300000000000000040000 *00000000000500000000000000060000000000000007000000000000004e000000000000004f00 *000000000000510000000000000052000000000000005300000000000000540000000000000055 *000000000000005600000000000000570000000000000058000000000000005900000000000000 *5b000000000000005c000000000000009500000000000000960000000000000097000000000000 *00980000000000000099000000000000009a000000000000009b000000000000009c0000000000 *00009d000000000000009e0a000000000000009b000000000000009c000000000000009d000000 *000000009e00000000000000950000000000000096000000000000009700000000000000980000 *000000000099000000000000009a0000000000000000000000000000001f0001230000006e0000 *006f0000006e0000002d000000700000006f000000720000007400000061000000620000006c00 *000065000000200000002800000074000000790000007000000065000000200000006600000061 *0000006d000000690000006c0000006900000065000000730000002c000000200000004d000000 *5000000054000000430000007300000029010c0000006500000078000000700000006500000072 *000000690000006d000000650000006e00000074000000610000006c01150000006c0000006900 *000062000000720000006100000072000000690000006500000073000000400000006800000061 *000000730000006b000000650000006c0000006c0000002e0000006f0000007200000067140000 *00000000009f0301020c0000004500000066000000660000006900000063000000690000006500 *00006e000000740000006c00000079000000200104010000000000000000270000000000000000 *000000000000000601020300000020000000610000002001040100000000000000002500000000 *00000000000000000000000601020b000000200000007500000073000000690000006e00000067 *000000200000007400000068000000650000002001040200000000000000009200000000000000 *00000000000000001d0000000000000000910000000000000000000000000000001d0102320000 *00200000006d0000006f0000006e0000006f00000069000000640000002e000000200000004100 *0000200000007300000070000000650000006300000069000000610000006c000000690000007a *00000065000000640000002000000076000000650000007200000073000000690000006f000000 *6e000000200000006f0000006600000020000000690000007400000073000000200000006e0000 *00610000006d0000006500000073000000610000006b0000006500000020000000690000006e00 *00002001050d000000440000006100000074000000610000002e000000460000006f0000006c00 *00006400000061000000620000006c0000006502010000000a00000000000000a0030102080000 *00660000006c000000690000007000000070000000650000006400000020010401000000000000 *00009f0000000000000000000000000000001f0102070000002000000061000000730000002000 *0000690000006e0000002001050d000000440000006100000074000000610000002e0000004600 *00006f0000006c0000006400000061000000620000006c0000006502010000000a000000000000 *00a10301020c000000450000006600000066000000690000006300000069000000650000006e00 *0000740000006c0000007900000020010401000000000000000027000000000000000000000000 *000000060102030000002000000061000000200104010000000000000000250000000000000000 *000000000000000601020b000000200000007500000073000000690000006e0000006700000020 *0000007400000068000000650000002001040200000000000000009c0000000000000000000000 *000000001e00000000000000009b0000000000000000000000000000001e010234000000200000 *006d0000006f0000006e0000006f00000069000000640000002e00000020000000410000002000 *00007300000070000000650000006300000069000000610000006c000000690000007a00000065 *000000640000002000000076000000650000007200000073000000690000006f0000006e000000 *200000006f0000006600000020000000690000007400000073000000200000006e000000610000 *006d0000006500000073000000610000006b000000650000002000000066000000720000006f00 *00006d0000002001050d000000440000006100000074000000610000002e000000460000006f00 *00006c0000006400000061000000620000006c0000006501020500000020000000610000006e00 *0000640000002001050d000000430000006f0000006e00000074000000720000006f0000006c00 *00002e0000004d0000006f0000006e000000610000006402010000000a00000000000000a20301 *0208000000660000006c0000006900000070000000700000006500000064000000200104010000 *000000000000a10000000000000000000000000000001f01020700000020000000610000007300 *000020000000690000006e0000002001050d000000440000006100000074000000610000002e00 *0000460000006f0000006c0000006400000061000000620000006c000000650102050000002000 *0000610000006e000000640000002001050d000000430000006f0000006e000000740000007200 *00006f0000006c0000002e0000004d0000006f0000006e000000610000006402010000000a0000 *0000000000a30301020c0000004500000066000000660000006900000063000000690000006500 *00006e000000740000006c00000079000000200104010000000000000000270000000000000000 *000000000000000601020300000020000000610000002001040100000000000000002500000000 *00000000000000000000000601020b000000200000007500000073000000690000006e00000067 *000000200000007400000068000000650000002001040200000000000000003e00000000000000 *00000000000000000900000000000000003d000000000000000000000000000000090102340000 *00200000006d0000006f0000006e0000006f00000069000000640000002e000000200000004100 *0000200000007300000070000000650000006300000069000000610000006c000000690000007a *00000065000000640000002000000076000000650000007200000073000000690000006f000000 *6e000000200000006f0000006600000020000000690000007400000073000000200000006e0000 *00610000006d0000006500000073000000610000006b0000006500000020000000660000007200 *00006f0000006d0000002001050d000000440000006100000074000000610000002e0000004600 *00006f0000006c0000006400000061000000620000006c0000006502010000000a000000000000 *00a40301020c000000450000006600000066000000690000006300000069000000650000006e00 *0000740000006c000000790000002001040100000000000000002a000000000000000000000000 *000000060102030000002000000061000000200104010000000000000000250000000000000000 *000000000000000601020b000000200000007500000073000000690000006e0000006700000020 *0000007400000068000000650000002001040200000000000000003e0000000000000000000000 *000000000900000000000000003d00000000000000000000000000000009010234000000200000 *006d0000006f0000006e0000006f00000069000000640000002e00000020000000410000002000 *00007300000070000000650000006300000069000000610000006c000000690000007a00000065 *000000640000002000000076000000650000007200000073000000690000006f0000006e000000 *200000006f0000006600000020000000690000007400000073000000200000006e000000610000 *006d0000006500000073000000610000006b000000650000002000000066000000720000006f00 *00006d0000002001050d000000440000006100000074000000610000002e000000460000006f00 *00006c0000006400000061000000620000006c0000006502010000000a00000000000000a50301 *021c00000041000000200000006600000075000000720000007400000068000000650000007200 *0000200000007300000070000000650000006300000069000000610000006c000000690000007a *0000006100000074000000690000006f0000006e000000200000006f0000006600000020010507 *000000660000006f0000006c000000640000004d000000610000007002010000000a0000000000 *0000a60301020c000000450000006600000066000000690000006300000069000000650000006e *000000740000006c000000790000002001040100000000000000002a0000000000000000000000 *000000000601020300000020000000610000002001040100000000000000002500000000000000 *00000000000000000601021e000000200000007400000068000000610000007400000020000000 *630000006f0000006e0000007400000061000000690000006e0000007300000020000000760000 *00610000006c000000750000006500000073000000200000006f00000066000000200000007400 *0000790000007000000065000000200104010000000000000000ea000000000000002800000000 *0000003102010000000a00000000000000a70301020c0000004500000066000000660000006900 *00006300000069000000650000006e000000740000006c00000079000000200104010000000000 *0000002a0000000000000000000000000000000601020300000020000000610000002001040100 *00000000000000250000000000000000000000000000000601021e000000200000007400000068 *000000610000007400000020000000630000006f0000006e000000740000006100000069000000 *6e000000730000002000000076000000610000006c000000750000006500000073000000200000 *006f00000066000000200000007400000079000000700000006500000020010401000000000000 *0000ea0000000000000028000000000000003102010000000a00000000000000a80301020c0000 *00450000006600000066000000690000006300000069000000650000006e000000740000006c00 *000079000000200104010000000000000000270000000000000000000000000000000601020500 *000020000000610000006e00000079000000200104010000000000000000250000000000000000 *0000000000000006024300000020000000630000006800000065000000630000006b0000006900 *00006e0000006700000020000000740000006f0000002000000073000000650000006500000020 *000000690000006600000020000000610000006e00000079000000200000006f00000066000000 *200000006900000074000000730000002000000076000000610000006c00000075000000650000 *0073000000200000006d0000006100000074000000630000006800000020000000740000006800 *00006500000020000000730000007500000070000000700000006c000000690000006500000064 *000000200000007000000072000000650000006400000069000000630000006100000074000000 *650000000a00000000000000a90301020c00000045000000660000006600000069000000630000 *0069000000650000006e000000740000006c000000790000002001040100000000000000002700 *00000000000000000000000000000601020500000020000000610000006e000000790000002001 *040100000000000000002500000000000000000000000000000006024300000020000000630000 *006800000065000000630000006b000000690000006e0000006700000020000000740000006f00 *00002000000073000000650000006500000020000000690000006600000020000000610000006c *0000006c000000200000006f000000660000002000000069000000740000007300000020000000 *76000000610000006c000000750000006500000073000000200000006d00000061000000740000 *006300000068000000200000007400000068000000650000002000000073000000750000007000 *0000700000006c0000006900000065000000640000002000000070000000720000006500000064 *00000069000000630000006100000074000000650000000a00000000000000aa0301020c000000 *450000006600000066000000690000006300000069000000650000006e000000740000006c0000 *007900000020010401000000000000000027000000000000000000000000000000060102050000 *0020000000610000006e0000007900000020010401000000000000000025000000000000000000 *0000000000000601020b000000200000007500000073000000690000006e000000670000002000 *0000740000006800000065000000200104020000000000000000ca000000000000002300000000 *000000240000000000000000cb0000000000000023000000000000002401020100000020010401 *0000000000000000b70000000000000023000000000000002402010000000a00000000000000ab *0301020c000000450000006600000066000000690000006300000069000000650000006e000000 *740000006c00000079000000200104010000000000000000270000000000000000000000000000 *000601020500000020000000610000006e00000079000000200104010000000000000000250000 *000000000000000000000000000601020b000000200000007500000073000000690000006e0000 *006700000020000000740000006800000065000000200104020000000000000000cd0000000000 *00002300000000000000240000000000000000ce00000000000000230000000000000024010201 *000000200104010000000000000000b70000000000000023000000000000002402010000000a00 *000000000000ac03010210000000430000006800000065000000630000006b0000002000000074 *0000006f0000002000000073000000650000006500000020000000690000006600000020010401 *0000000000000000a80000000000000000000000000000001f01020f000000200000006d000000 *650000006d000000620000006500000072000000200000006f0000006600000020000000740000 *006800000065000000200104010000000000000000250000000000000000000000000000000602 *1c000000200000006d000000610000007400000063000000680000006500000073000000200000 *0074000000680000006500000020000000730000007500000070000000700000006c0000006900 *000065000000640000002000000076000000610000006c00000075000000650000000a00000000 *000000ad03010242000000430000006800000065000000630000006b0000002000000074000000 *6f000000200000006d000000610000006b00000065000000200000007300000075000000720000 *006500000020000000740000006800000061000000740000002000000074000000680000006500 *000020000000730000007500000070000000700000006c00000069000000650000006400000020 *00000076000000610000006c000000750000006500000020000000690000007300000020000000 *6e0000006f000000740000002000000061000000200000006d000000650000006d000000620000 *006500000072000000200000006f00000066000000200000007400000068000000650000002001 *04010000000000000000250000000000000000000000000000000602010000000a000000000000 *00ae0301020c000000450000006600000066000000690000006300000069000000650000006e00 *0000740000006c0000007900000020010401000000000000000027000000000000000000000000 *0000000601021f0000002000000061000000200000007300000075000000620000007300000065 *00000074000000200000006f000000660000002000000074000000680000006500000020000000 *650000006c000000650000006d000000650000006e000000740000007300000020000000690000 *006e00000020000000610000002001040100000000000000002500000000000000000000000000 *00000602010000000a00000000000000af03010214000000410000002000000073000000700000 *00650000006300000069000000610000006c000000690000007a00000061000000740000006900 *00006f0000006e000000200000006f00000066000000200104010000000000000000ae00000000 *00000000000000000000001f01020b000000200000007500000073000000690000006e00000067 *00000020000000740000006800000065000000200104020000000000000000d000000000000000 *2300000000000000240000000000000000d1000000000000002300000000000000240102010000 *00200104010000000000000000b70000000000000023000000000000002401020f0000002c0000 *0020000000610000006e000000610000006c0000006f000000670000006f000000750000007300 *000020000000740000006f0000002001020e000000440000006100000074000000610000002e00 *00004c0000006900000073000000740000002e00000066000000690000006e0000006402010000 *000a00000000000000b003010214000000410000002000000067000000650000006e0000006500 *000072000000610000006c000000690000007a0000006100000074000000690000006f0000006e *000000200000006f0000006600000020010213000000440000006100000074000000610000002e *0000004c0000006900000073000000740000002e0000007200000065000000700000006c000000 *690000006300000061000000740000006501021100000020000000740000006f00000020000000 *610000006e00000020000000610000007200000062000000690000007400000072000000610000 *007200000079000000200104010000000000000000b70000000000000023000000000000002401 *02100000002e000000200000004100000064000000610000007000000074000000650000006400 *00002000000066000000720000006f0000006d000000200000000a01020100000020010c4a0000 *00680000007400000074000000700000003a0000002f0000002f00000061000000750000006700 *000075000000730000007400000073000000730000002e000000620000006c0000006f00000067 *00000073000000700000006f000000740000002e000000630000006f0000006d0000002f000000 *320000003000000030000000380000002f00000030000000370000002f0000006c0000006f0000 *0073000000740000002d000000610000006e000000640000002d000000660000006f0000007500 *00006e000000640000002d00000069000000660000002d000000690000002d0000007700000072 *0000006900000074000000650000002d0000003100000030000000380000002d00000069000000 *6e0000002e00000068000000740000006d0000006c02010000000a00000000000000b103010214 *000000410000002000000067000000650000006e0000006500000072000000610000006c000000 *690000007a0000006100000074000000690000006f0000006e000000200000006f000000660000 *002001020f000000440000006100000074000000610000002e0000004c00000069000000730000 *00740000002e0000006300000079000000630000006c0000006501021100000020000000740000 *006f00000020000000610000006e00000020000000610000007200000062000000690000007400 *000072000000610000007200000079000000200104010000000000000000b70000000000000023 *000000000000002402390000002e000000200000004d0000006100000079000000200000006600 *000061000000690000006c00000020000000740000006f00000020000000740000006500000072 *0000006d000000690000006e00000061000000740000006500000020000000660000006f000000 *7200000020000000730000006f0000006d000000650000002000000076000000610000006c0000 *0075000000650000007300000020000000690000006e00000020000000730000006f0000006d00 *000065000000200000006d0000006f0000006e0000006f0000006900000064000000730000002e *0000000a00000000000000b203010214000000410000002000000067000000650000006e000000 *6500000072000000610000006c000000690000007a0000006100000074000000690000006f0000 *006e000000200000006f0000006600000020010210000000440000006100000074000000610000 *002e0000004c0000006900000073000000740000002e0000007200000065000000700000006500 *0000610000007401021100000020000000740000006f00000020000000610000006e0000002000 *000061000000720000006200000069000000740000007200000061000000720000007900000020 *0104010000000000000000b70000000000000023000000000000002402390000002e0000002000 *00004d0000006100000079000000200000006600000061000000690000006c0000002000000074 *0000006f000000200000007400000065000000720000006d000000690000006e00000061000000 *740000006500000020000000660000006f0000007200000020000000730000006f0000006d0000 *00650000002000000076000000610000006c000000750000006500000073000000200000006900 *00006e00000020000000730000006f0000006d00000065000000200000006d0000006f0000006e *0000006f0000006900000064000000730000002e0000000a4700000000000000ba000000000000 *00bb00000000000000bc00000000000000b700000000000000bd00000000000000be0000000000 *0000bf00000000000000c000000000000000c100000000000000c200000000000000c300000000 *000000c400000000000000c500000000000000c600000000000000c700000000000000c8000000 *00000000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd0000 *0000000000ce00000000000000cf00000000000000d000000000000000d100000000000000d200 *000000000000d300000000000000d4000000000000000000000000000000010000000000000002 *000000000000000300000000000000040000000000000005000000000000000600000000000000 *07000000000000001c000000000000001d000000000000001e000000000000001f000000000000 *002000000000000000210000000000000022000000000000002300000000000000240000000000 *000025000000000000002600000000000000270000000000000028000000000000002900000000 *0000002a000000000000009f00000000000000a000000000000000a100000000000000a2000000 *00000000a300000000000000a400000000000000a500000000000000a600000000000000a70000 *0000000000a800000000000000a900000000000000aa00000000000000ab00000000000000ac00 *000000000000ad00000000000000ae00000000000000af00000000000000b000000000000000b1 *00000000000000b21400000000000000a100000000000000a2000000000000009f000000000000 *00a000000000000000a600000000000000a700000000000000a800000000000000a90000000000 *0000a300000000000000a400000000000000a500000000000000ac00000000000000ae00000000 *000000af00000000000000aa00000000000000ab00000000000000ad00000000000000b2000000 *00000000b000000000000000b1000000000000000000000000000000200001140000006e000000 *6f0000006e0000002d000000700000006f000000720000007400000061000000620000006c0000 *006500000020000000280000004d0000005000000054000000430000007300000029010c000000 *6500000078000000700000006500000072000000690000006d000000650000006e000000740000 *00610000006c01150000006c000000690000006200000072000000610000007200000069000000 *6500000073000000400000006800000061000000730000006b000000650000006c0000006c0000 *002e0000006f0000007200000067002700000000000000ba00000000000000bb00000000000000 *bc00000000000000b700000000000000bd00000000000000be00000000000000bf000000000000 *00c000000000000000c100000000000000c200000000000000c300000000000000c40000000000 *0000c500000000000000c600000000000000c700000000000000c800000000000000c900000000 *000000ca00000000000000cb00000000000000cc00000000000000cd00000000000000ce000000 *00000000cf00000000000000d000000000000000d100000000000000d200000000000000d30000 *0000000000d4000000000000000000000000000000010000000000000002000000000000000300 *0000000000000400000000000000050000000000000006000000000000000700000000000000b3 *00000000000000b400000000000000b50300000000000000b300000000000000b4000000000000 *00b50000000000000000000000000000002100000000003500000000000000ba00000000000000 *bb00000000000000bc00000000000000b700000000000000bd00000000000000be000000000000 *00bf00000000000000c000000000000000c100000000000000c200000000000000c30000000000 *0000c400000000000000c500000000000000c600000000000000c700000000000000c800000000 *000000c900000000000000ca00000000000000cb00000000000000cc00000000000000cd000000 *00000000ce00000000000000cf00000000000000d000000000000000d100000000000000d20000 *0000000000d300000000000000d4000000000000004e000000000000004f000000000000005100 *000000000000520000000000000053000000000000005400000000000000550000000000000056 *000000000000005700000000000000580000000000000059000000000000005b00000000000000 *5c000000000000005d000000000000007700000000000000780000000000000079000000000000 *007a000000000000007f0000000000000086000000000000008700000000000000880000000000 *000089000000000000008a00000000000000b60100000000000000b600000000000000eb000000 *000000000000000000000000010300000000000000320000000000000000000000000000000100 *000000000000003300000000000000000000000000000001000000000000000034000000000000 *000000000000000000010000000000000000350000000000000000000000000000000100000000 *000000003600000000000000000000000000000001000000000000000037000000000000000000 *000000000000010000000000000000380000000000000000000000000000000100000000000000 *00390000000000000000000000000000000203000000000000003a000000000000000000000000 *0000000200000000000000003b0000000000000000000000000000000200000000000000003c00 *00000000000000000000000000000303000000000000003d000000000000000000000000000000 *0301000000000000003d0000000000000000000000000000000300000000000000003e00000000 *00000000000000000000000403000000000000003f000000000000000000000000000000040100 *0000000000003f0000000000000000000000000000000400000000000000004000000000000000 *000000000000000004030000000000000041000000000000000000000000000000040000000000 *000000420000000000000000000000000000000400000000000000004300000000000000000000 *000000000004030000000000000044000000000000000000000000000000040100000000000000 *440000000000000000000000000000000400000000000000004500000000000000000000000000 *000004030000000000000046000000000000000000000000000000040000000000000000470000 *000000000000000000000000000400000000000000004800000000000000000000000000000005 *0300000000000000490000000000000000000000000000000500000000000000004a0000000000 *000000000000000000000603000000000000004b00000000000000000000000000000006010000 *00000000004b0000000000000000000000000000000600000000000000004c0000000000000000 *000000000000000603000000000000004d00000000000000000000000000000006010000000000 *00004d0000000000000000000000000000000600000000000000004e0000000000000000000000 *000000000603000000000000004f0000000000000000000000000000000601000000000000004f *000000000000000000000000000000060000000000000000500000000000000000000000000000 *000603000000000000005100000000000000000000000000000006030000000000000052000000 *000000000000000000000000060000000000000000530000000000000000000000000000000600 *000000000000005400000000000000000000000000000006000000000000000055000000000000 *000000000000000000060000000000000000560000000000000000000000000000000703000000 *000000005700000000000000000000000000000007030000000000000058000000000000000000 *000000000000070300000000000000590000000000000000000000000000000700000000000000 *005a0000000000000000000000000000000700000000000000005b000000000000000000000000 *0000000700000000000000005c0000000000000000000000000000000700000000000000005d00 *00000000000000000000000000000700000000000000005e000000000000000000000000000000 *0803000000000000005f0000000000000000000000000000000800000000000000006000000000 *000000000000000000000008030000000000000061000000000000000000000000000000080000 *000000000000620000000000000000000000000000000803000000000000006300000000000000 *000000000000000008030000000000000064000000000000000000000000000000080000000000 *000000650000000000000000000000000000000800000000000000006600000000000000000000 *000000000008000000000000000067000000000000000000000000000000080000000000000000 *680000000000000000000000000000000903000000000000006900000000000000000000000000 *0000090100000000000000690000000000000000000000000000000900000000000000006a0000 *000000000000000000000000000a03000000000000006b0000000000000000000000000000000a *01000000000000006b0000000000000000000000000000000a00000000000000006c0000000000 *000000000000000000000a00000000000000006d0000000000000000000000000000000a000000 *00000000006e0000000000000000000000000000000b03000000000000006f0000000000000000 *000000000000000b01000000000000006f0000000000000000000000000000000b000000000000 *0000700000000000000000000000000000000c0300000000000000710000000000000000000000 *000000000c0100000000000000710000000000000000000000000000000c030000000000000072 *0000000000000000000000000000000c0100000000000000720000000000000000000000000000 *000c0000000000000000730000000000000000000000000000000c000000000000000074000000 *0000000000000000000000000d0000000000000000750000000000000000000000000000000d00 *00000000000000760000000000000000000000000000000e000000000000000077000000000000 *0000000000000000000f0300000000000000780000000000000000000000000000000f01000000 *00000000780000000000000000000000000000000f000000000000000079000000000000000000 *0000000000000f03000000000000007a0000000000000000000000000000000f01000000000000 *007a0000000000000000000000000000000f00000000000000007b000000000000000000000000 *0000000f03000000000000007c0000000000000000000000000000000f00000000000000007d00 *00000000000000000000000000000f00000000000000007e000000000000000000000000000000 *1000000000000000007f0000000000000000000000000000001103000000000000008000000000 *000000000000000000000011030000000000000081000000000000000000000000000000120300 *000000000000820000000000000000000000000000001303000000000000008300000000000000 *000000000000000013010000000000000083000000000000000000000000000000130000000000 *000000840000000000000000000000000000001303000000000000008500000000000000000000 *000000000013010000000000000085000000000000000000000000000000130000000000000000 *860000000000000000000000000000001303000000000000008700000000000000000000000000 *000013010000000000000087000000000000000000000000000000130000000000000000880000 *000000000000000000000000001303000000000000008900000000000000000000000000000013 *0100000000000000890000000000000000000000000000001300000000000000008a0000000000 *000000000000000000001300000000000000008b00000000000000000000000000000013000000 *00000000008c0000000000000000000000000000001403000000000000008d0000000000000000 *000000000000001401000000000000008d00000000000000000000000000000014000000000000 *00008e0000000000000000000000000000001400000000000000008c0000000000000000000000 *000000001503000000000000008f00000000000000000000000000000015010000000000000090 *0000000000000000000000000000001501000000000000008f0000000000000000000000000000 *001501000000000000009100000000000000000000000000000015030000000000000092000000 *000000000000000000000000150100000000000000920000000000000000000000000000001500 *000000000000009300000000000000000000000000000016030000000000000094000000000000 *000000000000000000160000000000000000950000000000000000000000000000001600000000 *000000009600000000000000000000000000000016000000000000000097000000000000000000 *000000000000170000000000000000980000000000000000000000000000001800000000000000 *00990000000000000000000000000000001800000000000000009a000000000000000000000000 *0000001800000000000000009b0000000000000000000000000000001903000000000000009c00 *00000000000000000000000000001a03000000000000009d000000000000000000000000000000 *1a01000000000000009d0000000000000000000000000000001a00000000000000009e00000000 *00000000000000000000001b03000000000000009f0000000000000000000000000000001b0100 *0000000000009f0000000000000000000000000000001b0000000000000000a000000000000000 *00000000000000001c0300000000000000a10000000000000000000000000000001c0300000000 *000000a20000000000000000000000000000001c0000000000000000a300000000000000000000 *00000000001c0300000000000000a40000000000000000000000000000001c0000000000000000 *a50000000000000000000000000000001d0300000000000000a600000000000000000000000000 *00001d0100000000000000a60000000000000000000000000000001d0000000000000000a70000 *000000000000000000000000001d0300000000000000a80000000000000000000000000000001d *0100000000000000a80000000000000000000000000000001d0000000000000000a90000000000 *000000000000000000001d0300000000000000aa0000000000000000000000000000001d010000 *0000000000aa0000000000000000000000000000001d0000000000000000ab0000000000000000 *000000000000001d0000000000000000ac0000000000000000000000000000001e030000000000 *0000ad0000000000000000000000000000001e0100000000000000ad0000000000000000000000 *000000001e0000000000000000ae0000000000000000000000000000001e0300000000000000af *0000000000000000000000000000001e0100000000000000af0000000000000000000000000000 *001e0000000000000000b00000000000000000000000000000001e0300000000000000b1000000 *0000000000000000000000001e0100000000000000b10000000000000000000000000000001e00 *00000000000000b20000000000000000000000000000001e0000000000000000b3000000000000 *0000000000000000001f0000000000000000b40000000000000000000000000000001f00000000 *00000000b50000000000000000000000000000001f0000000000000000b6000000000000000000 *0000000000001f0000000000000000b70000000000000000000000000000001f00000000000000 *00b80000000000000000000000000000001f0000000000000000b9000000000000000000000000 *0000001f0000000000000000ba0000000000000000000000000000001f0000000000000000bb00 *00000000000000000000000000001f0000000000000000bc000000000000000000000000000000 *1f0000000000000000bd0000000000000000000000000000001f0000000000000000be00000000 *00000000000000000000001f0000000000000000bf0000000000000000000000000000001f0000 *000000000000c00000000000000000000000000000001f0000000000000000c100000000000000 *00000000000000001f0000000000000000c20000000000000000000000000000001f0000000000 *000000c30000000000000000000000000000001f0000000000000000c400000000000000000000 *00000000001f0000000000000000980000000000000000000000000000001f0000000000000000 *c50000000000000000000000000000001f0000000000000000c600000000000000000000000000 *0000200300000000000000c7000000000000000000000000000000200100000000000000c70000 *00000000000000000000000000200000000000000000c800000000000000000000000000000021 *0300000000000000c9000000000000002300000000000000240300000000000000ca0000000000 *00002300000000000000250300000000000000cb00000000000000230000000000000026030000 *0000000000cc000000000000002300000000000000240000000000000000cd0000000000000023 *00000000000000240000000000000000ce00000000000000230000000000000024000000000000 *0000cf000000000000002300000000000000240000000000000000d00000000000000023000000 *00000000240100000000000000d1000000000000002300000000000000240300000000000000d1 *000000000000002300000000000000240000000000000000d20000000000000023000000000000 *00240100000000000000d3000000000000002300000000000000240300000000000000d3000000 *000000002300000000000000240000000000000000d40000000000000023000000000000002401 *00000000000000d5000000000000002300000000000000240300000000000000d5000000000000 *002300000000000000240000000000000000d60000000000000023000000000000002401000000 *00000000d7000000000000002300000000000000240300000000000000d7000000000000002300 *000000000000240000000000000000d80000000000000023000000000000002401000000000000 *00d9000000000000002300000000000000240300000000000000d9000000000000002300000000 *000000240000000000000000da000000000000002300000000000000240100000000000000db00 *0000000000002300000000000000240300000000000000db000000000000002300000000000000 *240000000000000000dc000000000000002300000000000000240100000000000000dd00000000 *0000002300000000000000240300000000000000dd000000000000002300000000000000240000 *000000000000de000000000000002300000000000000240100000000000000df00000000000000 *2300000000000000240300000000000000df00000000000000e000000000000000e10300000000 *000000e200000000000000e000000000000000e10000000000000000e300000000000000230000 *0000000000e40300000000000000e5000000000000002800000000000000290300000000000000 *e60000000000000023000000000000002a0000000000000000e700000000000000230000000000 *00002b0300000000000000e80000000000000023000000000000002b0000000000000000e90000 *000000000023000000000000002b0000000000000000ea0000000000000023000000000000002b *0000000000000000eb0000000000000023000000000000002b0000000000000000ec0000000000 *00002300000000000000ed0000000000000000ee00000000000000230000000000000025010000 *0000000000ef000000000000002300000000000000ed0000000000000000f00000000000000023 *00000000000000f10000000000000000f2000000000000002300000000000000f1000000000000 *0000f3000000000000002300000000000000f40000000000000000770000000000000023000000 *000000002f0300000000000000f50000000000000023000000000000002f0300000000000000f6 *000000000000002300000000000000f70300000000000000f80000000000000023000000000000 *00300300000000000000f9000000000000002300000000000000300000000000000000b6000000 *000000002800000000000000310300000000000000fa00000000000000fb000000000000000d6d *6f6e6f6964732d302e312e380000000000000013446174612e4d6f6e6f69642e52656475636572 *0000000000000018446174612e4d6f6e6f69642e526564756365722e4368617200000000000000 *18446174612e4d6f6e6f69642e526564756365722e576974680000000000000011446174612e4d *6f6e6f69642e556e696f6e0000000000000020446174612e4d6f6e6f69642e4c65786963616c2e *555446382e4465636f6465720000000000000015446174612e4d6f6e6f69642e47656e65726174 *6f720000000000000022446174612e4d6f6e6f69642e4c65786963616c2e536f75726365506f73 *6974696f6e0000000000000019446174612e4d6f6e6f69642e4c65786963616c2e576f72647300 *00000000000010446174612e4d6f6e6f69642e53656c66000000000000001a446174612e4d6f6e *6f69642e47656e657261746f722e4c5a37380000000000000016446174612e4d6f6e6f69642e46 *726f6d537472696e670000000000000017446174612e4d6f6e6f69642e43617465676f72696361 *6c0000000000000014446174612e4d6f6e6f69642e4164646974697665000000000000001a4461 *74612e4d6f6e6f69642e41646469746976652e5375676172000000000000001a446174612e4d6f *6e6f69642e4d756c7469706c696361746976650000000000000020446174612e4d6f6e6f69642e *4d756c7469706c696361746976652e53756761720000000000000013446174612e52696e672e53 *656d692e4e656172000000000000000e446174612e52696e672e53656d69000000000000000f44 *6174612e4d6f6e6f69642e4f72640000000000000017446174612e52696e672e53656d692e5472 *6f706963616c0000000000000012446174612e52696e672e53656d692e4f726400000000000000 *0a446174612e47726f75700000000000000016446174612e47726f75702e436f6d62696e61746f *72730000000000000010446174612e47726f75702e53756761720000000000000009446174612e *52696e670000000000000011446174612e52696e672e426f6f6c65616e00000000000000114461 *74612e52696e672e46726f6d4e756d0000000000000010446174612e52696e672e4d6f64756c65 *0000000000000017446174612e4d6f6e6f69642e4170706c696361746976650000000000000011 *446174612e4d6f6e6f69642e4d6f6e61640000000000000017446174612e4d6f6e6f69642e436f *6d62696e61746f72730000000000000025446174612e4d6f6e6f69642e4c65786963616c2e5275 *6e4c656e677468456e636f64696e670000000000000029446174612e52696e672e4d6f64756c65 *2e4175746f6d61746963446966666572656e74696174696f6e0000000000000015446174612e4d *6f6e6f69642e496e7374616e636573000000000000000462617365000000000000000b44617461 *2e4d6f6e6f6964000000000000000a446174612e4d61796265000000000000000d446174612e46 *6f6c6461626c650000000000000009446174612e576f726400000000000000086768632d707269 *6d00000000000000094748432e5479706573000000000000000b4748432e556e69636f64650000 *000000000010436f6e74726f6c2e43617465676f72790000000000000008446174612e4f726400 *000000000000075072656c756465000000000000000f446174612e52696e672e53756761720000 *000000000013436f6e74726f6c2e4170706c69636174697665000000000000000d436f6e74726f *6c2e4d6f6e616400000000000000084748432e426f6f6c00000000000000075265647563657200 *00000000000004756e69740000000000000004736e6f630000000000000004636f6e7300000000 *0000000d666f6c644d6170526564756365000000000000000a666f6c6452656475636500000000 *0000000a72657475726e556e6974000000000000000870757265556e6974000000000000000b43 *68617252656475636572000000000000000866726f6d43686172000000000000000b696e76616c *696443686172000000000000000b5769746852656475636572000000000000000e776974686f75 *74526564756365720000000000000009556e696f6e57697468000000000000000c676574556e69 *6f6e57697468000000000000000c486173556e696f6e576974680000000000000009756e696f6e *576974680000000000000009656d707479576974680000000000000005556e696f6e0000000000 *000008676574556e696f6e0000000000000008486173556e696f6e0000000000000005656d7074 *790000000000000005756e696f6e000000000000000455544638000000000000000772756e5554 *463800000000000000054368617238000000000000000867657443686172380000000000000006 *56616c756573000000000000000967657456616c75657300000000000000044b65797300000000 *000000076765744b657973000000000000000947656e657261746f720000000000000004456c65 *6d00000000000000096d617052656475636500000000000000056d6170546f0000000000000007 *6d617046726f6d0000000000000006726564756365000000000000000e536f75726365506f7369 *74696f6e000000000000000c536f75726365436f6c756d6e000000000000000a536f757263654c *696e6500000000000000076e657874546162000000000000000b73746172744f6646696c650000 *00000000000c736f75726365436f6c756d6e000000000000000a736f757263654c696e65000000 *000000001273686f77536f75726365506f736974696f6e0000000000000007556e6c696e656400 *0000000000000a72756e556e6c696e65640000000000000008556e737061636564000000000000 *000b72756e556e73706163656400000000000000054c696e65730000000000000005576f726473 *000000000000000872756e576f726473000000000000000872756e4c696e657300000000000000 *09776f72647346726f6d00000000000000096c696e657346726f6d000000000000000453656c66 *000000000000000767657453656c6600000000000000044c5a373800000000000000076765744c *5a373800000000000000066465636f64650000000000000006656e636f6465000000000000000a *46726f6d537472696e67000000000000000d67657446726f6d537472696e670000000000000003 *4d6f6e000000000000000547456e646f000000000000000867657447456e646f00000000000000 *066765744d6f6e0000000000000004706c757300000000000000047a65726f0000000000000001 *2b0000000000000003457870000000000000000667657445787000000000000000034c6f670000 *0000000000066765744c6f67000000000000000e4d756c7469706c696361746976650000000000 *0000036f6e65000000000000000574696d657300000000000000012a00000000000000104c6566 *7453656d694e65617252696e670000000000000011526967687453656d694e65617252696e6700 *0000000000000853656d6952696e67000000000000000b4d696e5072696f726974790000000000 *00000e6765744d696e5072696f72697479000000000000000b4d61785072696f72697479000000 *000000000e6765744d61785072696f7269747900000000000000034d696e000000000000000667 *65744d696e00000000000000034d617800000000000000066765744d617800000000000000096d *696e66696e6974790000000000000008696e66696e697479000000000000000854726f70696361 *6c000000000000000b67657454726f706963616c00000000000000085072696f72697479000000 *00000000084d6178426f756e6400000000000000084d696e426f756e6400000000000000054f72 *64657200000000000000086765744f72646572000000000000000547726f757000000000000000 *07676e656761746500000000000000056d696e7573000000000000000967737562747261637400 *000000000000097265706c696361746500000000000000012d00000000000000066e6567617465 *00000000000000087375627472616374000000000000000452696e670000000000000008426f6f *6c52696e67000000000000000b676574426f6f6c52696e67000000000000000746726f6d4e756d *000000000000000a67657446726f6d4e756d00000000000000064d6f64756c6500000000000000 *0b52696768744d6f64756c6500000000000000022e2a000000000000000a4c6566744d6f64756c *6500000000000000022a2e000000000000000d54726176657273616c5769746800000000000000 *1067657454726176657273616c576974680000000000000012577261707065644170706c696361 *746976650000000000000015676574577261707065644170706c69636174697665000000000000 *000954726176657273616c000000000000000c67657454726176657273616c000000000000000d *736e6f6354726176657273616c000000000000000a416374696f6e57697468000000000000000d *676574416374696f6e57697468000000000000000c577261707065644d6f6e6164000000000000 *000f676574577261707065644d6f6e61640000000000000006416374696f6e0000000000000009 *676574416374696f6e000000000000000a736e6f63416374696f6e000000000000000974726176 *657273655f0000000000000004666f725f00000000000000056d61704d5f000000000000000566 *6f724d5f0000000000000007666f6c644d61700000000000000004666f6c640000000000000009 *636f6e6361744d61700000000000000003616e6400000000000000026f72000000000000000361 *6e790000000000000003616c6c000000000000000373756d000000000000000770726f64756374 *0000000000000004656c656d00000000000000076e6f74456c656d000000000000000666696c74 *6572000000000000000466696e6400000000000000056379636c65000000000000000672657065 *61740000000000000003524c450000000000000006676574524c45000000000000000144000000 *00000000064d6f6e6f696400000000000000054d617962650000000000000008466f6c6461626c *6500000000000000076d617070656e6400000000000000076d636f6e6361740000000000000006 *6d656d70747900000000000000076765744475616c00000000000000044475616c000000000000 *0007617070456e646f0000000000000004456e646f0000000000000006676574416c6c00000000 *00000003416c6c0000000000000006676574416e790000000000000003416e7900000000000000 *0667657453756d000000000000000353756d000000000000000a67657450726f64756374000000 *000000000750726f64756374000000000000000867657446697273740000000000000005466972 *737400000000000000076765744c61737400000000000000044c617374000000000000000e6669 *6e676572747265652d302e30000000000000000f446174612e46696e6765725472656500000000 *0000000a46696e6765725472656500000000000000076d65617375726500000000000000084748 *432e576f72640000000000000005576f7264380000000000000004436861720000000000000007 *69735370616365000000000000000843617465676f727900000000000000033e3e3e0000000000 *0000033c3c3c00000000000000012e00000000000000026964000000000000000b4748432e436c *617373657300000000000000036d696e00000000000000074e6f7468696e670000000000000003 *6d617800000000000000084748432e456e756d00000000000000086d6178426f756e6400000000 *000000086d696e426f756e6400000000000000074748432e4e756d000000000000000b4170706c *69636174697665000000000000000b416c7465726e617469766500000000000000084748432e42 *61736500000000000000054d6f6e616400000000000000094d6f6e6164506c7573000000000000 *0004426f6f6c newhex * rmfile ./dist/doc/html/monoids/monoids.haddock binary ./dist/doc/html/monoids/plus.gif oldhex *47494638396109000900910000fefefe8282820202020000002c00000000090009000002148c8f *a00bb6b29c82ca897b5b7871cfce74085200003b newhex * rmfile ./dist/doc/html/monoids/plus.gif hunk ./dist/doc/html/monoids/src/Data-Group-Combinators.html 1 - - - - -Data/Group/Combinators.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Group.Combinators
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
--- Utilities for working with Groups that conflict with names from the "Prelude".
---
--- Intended to be imported qualified.
---
--- > import Data.Group.Combinators as Group (replicate)
---
------------------------------------------------------------------------------
-
-module Data.Group.Combinators
-    ( module Data.Group
-    , replicate
-    ) where
-
-import Prelude hiding (replicate)
-import Data.Group
-
--- shamelessly stolen from Lennart Augustsson's post: 
--- http://augustss.blogspot.com/2008/07/lost-and-found-if-i-write-108-in.html
--- adapted to groups, which can permit negative exponents
-replicate :: (Group m, Integral n) =>  m -> n -> m
-replicate x0 y0 
-    | y0 < 0 = f (gnegate x0) (negate y0)
-    | y0 == 0 = mempty
-    | otherwise = f x0 y0
-    where
-        f x y 
-            | even y = f (x `mappend` x) (y `quot` 2)
-            | y == 1 = x
-            | otherwise = g (x `mappend` x) ((y - 1) `quot` 2) x
-        g x y z 
-            | even y = 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)
-
-
- rmfile ./dist/doc/html/monoids/src/Data-Group-Combinators.html hunk ./dist/doc/html/monoids/src/Data-Group-Sugar.html 1 - - - - -Data/Group/Sugar.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Group.Sugar
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
--- Syntactic sugar for working with groups that conflicts with names from the "Prelude".
---
--- > import Prelude hiding ((-), (+), negate, subtract)
--- > import Data.Group.Sugar
---
------------------------------------------------------------------------------
-
-module Data.Group.Sugar 
-    ( module Data.Monoid.Additive.Sugar
-    , module Data.Group
-    , (-)
-    , negate
-    , subtract
-    ) where
-
-import Data.Monoid.Additive.Sugar
-import Data.Group
-import Prelude hiding ((-), negate, subtract)
-
-infixl 7 -
-
-(-) :: Group g => g -> g -> g
-(-) = minus
-
-negate :: Group g => g -> g
-negate = gnegate
-
-subtract :: Group g => g -> g -> g
-subtract = gsubtract
-
- rmfile ./dist/doc/html/monoids/src/Data-Group-Sugar.html hunk ./dist/doc/html/monoids/src/Data-Group.html 1 - - - - -Data/Group.hs - - - -
----------------------------------------------------------------------------
--- |
--- Module     : Data.Group
--- Copyright  : 2007-2009 Edward Kmett
--- License    : BSD
---
--- Maintainer  : Edward Kmett <ekmett@gmail.com>
--- Stability   : experimental
--- Portability : portable
---
--- Extends 'Monoid' to support 'Group' operations
------------------------------------------------------------------------------
-
-module Data.Group 
-    ( module Data.Monoid.Additive
-    , Group
-    , gnegate
-    , gsubtract
-    , minus
-    ) where
-
-import Data.Monoid.Additive
-import Data.Monoid.Self
-import Data.Monoid.FromString
-
-infixl 6 `minus`
-
--- | Minimal complete definition: 'gnegate' or 'minus'
-class Monoid a => Group a where
-    -- additive inverse
-    gnegate :: a -> a
-    minus :: a -> a -> a
-    gsubtract :: a -> a -> a 
-
-    gnegate = minus zero
-    a `minus` b = a `plus` gnegate b 
-    a `gsubtract` b = gnegate a `plus` b
-
-instance Num a => Group (Sum a) where
-    gnegate = Sum . negate . getSum
-    Sum a `minus` Sum b = Sum (a - b)
-    
-instance Fractional a => Group (Product a) where
-    gnegate = Product . negate . getProduct
-    Product a `minus` Product b = Product (a / b)
-    
-instance Group a => Group (Dual a) where
-    gnegate = Dual . gnegate . getDual
-
-instance Group a => Group (Self a) where
-    gnegate = Self . gnegate . getSelf
-    Self a `minus` Self b = Self (a `minus` b)
-
-instance Group a => Group (FromString a) where
-    gnegate = FromString . gnegate . getFromString
-    FromString a `minus` FromString b = FromString (a `minus` b)
-
- rmfile ./dist/doc/html/monoids/src/Data-Group.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Additive-Sugar.html 1 - - - - -Data/Monoid/Additive/Sugar.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Additive.Sugar
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
--- Syntactic sugar for working with a 'Monoid' that conflicts with names from the "Prelude".
---
--- > import Prelude hiding ((+))
--- > import Data.Monoid.Additive.Sugar
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Additive.Sugar 
-    ( module Data.Monoid.Additive
-    , (+)
-    ) where
-
-import Data.Monoid.Additive
-import Prelude hiding ((+))
-
-infixl 6 + 
-
-(+) :: Monoid m => m -> m -> m 
-(+) = mappend
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Additive-Sugar.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Additive.html 1 - - - - -Data/Monoid/Additive.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Additive
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
--- More easily understood aliases for "mappend" and "mempty" 
---
--- > import Data.Monoid.Additive
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Additive
-    ( module Data.Monoid 
-    , plus
-    , zero
-    ) where
-
-import Data.Monoid
-
-infixl 6 `plus`
-
-plus :: Monoid m => m -> m -> m 
-plus = mappend
-
-zero :: Monoid m => m 
-zero = mempty
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Additive.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Applicative.html 1 - - - - -Data/Monoid/Applicative.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts, TypeOperators #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Applicative
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- Monoids for working with an 'Applicative' 'Functor'.
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Applicative 
-    ( module Data.Monoid.Reducer
-    , module Data.Ring.Semi.Near
-    , module Data.Ring.Module
-    , Traversal(Traversal,getTraversal)
-    , WrappedApplicative(WrappedApplicative,getWrappedApplicative)
-    , TraversalWith(TraversalWith,getTraversalWith)
-    , snocTraversal
-    ) where
-
-import Control.Applicative
-import Data.Monoid.Reducer
-import Data.Ring.Semi.Near
-import Data.Ring.Module
-import Control.Functor.Pointed
-
--- | A 'Traversal' uses an glues together 'Applicative' actions with (*>)
---   in the manner of 'traverse_' from "Data.Foldable". Any values returned by 
---   reduced actions are discarded.
-newtype Traversal f = Traversal { getTraversal :: f () } 
-
-instance Applicative f => Monoid (Traversal f) where
-    mempty = Traversal (pure ())
-    Traversal a `mappend` Traversal b = Traversal (a *> b)
-
-instance Applicative f => Reducer (f a) (Traversal f) where
-    unit a = Traversal (a *> pure ())
-    a `cons` Traversal b = Traversal (a *> b)
-    Traversal a `snoc` b = Traversal (a *> b *> pure ())
-
-{-# RULES "unitTraversal" unit = Traversal #-}
-{-# RULES "snocTraversal" snoc = snocTraversal #-}
-
--- | Efficiently avoid needlessly rebinding when using 'snoc' on an action that already returns ()
---   A rewrite rule automatically applies this when possible
-snocTraversal :: Reducer (f ()) (Traversal f) => Traversal f -> f () -> Traversal f
-snocTraversal a = mappend a . Traversal
-
-
--- | A 'WrappedApplicative' turns any 'Alternative' instance into a 'Monoid'.
---   It also provides a 'Multiplicative' instance for an 'Applicative' functor wrapped around a 'Monoid'
---   and asserts that any 'Alternative' applied to a 'Monoid' forms a 'LeftSemiNearRing' 
---   under these operations.
-
-newtype WrappedApplicative f a = WrappedApplicative { getWrappedApplicative :: f a } 
-    deriving (Eq,Ord,Show,Read,Functor,Pointed,Applicative,Alternative,Copointed)
-
-instance Alternative f => Monoid (WrappedApplicative f a) where
-    mempty = empty 
-    WrappedApplicative a `mappend` WrappedApplicative b = WrappedApplicative (a <|> b) 
-
-instance (Alternative f, Monoid a) => Multiplicative (WrappedApplicative f a) where
-    one = pure mempty
-    times = liftA2 mappend
-
-instance (Alternative f, c `Reducer` a) => Reducer c (WrappedApplicative f a) where
-    unit = WrappedApplicative . pure . unit
-
-instance (Alternative f, Monoid a) => LeftSemiNearRing (WrappedApplicative f a)
-
--- | if @m@ is a 'Module' and @f@ is a 'Applicative' then @f `TraversalWith` m@ is a 'Module' as well
-
-newtype TraversalWith f m = TraversalWith { getTraversalWith :: f m } 
-    deriving (Eq,Ord,Show,Read,Functor,Pointed,Applicative,Alternative,Copointed)
-
-instance (Monoid m, Applicative f) => Monoid (f `TraversalWith` m) where
-    mempty = pure mempty
-    mappend = liftA2 mappend
-
-instance (Group m, Applicative f) => Group (f `TraversalWith` m) where
-    gnegate = fmap gnegate
-    minus = liftA2 minus
-    gsubtract = liftA2 gsubtract
-
-instance (c `Reducer` m, Applicative f) => Reducer c (f `TraversalWith` m) where
-    unit = pure . unit
-
-instance (LeftModule r m, Applicative f) => LeftModule r (f `TraversalWith` m) where
-    x *. m = (x *.) <$> m
-
-instance (RightModule r m, Applicative f) => RightModule r (f `TraversalWith` m) where
-    m .* y = (.* y) <$> m
-
-instance (Module r m, Applicative f) => Module r (f `TraversalWith` m)
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Applicative.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Categorical.html 1 - - - - -Data/Monoid/Categorical.hs - - - -
{-# LANGUAGE GADTs, FlexibleInstances, MultiParamTypeClasses #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Categorical
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Categorical
-    ( module Data.Monoid.Reducer
-    , module Control.Category
-    -- * Generalized Endo
-    , GEndo(GEndo, getGEndo)
-    -- * Monoids as Categories
-    , Mon(Mon)
-    , getMon
-    ) where
-
-import Prelude hiding ((.),id)
-import Data.Monoid.Reducer
-import Control.Category
-
--- | The 'Monoid' of the endomorphisms over some object in an arbitrary 'Category'.
-data GEndo k a = GEndo { getGEndo :: k a a } 
-
-instance Category k =>  Monoid (GEndo k a) where
-    mempty = GEndo id
-    GEndo f `mappend` GEndo g = GEndo (f . g)
-
--- | A 'Monoid' is just a 'Category' with one object. 
-data Mon m n o where
-    Mon :: Monoid m => m -> Mon m a a
-
--- | Extract the 'Monoid' from its representation as a 'Category'
-getMon :: Mon m m m -> m 
-getMon (Mon m) = m
-
-instance Monoid m => Category (Mon m) where
-    id = Mon mempty
-    Mon a . Mon b = Mon (a `mappend` b)
-
-instance Monoid m => Monoid (Mon m m m) where
-    mempty = id
-    mappend = (.)
-
-instance (c `Reducer` m) => Reducer c (Mon m m m) where
-    unit = Mon . unit
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Categorical.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Combinators.html 1 - - - - -Data/Monoid/Combinators.hs - - - -
{-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Combinators
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- 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.Group.Combinators as Monoid 
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Combinators
-    ( module Data.Monoid.Generator
-    -- * Monadic Reduction
-    , mapM_
-    , forM_
-    -- * Applicative Reduction
-    , traverse_
-    , for_
-    -- * Logical Reduction
-    , and
-    , or
-    , any
-    , all
-    -- * Monoidal Reduction
-    , foldMap
-    , fold
-    -- * List-Like Reduction
-    , concatMap
-    , elem
-    , filter
-    , find
-    , sum
-    , product
-    , notElem
-    -- * List-Like Monoid Generation
-    , repeat
-    , replicate
-    , cycle
-    ) where
-
-import Prelude hiding (mapM_, any, elem, filter, concatMap, and, or, all, sum, product, notElem, replicate, cycle, repeat)
-import Control.Applicative
-import Data.Monoid.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 in "Data.Foldable"
-traverse_ :: (Generator c, Applicative f) => (Elem c -> f b) -> c -> f ()
-traverse_ f = getTraversal . mapReduce f
-    
--- | flipped 'traverse_' as in "Data.Foldable"
-for_ :: (Generator c, Applicative f) => c -> (Elem c -> f b) -> f ()
-for_ = flip traverse_
-
--- | Efficiently 'mapReduce' a 'Generator' using the 'Action' monoid. A specialized version of its namesake from "Data.Foldable" and "Control.Monad"
-mapM_ :: (Generator c, Monad m) => (Elem c -> m b) -> c -> m ()
-mapM_ f = getAction . mapReduce f
-
--- | flipped 'mapM_' as in "Data.Foldable" and "Control.Monad"
-forM_ :: (Generator c, Monad m) => c -> (Elem c -> m b) -> m ()
-forM_ = flip mapM_
-
--- | Efficiently 'mapReduce' a 'Generator' using the 'Self' monoid. A specialized version of its namesake from "Data.Foldable"
-foldMap :: (Monoid m, Generator c) => (Elem c -> m) -> c -> m
-foldMap f = getSelf . mapReduce f
-
--- | Efficiently 'reduce' a 'Generator' using the 'Self' monoid. A specialized version of its namesake from "Data.Foldable"
-fold :: (Monoid m, Generator c, Elem c ~ m) => c -> m
-fold = getSelf . reduce
-
--- | A further specialization of "foldMap"
-concatMap :: Generator c => (Elem c -> [b]) -> c -> [b]
-concatMap = foldMap
-
--- | Efficiently 'reduce' a 'Generator' that contains values of type 'Bool'
-and :: (Generator c, Elem c ~ Bool) => c -> Bool
-and = getAll . reduce
-
--- | Efficiently 'reduce' a 'Generator' that contains values of type 'Bool'
-or :: (Generator c, Elem c ~ Bool) => c -> Bool
-or = getAny . reduce
-
--- | Efficiently 'mapReduce' any 'Generator' checking to see if any of its values match the supplied predicate
-any :: Generator c => (Elem c -> Bool) -> c -> Bool
-any f = getAny . mapReduce f
-
--- | Efficiently 'mapReduce' any 'Generator' checking to see if all of its values match the supplied predicate
-all :: Generator c => (Elem c -> Bool) -> c -> Bool
-all f = getAll . mapReduce f
-
--- | Efficiently 'mapReduce' any 'Generator' using the 'Sum' 'Monoid'
-sum :: (Generator c, Num (Elem c)) => c -> Elem c
-sum = getSum . reduce
-
--- | Efficiently 'mapReduce' any 'Generator' using the 'Product' 'Monoid'
-product :: (Generator c, Num (Elem c)) => c -> Elem c
-product = getProduct . reduce
-
--- | 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 . (==)
-
--- | 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
-
--- | 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
-
--- | A specialization of 'filter' using the 'First' 'Monoid', analogous to 'Data.List.find'
-find :: Generator c => (Elem c -> Bool) -> c -> Maybe (Elem c)
-find p = getFirst . filter p
-
--- | 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 :: (Monoid m, Integral n) => m -> n -> m
-replicate x0 y0 
-    | y0 < 0 = mempty -- error "negative length"
-    | y0 == 0 = mempty
-    | otherwise = f x0 y0
-    where
-        f x y 
-            | even y = f (x `mappend` x) (y `quot` 2)
-            | y == 1 = x
-            | otherwise = g (x `mappend` x) ((y - 1) `quot` 2) x
-        g x y z 
-            | even y = 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)
-
--- | A generalization of 'Data.List.cycle' to an arbitrary 'Monoid'. May fail to terminate for some values in some monoids.
-cycle :: Monoid m => m -> m
-cycle xs = xs' where xs' = 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 
-repeat x = xs where xs = cons x xs 
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Combinators.html hunk ./dist/doc/html/monoids/src/Data-Monoid-FromString.html 1 - - - - -Data/Monoid/FromString.hs - - - -
{-# LANGUAGE FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Additive
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (overloaded strings, MPTCs)
---
--- Transform any 'Char' 'Reducer' into an 'IsString' instance so it can be
--- used directly with overloaded string literals.
---
------------------------------------------------------------------------------
-
-module Data.Monoid.FromString 
-    ( module Data.Monoid.Reducer
-    , FromString(FromString,getFromString)
-    ) where
-
-import Control.Functor.Pointed
-import Data.Monoid.Generator
-import Data.Monoid.Reducer
-import Data.Monoid.Instances ()
-import GHC.Exts
-
-data FromString m = FromString { getFromString :: m } 
-
-instance Monoid m => Monoid (FromString m) where
-    mempty = FromString mempty
-    FromString a `mappend` FromString b = FromString (a `mappend` b)
-
-instance (Char `Reducer` m) => Reducer Char (FromString m) where
-    unit = FromString . unit
-
-instance (Char `Reducer` m) => IsString (FromString m) where
-    fromString = FromString . reduce
-
-instance Pointed FromString where
-    point = FromString
-
-instance Copointed FromString where
-    extract = getFromString
-
-instance Functor FromString where
-    fmap f (FromString x) = FromString (f x)
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-FromString.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Generator-LZ78.html 1 - - - - -Data/Monoid/Generator/LZ78.hs - - - -
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
-module Data.Monoid.Generator.LZ78 
-    ( module Data.Monoid.Generator
-    , LZ78(LZ78, getLZ78)
-    , decode
-    , encode
-    ) where
-
-import qualified Data.Sequence as Seq
-import Data.Sequence (Seq,(|>))
-import qualified Data.Map as Map
-import Data.Map (Map)
-import Data.Monoid.Generator
-import Data.Monoid.Self
-import Test.QuickCheck
-
-newtype LZ78 a = LZ78 { getLZ78 :: [(Int,a)] } 
-
-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
-
-mapTo' :: (e `Reducer` m) => (a -> e) -> m -> Seq m -> [(Int,a)] -> m
-mapTo' _ m _   []         = m
-mapTo' f m s ((w,c):ws) = mapTo' f (m `mappend` v) (s |> v) ws 
-    where 
-        v = Seq.index s w `mappend` unit (f c)
-    
-decode :: LZ78 a -> [a]
-decode = reduce
-
-encode :: Ord a => [a] -> LZ78 a
-encode = LZ78 . encode' Map.empty 1 0
-
-encode' :: Ord a => Map (Int,a) Int -> Int -> Int -> [a] -> [(Int,a)]
-encode' _ _ p [c] = [(p,c)]
-encode' d f p (c:cs) = case Map.lookup (p,c) d of
-    Just p' -> encode' d f p' cs
-    Nothing -> (p,c):encode' (Map.insert (p,c) f d) (succ f) 0 cs
-encode' _ _ _ [] = []
-
-prop_DecodeEncode :: Ord a => [a] -> Bool
-prop_DecodeEncode xs = decode (encode xs) == xs
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Generator-LZ78.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Generator.html 1 - - - - -Data/Monoid/Generator.hs - - - -
{-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Generator
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- 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.Monoid.Generator
-    ( module Data.Monoid.Reducer
-    , Generator
-    , Elem
-    , mapReduce
-    , mapTo
-    , mapFrom
-    , reduce
-    , Keys(Keys, getKeys)
-    , Values(Values, getValues)
-    , Char8(Char8, getChar8)
-    ) 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 = foldMap (unit . f)
-
-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
-
-{-# 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 #-}
--- | Apply a 'Reducer' directly to the elements of a 'Generator'
-reduce :: (Generator c, Elem c `Reducer` m) => c -> m
-reduce = mapReduce id
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Generator.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Lexical-RunLengthEncoding.html 1 - - - - -Data/Monoid/Lexical/RunLengthEncoding.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Lexical.RunLengthEncoding
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- A simple 'Monoid' transformer that turns any monoidal 'Reducer' into a
--- a reducer that expects to be supplied both a run length @n@ with each item
--- and which efficiently exponentiates the result of 'unit' @n@ times through 
--- 'replicate'.
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Lexical.RunLengthEncoding 
-    ( module Data.Monoid.Reducer
-    , RLE(RLE,getRLE) 
-    ) where
-
-import Prelude hiding (replicate)
-import Data.Monoid.Reducer
-import Data.Monoid.Combinators (replicate)
-
-newtype RLE n m = RLE { getRLE :: m } 
-
-instance (Integral n, Monoid m) => Monoid (RLE n m) where
-    mempty = RLE mempty
-    RLE a `mappend` RLE b = RLE (a `mappend` b)
-
-instance (Integral n, Reducer c m) => Reducer (n,c) (RLE n m) where
-    unit ~(n,c) = RLE $ replicate (unit c) n
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Lexical-RunLengthEncoding.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Lexical-SourcePosition.html 1 - - - - -Data/Monoid/Lexical/SourcePosition.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Lexical.SourcePosition
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs, OverloadedStrings)
---
--- Incrementally determine locations in a source file through local information
--- This allows for efficient recomputation of line #s and token locations
--- while the file is being interactively updated by storing this as a supplemental
--- measure on a 'FingerTree'.
---
--- The general idea is to use this as part of a measure in a 'FingerTree' so you can
--- use `mappend` to prepend a 'startOfFile' with the file information.
------------------------------------------------------------------------------
-
-module Data.Monoid.Lexical.SourcePosition
-    ( module Data.Monoid.Reducer.Char
-    , nextTab
-    , SourcePosition
-    , SourceLine
-    , SourceColumn
-    , sourceLine
-    , sourceColumn
-    , startOfFile
-    , showSourcePosition
-    ) where
-
-import Prelude hiding (lex)
-import Control.Functor.Extras
-import Control.Functor.Pointed
-import Data.Monoid.Reducer.Char
-import Data.Monoid.Generator
-import Data.String
-
-type SourceLine = Int
-type SourceColumn = Int
-
--- | A 'Monoid' of partial information about locations in a source file.
---   This is polymorphic in the kind of information you want to maintain about each source file.
-data SourcePosition file 
-        = Pos file {-# UNPACK #-} !SourceLine !SourceColumn -- ^ An absolute position in a file is known, or an overriding #line directive has been seen
-        | Lines {-# UNPACK #-} !SourceLine !SourceColumn    -- ^ We've seen some carriage returns.
-        | Columns {-# UNPACK #-} !SourceColumn              -- ^ We've only seen part of a line.
-        | Tab {-# UNPACK #-} !SourceColumn !SourceColumn    -- ^ We have an unhandled tab to deal with.
-    deriving (Read,Show,Eq)
-
--- | Compute the location of the next standard 8-column aligned tab
-nextTab :: Int -> Int
-nextTab x = x + (8 - (x-1) `mod` 8)
-
-instance Functor SourcePosition where
-    fmap g (Pos f l c) = Pos (g f) l c
-    fmap _ (Lines l c) = Lines l c
-    fmap _ (Columns c) = Columns c
-    fmap _ (Tab x y) = Tab x y
-
-instance Pointed SourcePosition where
-    point f = Pos f 1 1
-
-instance FunctorZero SourcePosition where
-    fzero = mempty
-
-instance FunctorPlus SourcePosition where
-    fplus = mappend
-
-instance IsString (SourcePosition file) where
-    fromString = reduce
-
--- accumulate partial information
-instance Monoid (SourcePosition file) where
-    mempty = Columns 0
-
-    Pos f l _ `mappend` Lines m d = Pos f (l + m) d
-    Pos f l c `mappend` Columns d = Pos f l (c + d)
-    Pos f l c `mappend` Tab x y   = Pos f l (nextTab (c + x) + y)
-    Lines l _ `mappend` Lines m d = Lines (l + m) d
-    Lines l c `mappend` Columns d = Lines l (c + d)
-    Lines l c `mappend` Tab x y   = Lines l (nextTab (c + x) + y)
-    Columns c `mappend` Columns d  = Columns (c + d)
-    Columns c `mappend` Tab x y    = Tab (c + x) y
-    Tab _ _   `mappend` Lines m d  = Lines m d
-    Tab x y   `mappend` Columns d  = Tab x (y + d)
-    Tab x y   `mappend` Tab x' y'  = Tab x (nextTab (y + x') + y')
-    _         `mappend` pos        = pos
-
-instance Reducer Char (SourcePosition file) where
-    unit '\n' = Lines 1 1
-    unit '\t' = Tab 0 0 
-    unit _    = Columns 1
-
--- Indicate that we ignore invalid characters to the UTF8 parser
-instance CharReducer (SourcePosition file)
-    
--- | lift information about a source file into a starting 'SourcePosition' for that file
-startOfFile :: f -> SourcePosition f
-startOfFile = point
-
--- | extract partial information about the current column, even in the absence of knowledge of the source file
-sourceColumn :: SourcePosition f -> Maybe SourceColumn
-sourceColumn (Pos _ _ c) = Just c
-sourceColumn (Lines _ c) = Just c
-sourceColumn _ = Nothing
-
--- | extract partial information about the current line number if possible
-sourceLine :: SourcePosition f -> Maybe SourceLine
-sourceLine (Pos _ l _) = Just l
-sourceLine _ = Nothing
-
--- | extract the standard format for an absolute source position
-showSourcePosition :: SourcePosition String -> String
-showSourcePosition pos = showSourcePosition' (point "-" `mappend` pos) where
-    showSourcePosition' (Pos f l c) = f ++ ":" ++ show l ++ ":" ++ show c
-    showSourcePosition' _ = undefined
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Lexical-SourcePosition.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Lexical-UTF8-Decoder.html 1 - - - - -Data/Monoid/Lexical/UTF8/Decoder.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Lexical.UTF8.Decoder
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- UTF8 encoded unicode characters can be parsed both forwards and backwards,
--- since the start of each 'Char' is clearly marked. This 'Monoid' accumulates
--- information about the characters represented and reduces that information
--- using a 'CharReducer', which is just a 'Reducer' 'Monoid' that knows what 
--- it wants to do about an 'invalidChar' -- a  string of 'Word8' values that 
--- don't form a valid UTF8 character.
---
--- As this monoid parses chars it just feeds them upstream to the underlying
--- CharReducer. Efficient left-to-right and right-to-left traversals are 
--- supplied so that a lazy 'ByteString' can be parsed efficiently by 
--- chunking it into strict chunks, and batching the traversals over each
--- before stitching the edges together.
---
--- Because this needs to be a 'Monoid' and should return the exact same result
--- regardless of forward or backwards parsing, it chooses to parse only 
--- canonical UTF8 unlike most Haskell UTF8 parsers, which will blissfully 
--- accept illegal alternative long encodings of a character. 
---
--- This actually fixes a potential class of security issues in some scenarios:
---
--- <http://prowebdevelopmentblog.com/content/big-overhaul-java-utf-8-charset>
---
--- NB: Due to naive use of a list to track the tail of an unfinished character 
--- this may exhibit @O(n^2)@ behavior parsing backwards along an invalid sequence 
--- of a large number of bytes that all claim to be in the tail of a character.
---
------------------------------------------------------------------------------
-
-
-module Data.Monoid.Lexical.UTF8.Decoder 
-    ( module Data.Monoid.Reducer.Char
-    , UTF8
-    , runUTF8
-    ) where
-    
-import Data.Bits (shiftL,(.&.),(.|.))
-import Data.Word (Word8)
-
-
-import Control.Functor.Pointed
-
-import Data.Monoid.Reducer.Char
-
--- Incrementally reduce canonical RFC3629 UTF-8 Characters
-
--- utf8 characters are at most 4 characters long, so we need only retain state for 3 of them
--- moreover their length is able to be determined a priori, so lets store that intrinsically in the constructor
-data H = H0
-       | H2_1 {-# UNPACK #-} !Word8 
-       | H3_1 {-# UNPACK #-} !Word8
-       | H3_2 {-# UNPACK #-} !Word8 !Word8
-       | H4_1 {-# UNPACK #-} !Word8
-       | H4_2 {-# UNPACK #-} !Word8 !Word8
-       | H4_3 {-# UNPACK #-} !Word8 !Word8 !Word8
-
--- words expressing the tail of a character, each between 0x80 and 0xbf
--- this is arbitrary length to simplify making the parser truly monoidal
--- this probably means we have O(n^2) worst case performance in the face of very long runs of chars that look like 10xxxxxx
-type T = [Word8]
-
--- S is a segment that contains a possible tail of a character, the result of reducing some full characters, and the start of another character
--- T contains a list of bytes each between 0x80 and 0xbf
-data UTF8 m = S T m !H
-            | T T
-
--- flush any extra characters in a head, when the next character isn't between 0x80 and 0xbf
-flushH :: CharReducer m => H -> m
-flushH (H0) = mempty
-flushH (H2_1 x) = invalidChar [x]
-flushH (H3_1 x) = invalidChar [x]
-flushH (H3_2 x y) = invalidChar [x,y]
-flushH (H4_1 x) = invalidChar [x]
-flushH (H4_2 x y) = invalidChar [x,y]
-flushH (H4_3 x y z) = invalidChar [x,y,z]
-
--- flush a character tail 
-flushT :: CharReducer m => [Word8] -> m
-flushT = invalidChar
-
-snocH :: CharReducer m => H -> Word8 -> (m -> H -> UTF8 m) -> m -> UTF8 m
-snocH H0 c k m 
-    | c < 0x80 = k (m `mappend` b1 c) H0
-    | c < 0xc0 = k (m `mappend` invalidChar [c]) H0
-    | c < 0xe0 = k m (H2_1 c)
-    | c < 0xf0 = k m (H3_1 c)
-    | c < 0xf5 = k m (H4_1 c)
-    | otherwise = k (m `mappend` invalidChar [c]) H0
-snocH (H2_1 c) d k m
-    | d >= 0x80 && d < 0xc0 = k (m `mappend` b2 c d) H0
-    | otherwise = k (m `mappend` invalidChar [c]) H0
-snocH (H3_1 c) d k m 
-    | d >= 0x80 && d < 0xc0 = k m (H3_2 c d)
-    | otherwise = k (m `mappend` invalidChar [c]) H0
-snocH (H3_2 c d) e k m 
-    | d >= 0x80 && d < 0xc0 = k (m `mappend` b3 c d e) H0
-    | otherwise = k (m `mappend` invalidChar [c,d]) H0
-snocH (H4_1 c) d k m 
-    | d >= 0x80 && d < 0xc0 = k m (H4_2 c d)
-    | otherwise = k (m `mappend` invalidChar [c,d]) H0
-snocH (H4_2 c d) e k m 
-    | d >= 0x80 && d < 0xc0 = k m (H4_3 c d e)
-    | otherwise = k (m `mappend` invalidChar [c,d,e]) H0
-snocH (H4_3 c d e) f k m 
-    | d >= 0x80 && d < 0xc0 = k (m `mappend` b4 c d e f) H0
-    | otherwise = k (m `mappend` invalidChar [c,d,e,f]) H0
-
-mask :: Word8 -> Word8 -> Int
-mask c m = fromEnum (c .&. m) 
-
-combine :: Int -> Word8 -> Int
-combine a r = shiftL a 6 .|. fromEnum (r .&. 0x3f)
-
-b1 :: CharReducer m => Word8 -> m
-b1 c | c < 0x80 = fromChar . toEnum $ fromEnum c
-     | otherwise = invalidChar [c]
-
-b2 :: CharReducer m => Word8 -> Word8 -> m
-b2 c d | valid_b2 c d = fromChar (toEnum (combine (mask c 0x1f) d))
-       | otherwise = invalidChar [c,d]
-
-b3 :: CharReducer m => Word8 -> Word8 -> Word8 -> m
-b3 c d e | valid_b3 c d e = fromChar (toEnum (combine (combine (mask c 0x0f) d) e))
-         | otherwise = invalidChar [c,d,e]
-
-
-b4 :: CharReducer m => Word8 -> Word8 -> Word8 -> Word8 -> m
-b4 c d e f | valid_b4 c d e f = fromChar (toEnum (combine (combine (combine (mask c 0x07) d) e) f))
-           | otherwise = invalidChar [c,d,e,f]
-
-valid_b2 :: Word8 -> Word8 -> Bool
-valid_b2 c d = (c >= 0xc2 && c <= 0xdf && d >= 0x80 && d <= 0xbf)
-
-valid_b3 :: Word8 -> Word8 -> Word8 -> Bool
-valid_b3 c d e = (c == 0xe0 && d >= 0xa0 && d <= 0xbf && e >= 0x80 && e <= 0xbf) || 
-                 (c >= 0xe1 && c <= 0xef && d >= 0x80 && d <= 0xbf && e >= 0x80 && e <= 0xbf)
-
-valid_b4 :: Word8 -> Word8 -> Word8 -> Word8 -> Bool
-valid_b4 c d e f = (c == 0xf0 && d >= 0x90 && d <= 0xbf && e >= 0x80 && e <= 0xbf && f >= 0x80 && f <= 0xbf) ||
-      (c >= 0xf1 && c <= 0xf3 && d >= 0x80 && d <= 0xbf && e >= 0x80 && e <= 0xbf && f >= 0x80 && f <= 0xbf) ||
-                   (c == 0xf4 && d >= 0x80 && d <= 0x8f && e >= 0x80 && e <= 0xbf && f >= 0x80 && f <= 0xbf)
-
-consT :: CharReducer m => Word8 -> T -> (H -> UTF8 m) -> (m -> UTF8 m) -> (T -> UTF8 m) -> UTF8 m
-consT c cs h m t
-             | c < 0x80 = m $ b1 c `mappend` invalidChars cs
-             | c < 0xc0 = t (c:cs)
-             | c < 0xe0 = case cs of
-                        [] -> h $ H2_1 c
-                        (d:ds) -> m $ b2 c d `mappend` invalidChars ds
-             | c < 0xf0 = case cs of
-                        [] -> h $ H3_1 c
-                        [d] -> h $ H3_2 c d
-                        (d:e:es) -> m $ b3 c d e `mappend` invalidChars es
-             | c < 0xf5 = case cs of
-                        [] -> h $ H4_1 c
-                        [d] -> h $ H4_2 c d 
-                        [d,e] -> h $ H4_3 c d e 
-                        (d:e:f:fs) -> m $ b4 c d e f `mappend` invalidChars fs
-             | otherwise = mempty
-
-invalidChars :: CharReducer m => [Word8] -> m
-invalidChars = foldr (mappend . invalidChar . return) mempty
-
-merge :: CharReducer m => H -> T -> (m -> a) -> (H -> a) -> a
-merge H0 cs k _               = k $ invalidChars cs
-merge (H2_1 c) [] _ p         = p $ H2_1 c
-merge (H2_1 c) (d:ds) k _     = k $ b2 c d `mappend` invalidChars ds
-merge (H3_1 c) [] _ p         = p $ H3_1 c
-merge (H3_1 c) [d] _ p        = p $ H3_2 c d
-merge (H3_1 c) (d:e:es) k _   = k $ b3 c d e `mappend` invalidChars es
-merge (H3_2 c d) [] _ p       = p $ H3_2 c d
-merge (H3_2 c d) (e:es) k _   = k $ b3 c d e `mappend` invalidChars es
-merge (H4_1 c) [] _ p         = p $ H4_1 c
-merge (H4_1 c) [d] _ p        = p $ H4_2 c d
-merge (H4_1 c) [d,e] _ p      = p $ H4_3 c d e
-merge (H4_1 c) (d:e:f:fs) k _ = k $ b4 c d e f `mappend` invalidChars fs
-merge (H4_2 c d) [] _ p       = p $ H4_2 c d 
-merge (H4_2 c d) [e] _ p      = p $ H4_3 c d e
-merge (H4_2 c d) (e:f:fs) k _ = k $ b4 c d e f `mappend` invalidChars fs
-merge (H4_3 c d e) [] _ p     = p $ H4_3 c d e
-merge (H4_3 c d e) (f:fs) k _ = k $ b4 c d e f `mappend` invalidChars fs
-
-instance CharReducer m => Monoid (UTF8 m) where
-    mempty = T []
-    T c `mappend` T d = T (c ++ d)
-    T c `mappend` S l m r = S (c ++ l) m r
-    S l m c `mappend` S c' m' r = S l (m `mappend` merge c c' id flushH `mappend` m') r
-    s@(S _ _ _) `mappend` T [] = s
-    S l m c `mappend` T c' = merge c c' k (S l m) where
-        k m' = S l (m `mappend` m') H0
-
-instance CharReducer m => Reducer Word8 (UTF8 m) where
-    unit c | c >= 0x80 && c < 0xc0 = T [c]
-           | otherwise = snocH H0 c (S []) mempty
-    S t m h `snoc` c        = snocH h c (S t) m
-    T t     `snoc` c        | c >= 0x80 && c < 0xc0 = T (t ++ [c])
-                            | otherwise = snocH H0 c (S t) mempty
-
-    c       `cons` T cs     = consT c cs (S [] mempty) (flip (S []) H0) T
-    c       `cons` S cs m h = consT c cs k1 k2 k3 where
-        k1 h' = S [] (flushH h' `mappend` m) h
-        k2 m' = S [] (m' `mappend` m) h
-        k3 t' = S t' m h
-    
-instance Functor UTF8 where
-    fmap f (S t x h) = S t (f x) h
-    fmap _ (T t) = T t
-
-instance Pointed UTF8 where
-    point f = S [] f H0
-
-runUTF8 :: CharReducer m => UTF8 m -> m 
-runUTF8 (T t) = flushT t
-runUTF8 (S t m h) = flushT t `mappend` m `mappend` flushH h
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Lexical-UTF8-Decoder.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Lexical-Words.html 1 - - - - -Data/Monoid/Lexical/Words.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, GeneralizedNewtypeDeriving, ParallelListComp, TypeFamilies, OverloadedStrings, UndecidableInstances #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Lexical.Words
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs, OverloadedStrings)
---
--- A simple demonstration of tokenizing a 'Generator' into distinct words 
--- and/or lines using a word-parsing 'Monoid' that accumulates partial 
--- information about words and then builds up a token stream.
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Lexical.Words 
-    ( module Data.Monoid.Reducer.Char
-    -- * Words
-    , Words
-    , runWords
-    , Unspaced(runUnspaced)
-    , wordsFrom
-    -- * Lines
-    , Lines
-    , runLines
-    , Unlined(runUnlined)
-    , linesFrom
-    ) where
-
-import Data.String
-import Data.Char (isSpace)
-import Data.Maybe (maybeToList)
-import Data.Monoid.Reducer.Char
-import Data.Monoid.Generator
-import Control.Functor.Pointed
-
--- | A 'CharReducer' transformer that breaks a 'Char' 'Generator' into distinct words, feeding a 'Char' 'Reducer' each line in turn
-data Words m = Chunk (Maybe m)
-             | Segment (Maybe m) [m] (Maybe m)
-    deriving (Show,Read)
-
--- | Extract the matched words from the 'Words' 'Monoid'
-runWords :: Words m -> [m]
-runWords (Chunk m) = maybeToList m
-runWords (Segment l m r) = maybeToList l ++ m ++ maybeToList r
-
-instance Monoid m => Monoid (Words m) where
-    mempty = Chunk mempty
-    Chunk l `mappend` Chunk r = Chunk (l `mappend` r)
-    Chunk l `mappend` Segment l' m r = Segment (l `mappend` l') m r
-    Segment l m r `mappend` Chunk r' = Segment l m (r `mappend` r')
-    Segment l m r `mappend` Segment l' m' r' = Segment l (m ++ maybeToList (r `mappend` l') ++ m') r'
-
-instance Reducer Char m => Reducer Char (Words m) where
-    unit c | isSpace c = Segment (Just (unit c)) [] mempty
-           | otherwise = Chunk (Just (unit c))
-
-instance Functor Words where
-    fmap f (Chunk m) = Chunk (fmap f m)
-    fmap f (Segment m ms m') = Segment (fmap f m) (fmap f ms) (fmap f m')
-
-instance (CharReducer m) => CharReducer (Words m) where
-    invalidChar xs = Segment (Just (invalidChar xs)) [] mempty
-
-instance Reducer Char m => IsString (Words m) where
-    fromString = reduce
-
--- | A 'CharReducer' transformer that breaks a 'Char' 'Generator' into distinct lines, feeding a 'Char' 'Reducer' each line in turn.
-newtype Lines m = Lines (Words m) deriving (Show,Read,Monoid,Functor)
-
-instance Reducer Char m => Reducer Char (Lines m) where
-    unit '\n' = Lines $ Segment (Just (unit '\n')) [] mempty
-    unit c = Lines $ Chunk (Just (unit c))
-
-instance (CharReducer m) => CharReducer (Lines m) where
-    invalidChar xs = Lines $ Segment (Just (invalidChar xs)) [] mempty
-
-instance Reducer Char m => IsString (Lines m) where
-    fromString = reduce
-
--- | Extract the matched lines from the 'Lines' 'Monoid'
-runLines :: Lines m -> [m]
-runLines (Lines x) = runWords x
-
--- | A 'CharReducer' transformer that strips out any character matched by `isSpace`
-newtype Unspaced m = Unspaced { runUnspaced :: m }  deriving (Eq,Ord,Show,Read,Monoid)
-
-instance Reducer Char m => Reducer Char (Unspaced m) where
-    unit c | isSpace c = mempty
-           | otherwise = Unspaced (unit c)
-
-instance CharReducer m => CharReducer (Unspaced m) where
-    invalidChar = Unspaced . invalidChar
-
-instance Functor Unspaced where
-    fmap f (Unspaced x) = Unspaced (f x)
-
-instance Pointed Unspaced where
-    point = Unspaced
-
-instance Copointed Unspaced where
-    extract = runUnspaced
-
-instance Reducer Char m => IsString (Unspaced m) where
-    fromString = reduce
-
--- | A 'CharReducer' transformer that strips out newlines
-newtype Unlined m = Unlined { runUnlined :: m }  deriving (Eq,Ord,Show,Read,Monoid)
-
-instance Reducer Char m => Reducer Char (Unlined m) where
-    unit '\n' = mempty
-    unit c = Unlined (unit c)
-
-instance CharReducer m => CharReducer (Unlined m) where
-    invalidChar = Unlined . invalidChar
-
-instance Functor Unlined where
-    fmap f (Unlined x) = Unlined (f x)
-
-instance Pointed Unlined where
-    point = Unlined
-
-instance Copointed Unlined where
-    extract = runUnlined
-
-instance Reducer Char m => IsString (Unlined m) where
-    fromString = reduce
-
--- | Utility function to extract words using accumulator, inside-word, and until-next-word monoids
-wordsFrom :: (Generator c, Elem c ~ Char, Char `Reducer` m, Char `Reducer` n, Char `Reducer` o) => m -> c -> [(m,n,o)]
-wordsFrom s c = [(x,runUnlined y,z) | x <- scanl mappend s ls | (y,z) <- rs ] where
-    (ls,rs) = unzip (runWords (mapReduce id c))
-
--- | Utility function to extract lines using accumulator, inside-line, and until-next-line monoids
-linesFrom :: (Generator c, Elem c ~ Char, Char `Reducer` m, Char `Reducer` n, Char `Reducer` o) => m -> c -> [(m,n,o)]
-linesFrom s c = [(x,runUnlined y,z) | x <- scanl mappend s ls | (y,z) <- rs ] where
-    (ls,rs) = unzip (runLines (mapReduce id c))
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Lexical-Words.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Monad.html 1 - - - - -Data/Monoid/Monad.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, FlexibleContexts, TypeOperators #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Applicative
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- 'Monoid' instances for working with a 'Monad'
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Monad 
-    ( module Data.Monoid.Reducer
-    , module Data.Ring.Semi.Near
-    -- * Actions
-    , Action(Action,getAction)
-    , snocAction
-    -- * Lifting Modules
-    , ActionWith(ActionWith,getActionWith)
-    -- * Wrapped Monads
-    , WrappedMonad(WrappedMonad, getWrappedMonad)
-    ) where
-
-import Control.Functor.Pointed
-import Data.Monoid.Reducer
-import Data.Ring.Semi.Near
-import Data.Ring.Module
-import Control.Monad
-
--- | An 'Action' uses glues together 'Monad' actions with (>>)
---   in the manner of 'mapM_' from "Data.Foldable". Any values returned by 
---   reduced actions are discarded.
-newtype Action m = Action { getAction :: m () } 
-
-instance Monad m => Monoid (Action m) where
-    mempty = Action (return ())
-    Action a `mappend` Action b = Action (a >> b)
-
-instance Monad m => Reducer (m a) (Action m) where
-    unit a = Action (a >> return ())
-    a `cons` Action b = Action (a >> b)
-    Action a `snoc` b = Action (a >> b >> return ())
-
-{-# RULES "unitAction" unit = Action #-}
-{-# RULES "snocAction" snoc = snocAction #-} 
-
--- | Efficiently avoid needlessly rebinding when using 'snoc' on an action that already returns ()
---   A rewrite rule automatically applies this when possible
-snocAction :: Reducer (m ()) (Action m) => Action m -> m () -> Action m
-snocAction a = mappend a . Action
-
--- | A 'WrappedMonad' turns any 'MonadPlus' instance into a 'Monoid'.
---   It also provides a 'Multiplicative' instance for a 'Monad' wrapped around a 'Monoid'
---   and asserts that any 'MonadPlus' applied to a 'Monoid' forms a 'LeftSemiNearRing' 
---   under these operations.
-
-newtype WrappedMonad m a = WrappedMonad { getWrappedMonad :: m a } 
-    deriving (Eq,Ord,Show,Read,Functor,Pointed, Monad,MonadPlus)
-
-instance (Monad m, Monoid a) => Multiplicative (WrappedMonad m a) where
-    one = WrappedMonad (return mempty)
-    WrappedMonad m `times` WrappedMonad n = WrappedMonad (liftM2 mappend m n)
-    
-instance (MonadPlus m) => Monoid (WrappedMonad m a) where
-    mempty = mzero
-    mappend = mplus
-
-instance (MonadPlus m, c `Reducer` a) => Reducer c (WrappedMonad m a) where
-    unit = WrappedMonad . return . unit
-
-instance (MonadPlus m, Monoid a) => LeftSemiNearRing (WrappedMonad m a)
-
--- | if @m@ is a 'Module' over @r@ and @f@ is a 'Monad' then @f `ActionWith` m@ is a 'Module' as well
-
-newtype ActionWith f m = ActionWith { getActionWith :: f m } 
-    deriving (Eq,Ord,Show,Read,Functor,Pointed, Monad,MonadPlus)
-
-instance (Monoid m, Monad f) => Monoid (f `ActionWith` m) where
-    mempty = return mempty
-    mappend = liftM2 mappend
-
-instance (Group m, Monad f) => Group (f `ActionWith` m) where
-    gnegate = liftM gnegate
-    minus = liftM2 minus
-    gsubtract = liftM2 gsubtract
-
-instance (c `Reducer` m, Monad f) => Reducer c (f `ActionWith` m) where
-    unit = return . unit
-
-instance (LeftModule r m, Monad f) => LeftModule r (f `ActionWith` m) where
-    x *. m = liftM (x *.) m
-
-instance (RightModule r m, Monad f) => RightModule r (f `ActionWith` m) where
-    m .* y = liftM (.* y) m
-
-instance (Module r m, Monad f) => Module r (f `ActionWith` m)
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Monad.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Multiplicative-Sugar.html 1 - - - - -Data/Monoid/Multiplicative/Sugar.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Multiplicative.Sugar
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
--- Syntactic sugar for working with a 'Multiplicative' monoids that conflicts with names from the "Prelude".
---
--- > import Prelude hiding ((+),(*))
--- > import Data.Monoid.Multiplicative.Sugar
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Multiplicative.Sugar
-    ( module Data.Monoid.Additive.Sugar
-    , module Data.Monoid.Multiplicative
-    , (*)
-    ) where
-
-import Data.Monoid.Additive.Sugar
-import Data.Monoid.Multiplicative
-import Prelude hiding ((*))
-
-infixl 7 *
-
-(*) :: Multiplicative r => r -> r -> r
-(*) = times
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Multiplicative-Sugar.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Multiplicative.html 1 - - - - -Data/Monoid/Multiplicative.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Multiplicative
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable (but instances use MPTCs)
---
--- When dealing with a 'Ring' or other structure, you often need a pair of 
--- 'Monoid' instances that are closely related. Making a @newtype@ for one
--- is unsatisfying and yields an unnatural programming style. 
---
--- A 'Multiplicative' is a 'Monoid' that is intended for use in a scenario
--- that can be extended to have another 'Monoid' slot in for addition. This
--- enables one to use common notation.
---
--- Any 'Multiplicative' can be turned into a 'Monoid' using the 'Log' wrapper.
---
--- Any 'Monoid' can be turned into a 'Multiplicative' using the 'Exp' wrapper.
---
--- Instances are supplied for common Monads of Monoids, in a fashion 
--- which can be extended if the 'Monad' is a 'MonadPlus' to yield a 'LeftSemiNearRing'
---
--- Instances are also supplied for common Applicatives of Monoids, in a
--- fashion which can be extended if the 'Applicative' is 'Alternative' to
--- yield a 'LeftSemiNearRing'
------------------------------------------------------------------------------
-
-module Data.Monoid.Multiplicative 
-    ( module Data.Monoid.Additive
-    -- * Multiplicative Monoids
-    , Multiplicative
-    , one, times
-    -- * Multiplicative to Monoid
-    , Log(Log, getLog)
-    -- * Monoid to Multiplicative
-    , Exp(Exp, getExp)
-    ) where
-
-import Control.Applicative
-
-import Control.Concurrent.STM
-
-import Control.Monad.Cont
-import Control.Monad.Identity
-
-import Control.Monad.Reader
-
-import qualified Control.Monad.RWS.Lazy as LRWS
-import qualified Control.Monad.RWS.Strict as SRWS
-
-import qualified Control.Monad.State.Lazy as LState
-import qualified Control.Monad.State.Strict as SState
-
-import qualified Control.Monad.Writer.Lazy as LWriter
-import qualified Control.Monad.Writer.Strict as SWriter
-
-import qualified Control.Monad.ST.Lazy as LST
-import qualified Control.Monad.ST.Strict as SST
-
-import Data.FingerTree
-
-import Data.Monoid.Additive
-import Data.Monoid.FromString
-import Data.Monoid.Generator
-import Data.Monoid.Instances ()
-import Data.Monoid.Self
-
-import Data.Ratio
-
-import qualified Data.Sequence as Seq
-import Data.Sequence (Seq)
-
-import Text.Parsec.Prim
-
-class Multiplicative m where
-    one :: m
-    times :: m -> m -> m
-
--- | Convert a 'Multiplicative' into a 'Monoid'. Mnemonic: @Log a + Log b = Log (a * b)@
-data Log m = Log { getLog :: m }
-
-instance Multiplicative m => Monoid (Log m) where
-    mempty = Log one
-    Log a `mappend` Log b = Log (a `times` b)
-
--- | Convert a 'Monoid' into a 'Multiplicative'. Mnemonic: @Exp a * Exp b = Exp (a + b)@
-data Exp m = Exp { getExp :: m }
-
-instance Monoid m => Multiplicative (Exp m) where
-    one = Exp mempty
-    Exp a `times` Exp b = Exp (a `mappend` b)
-
--- simple monoid transformer instances
-instance Multiplicative m => Multiplicative (Self m) where
-    one = Self one  
-    Self a `times` Self b = Self (a `times` b)
-
-instance Multiplicative m => Multiplicative (FromString m) where
-    one = FromString one
-    FromString a `times` FromString b = FromString (a `times` b)
-
--- the goal of this is that I can make left seminearrings out of any 'Alternative' wrapped around a monoid
--- in particular its useful for containers
-
-instance Monoid m => Multiplicative [m] where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid m => Multiplicative (Seq m) where
-    one = return mempty
-    times = liftM2 mappend
-
--- and things that can't quite be a Monad in Haskell
-instance (Measured v m, Monoid m) => Multiplicative (FingerTree v m) where
-    one = singleton mempty
-    xss `times` yss = getSelf $ mapReduce (flip fmap' yss . mappend) xss
-
--- but it can at least serve as a canonical multiplication for any monad. 
-instance Monoid m => Multiplicative (Maybe m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid m => Multiplicative (Identity m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monoid m) => Multiplicative (Cont r m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monoid w, Monoid m) => Multiplicative (SRWS.RWS r w s m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monoid w, Monoid m) => Multiplicative (LRWS.RWS r w s m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid m => Multiplicative (SState.State s m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid m => Multiplicative (LState.State s m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid m => Multiplicative (Reader e m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monoid w, Monoid m) => Multiplicative (SWriter.Writer w m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monoid w, Monoid m) => Multiplicative (LWriter.Writer w m) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monad m, Monoid n) => Multiplicative (ContT r m n) where
-    one = return mempty 
-    times = liftM2 mappend
-
-instance (Monad m, Monoid w, Monoid n) => Multiplicative (SRWS.RWST r w s m n) where 
-    one = return mempty 
-    times = liftM2 mappend
-
-instance (Monad m, Monoid w, Monoid n) => Multiplicative (LRWS.RWST r w s m n) where 
-    one = return mempty 
-    times = liftM2 mappend
-
-instance (Monad m, Monoid n) => Multiplicative (SState.StateT s m n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monad m, Monoid n) => Multiplicative (LState.StateT s m n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monad m, Monoid n) => Multiplicative (ReaderT e m n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Monad m, Monoid w, Monoid n) => Multiplicative (SWriter.WriterT w m n) where
-    one = return mempty 
-    times = liftM2 mappend
-
-instance (Monad m, Monoid w, Monoid n) => Multiplicative (LWriter.WriterT w m n) where
-    one = return mempty 
-    times = liftM2 mappend
-
-instance Monoid n => Multiplicative (IO n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid n => Multiplicative (SST.ST s n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid n => Multiplicative (LST.ST s n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance Monoid n => Multiplicative (STM n) where
-    one = return mempty
-    times = liftM2 mappend
-
-instance (Stream s m t, Monoid n) => Multiplicative (ParsecT s u m n) where
-    one = return mempty
-    times = liftM2 mappend
-
--- Applicative instances
-
-instance Monoid n => Multiplicative (ZipList n) where
-    one = pure mempty
-    times = liftA2 mappend
-
-instance Monoid m => Multiplicative (Const m a) where
-    one = pure undefined
-    times = liftA2 undefined
-
-
--- Numeric instances
-
-instance Multiplicative Int where
-    one = 1
-    times = (*)
-
-
-instance Multiplicative Integer where
-    one = 1
-    times = (*)
-
-instance Integral m => Multiplicative (Ratio m) where
-    one = 1
-    times = (*)
-
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Multiplicative.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Ord.html 1 - - - - -Data/Monoid/Ord.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
------------------------------------------------------------------------------
----- |
----- Module      :  Data.Monoid.Ord
----- Copyright   :  (c) Edward Kmett 2009
----- License     :  BSD-style
----- Maintainer  :  libraries@haskell.org
----- Stability   :  experimental
----- Portability :  portable
-----
----- Some 'Monoid' instances that should probably be in "Data.Monoid".
-----
------------------------------------------------------------------------------
-
-module Data.Monoid.Ord 
-    ( module Data.Monoid.Reducer
-    -- * Max
-    , Max(Max,getMax)
-    -- * Min
-    , Min(Min,getMin)
-    -- * MaxPriority: Max semigroup w/ added bottom
-    , MaxPriority(MaxPriority,getMaxPriority)
-    , minfinity
-    -- * MinPriority: Min semigroup w/ added top
-    , MinPriority(MinPriority,getMinPriority)
-    , infinity
-    ) where
-
-import Control.Functor.Pointed
-import Data.Monoid.Reducer (Reducer, unit, Monoid, mappend, mempty)
-import Data.Ring.Semi
-
--- | The 'Monoid' @('max','minBound')@
-newtype Max a = Max { getMax :: a } deriving (Eq,Ord,Show,Read,Bounded)
-
-instance (Ord a, Bounded a) => Monoid (Max a) where
-    mempty = Max minBound
-    mappend = max
-
-instance (Ord a, Bounded a) => Reducer a (Max a) where
-    unit = Max
-
-instance Functor Max where 
-    fmap f (Max a) = Max (f a)
-
-instance Pointed Max where
-    point = Max
-
-instance Copointed Max where
-    extract = getMax
-
--- | The 'Monoid' given by @('min','maxBound')@
-newtype Min a = Min { getMin :: a } deriving (Eq,Ord,Show,Read,Bounded)
-
-instance (Ord a, Bounded a) => Monoid (Min a) where
-    mempty = Min maxBound
-    mappend = min
-
-instance (Ord a, Bounded a) => Reducer a (Min a) where
-    unit = Min
-
-instance Functor Min where
-    fmap f (Min a) = Min (f a)
-
-instance Pointed Min where
-    point = Min
-
-instance Copointed Min where
-    extract = getMin
-
-minfinity :: MaxPriority a
-minfinity = MaxPriority Nothing
-
--- | The 'Monoid' @('max','Nothing')@ over @'Maybe' a@ where 'Nothing' is the bottom element
-newtype MaxPriority a = MaxPriority { getMaxPriority :: Maybe a } deriving (Eq,Ord,Show,Read)
-
-instance Ord a => Monoid (MaxPriority a) where
-    mempty = MaxPriority Nothing
-    mappend = max
-
-instance Ord a => Reducer (Maybe a) (MaxPriority a) where
-    unit = MaxPriority
-
-instance Functor MaxPriority where
-    fmap f (MaxPriority a) = MaxPriority (fmap f a)
-
-instance Pointed MaxPriority where
-    point = MaxPriority . Just
-
-infinity :: MinPriority a
-infinity = MinPriority Nothing
-
--- | The 'Monoid' @('min','Nothing')@ over @'Maybe' a@ where 'Nothing' is the top element
-newtype MinPriority a = MinPriority { getMinPriority :: Maybe a } deriving (Eq,Show,Read)
-
-instance Ord a => Ord (MinPriority a) where
-    MinPriority Nothing  `compare` MinPriority Nothing  = EQ
-    MinPriority Nothing  `compare` _                    = GT
-    _                    `compare` MinPriority Nothing  = LT
-    MinPriority (Just a) `compare` MinPriority (Just b) = a `compare` b
-
-instance Ord a => Monoid (MinPriority a) where
-    mempty = MinPriority Nothing
-    mappend = min
-
-instance Ord a => Reducer (Maybe a) (MinPriority a) where
-    unit = MinPriority
-
-instance Functor MinPriority where
-    fmap f (MinPriority a) = MinPriority (fmap f a)
-
-instance Pointed MinPriority where
-    point = MinPriority . Just
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Ord.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Reducer-Char.html 1 - - - - -Data/Monoid/Reducer/Char.hs - - - -
{-# LANGUAGE UndecidableInstances, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Reducer.Char
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Reducer.Char
-    ( module Data.Monoid.Reducer
-    , CharReducer
-    , invalidChar
-    , fromChar
-    ) where
-
-import Data.Monoid.Reducer
-import Data.Word (Word8)
-
--- | Provides a mechanism for the UTF8 'Monoid' to report invalid characters to one or more monoids.
-
-class Reducer Char m => CharReducer m where
-    fromChar :: Char -> m 
-    fromChar = unit
-
-    invalidChar :: [Word8] -> m
-    invalidChar = const mempty
-
-instance (CharReducer m, CharReducer m') =>  CharReducer (m,m') where
-    invalidChar bs = (invalidChar bs, invalidChar bs)
-
-instance (CharReducer m, CharReducer m', CharReducer m'') =>  CharReducer (m,m',m'') where
-    invalidChar bs = (invalidChar bs, invalidChar bs, invalidChar bs)
-
-instance (CharReducer m, CharReducer m', CharReducer m'', CharReducer m''') =>  CharReducer (m,m',m'',m''') where
-    invalidChar bs = (invalidChar bs, invalidChar bs, invalidChar bs, invalidChar bs)
-
-instance CharReducer [Char]
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Reducer-Char.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Reducer-With.html 1 - - - - -Data/Monoid/Reducer/With.hs - - - -
{-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Reducer.With
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Reducer.With
-    ( module Data.Monoid.Reducer
-    , WithReducer(WithReducer,withoutReducer)
-    ) where
-
-import Data.Monoid.Reducer
-import Data.FingerTree
-
--- | If @m@ is a @c@-"Reducer", then m is @(c `WithReducer` m)@-"Reducer"
---   This can be used to quickly select a "Reducer" for use as a 'FingerTree'
---   'measure'.
-
-newtype WithReducer c m = WithReducer { withoutReducer :: c } 
-
-instance (c `Reducer` m) => Reducer (c `WithReducer` m) m where
-    unit = unit . withoutReducer 
-
-instance (c `Reducer` m) => Measured m (c `WithReducer` m) where
-    measure = unit . withoutReducer
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Reducer-With.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Reducer.html 1 - - - - -Data/Monoid/Reducer.hs - - - -
{-# LANGUAGE UndecidableInstances , FlexibleContexts , MultiParamTypeClasses , FlexibleInstances , GeneralizedNewtypeDeriving #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.Reducer
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- A @c@-'Reducer' is a 'Monoid' with a canonical mapping from @c@ to the Monoid.
--- This 'unit' acts in many ways like 'return' for a 'Monad' but is limited
--- to a single type.
---
------------------------------------------------------------------------------
-
-module Data.Monoid.Reducer
-    ( module Data.Monoid
-    , Reducer
-    , unit, snoc, cons
-    , foldMapReduce
-    , foldReduce
-    , pureUnit
-    , returnUnit
-    ) where
-
-import Control.Applicative
-import Control.Monad 
-
-import Data.Monoid
-import Data.Monoid.Instances ()
-
-import Data.Foldable
-import Data.FingerTree
-
-import qualified Data.Sequence as Seq
-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 Text.Parsec.Prim
-
---import qualified Data.BitSet as BitSet
---import Data.BitSet (BitSet)
-
--- | This type may be best read infix. A @c `Reducer` m@ is a 'Monoid' @m@ that maps
--- values of type @c@ through @unit@ to values of type @m@. A @c@-'Reducer' may also
--- supply operations which tack-on another @c@ to an existing 'Monoid' @m@ on the left
--- or right. These specialized reductions may be more efficient in some scenarios
--- and are used when appropriate by a 'Generator'. The names 'cons' and 'snoc' work
--- by analogy to the synonymous operations in the list monoid.
---
--- This class deliberately avoids functional-dependencies, so that () can be a @c@-Reducer
--- for all @c@, and so many common reducers can work over multiple types, for instance,
--- First and Last may reduce both @a@ and 'Maybe' @a@. Since a 'Generator' has a fixed element
--- type, the input to the reducer is generally known and extracting from the monoid usually
--- is sufficient to fix the result type. Combinators are available for most scenarios where
--- this is not the case, and the few remaining cases can be handled by using an explicit 
--- type annotation.
---
--- Minimal definition: 'unit' or 'snoc'
-class Monoid m => Reducer c m where
-    -- | Convert a value into a 'Monoid'
-    unit :: c -> m 
-    -- | Append a value to a 'Monoid' for use in left-to-right reduction
-    snoc :: m -> c -> m
-    -- | Prepend a value onto a 'Monoid' for use during right-to-left reduction
-    cons :: c -> m -> m 
-
-    unit = snoc mempty 
-    snoc m = mappend m . unit
-    cons = mappend . unit
-
--- | Apply a 'Reducer' to a 'Foldable' container, after mapping the contents into a suitable form for reduction.
-foldMapReduce :: (Foldable f, e `Reducer` m) => (a -> e) -> f a -> m
-foldMapReduce f = foldMap (unit . f)
-
--- | Apply a 'Reducer' to a 'Foldable' mapping each element through 'unit'
-foldReduce :: (Foldable f, e `Reducer` m) => f e -> m
-foldReduce = foldMap unit
-
-returnUnit :: (Monad m, c `Reducer` n) => c -> m n 
-returnUnit = return . unit
-
-pureUnit :: (Applicative f, c `Reducer` n) => c -> f n
-pureUnit = pure . unit
-
-instance (Reducer c m, Reducer c n) => Reducer c (m,n) where
-    unit x = (unit x,unit x)
-    (m,n) `snoc` x = (m `snoc` x, n `snoc` x)
-    x `cons` (m,n) = (x `cons` m, x `cons` n)
-
-instance (Reducer c m, Reducer c n, Reducer c o) => Reducer c (m,n,o) where
-    unit x = (unit x,unit x, unit x)
-    (m,n,o) `snoc` x = (m `snoc` x, n `snoc` x, o `snoc` x)
-    x `cons` (m,n,o) = (x `cons` m, x `cons` n, x `cons` o)
-
-instance (Reducer c m, Reducer c n, Reducer c o, Reducer c p) => Reducer c (m,n,o,p) where
-    unit x = (unit x,unit x, unit x, unit x)
-    (m,n,o,p) `snoc` x = (m `snoc` x, n `snoc` x, o `snoc` x, p `snoc` x)
-    x `cons` (m,n,o,p) = (x `cons` m, x `cons` n, x `cons` o, x `cons` p)
-
-instance Reducer c [c] where
-    unit = return
-    cons = (:)
-    xs `snoc` x = xs ++ [x]
-
-instance Reducer c () where
-    unit _ = ()
-    _ `snoc` _ = ()
-    _ `cons` _ = ()
-
-instance Reducer Bool Any where
-    unit = Any
-
-instance Reducer Bool All where
-    unit = All
-
-instance Reducer (a -> a) (Endo a) where
-    unit = Endo
-
-instance Monoid a => Reducer a (Dual a) where
-    unit = Dual
-    
-instance Num a => Reducer a (Sum a) where
-    unit = Sum
-
-instance Num a => Reducer a (Product a) where
-    unit = Product
-
-instance Reducer (Maybe a) (First a) where
-    unit = First
-
-instance Reducer a (First a) where
-    unit = First . Just
-
-instance Reducer (Maybe a) (Last a) where
-    unit = Last
-
-instance Reducer a (Last a) where
-    unit = Last . Just
-
-instance Measured v a => Reducer a (FingerTree v a) where
-    unit = singleton
-    cons = (<|)
-    snoc = (|>) 
-
-instance (Stream s m t, c `Reducer` a) => Reducer c (ParsecT s u m a) where
-    unit = return . unit
-
-instance Reducer a (Seq a) where
-    unit = Seq.singleton
-    cons = (Seq.<|)
-    snoc = (Seq.|>)
-
-instance Reducer Int IntSet where
-    unit = IntSet.singleton
-    cons = IntSet.insert
-    snoc = flip IntSet.insert -- left bias irrelevant
-
-instance Ord a => Reducer a (Set a) where
-    unit = Set.singleton
-    cons = Set.insert
-    -- pedantic about order in case 'Eq' doesn't implement structural equality
-    snoc s m | Set.member m s = s 
-             | otherwise = Set.insert m s
-
-instance Reducer (Int,v) (IntMap v) where
-    unit = uncurry IntMap.singleton
-    cons = uncurry IntMap.insert
-    snoc = flip . uncurry . IntMap.insertWith $ const id
-
-instance Ord k => Reducer (k,v) (Map k v) where
-    unit = uncurry Map.singleton
-    cons = uncurry Map.insert
-    snoc = flip . uncurry . Map.insertWith $ const id
-
-{-
-instance Enum a => Reducer a (BitSet a) where
-    unit m = BitSet.insert m BitSet.empty
--}
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Reducer.html hunk ./dist/doc/html/monoids/src/Data-Monoid-Union.html 1 - - - - -Data/Monoid/Union.hs - - - -
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, GeneralizedNewtypeDeriving #-}
-module Data.Monoid.Union
-    ( module Data.Monoid.Reducer
-    -- * Unions of Containers
-    , HasUnion
-    , empty
-    , union
-    , Union(Union,getUnion)
-    -- * Unions of Containers of Monoids
-    , HasUnionWith
-    , emptyWith
-    , unionWith
-    , UnionWith(UnionWith,getUnionWith)
-    ) where
-
-import qualified Data.IntMap as IntMap
-import Data.IntMap (IntMap)
-
-import qualified Data.IntSet as IntSet
-import Data.IntSet (IntSet)
-
-import qualified Data.Map as Map
-import Data.Map (Map)
-
-import qualified Data.Set as Set
-import Data.Set (Set)
-
-import qualified Data.List as List
-
-import Control.Functor.Pointed
-
-import Data.Monoid.Reducer (Reducer, unit, cons, snoc, Monoid, mappend, mempty)
-
--- | A Container suitable for the 'Union' 'Monoid'
-class HasUnion f where
-    empty :: f
-    {-# SPECIALIZE union :: IntMap a -> IntMap a -> IntMap a #-}
-    {-# SPECIALIZE union :: Ord k => Map k a -> Map k a -> Map k a #-}
-    {-# SPECIALIZE union :: Eq a => [a] -> [a] -> [a] #-}
-    {-# SPECIALIZE union :: Ord a => Set a -> Set a -> Set a #-}
-    {-# SPECIALIZE union :: IntSet -> IntSet -> IntSet #-}
-    union :: f -> f -> f
-
-instance HasUnion (IntMap a) where
-    empty = IntMap.empty
-    union = IntMap.union
-
-instance Ord k => HasUnion (Map k a) where
-    empty = Map.empty
-    union = Map.union
-
-instance Eq a => HasUnion [a] where
-    empty = []
-    union = List.union
-
-instance Ord a => HasUnion (Set a) where
-    empty = Set.empty
-    union = Set.union
-
-instance HasUnion IntSet where
-    empty = IntSet.empty
-    union = IntSet.union
-
--- | The 'Monoid' @('union','empty')@
-newtype Union f = Union { getUnion :: f } 
-    deriving (Eq,Ord,Show,Read)
-
-instance (HasUnion f) => Monoid (Union f) where
-    mempty = Union empty
-    Union a `mappend` Union b = Union (a `union` b)
-
-instance (HasUnion f) => Reducer f (Union f) where
-    unit = Union
-
-instance Functor Union where
-    fmap f (Union a) = Union (f a)
-
-instance Pointed Union where 
-    point = Union
-
-instance Copointed Union where
-    extract = getUnion
-
--- | Polymorphic containers that we can supply an operation to handle unions with
-class HasUnionWith f where
-    {-# SPECIALIZE unionWith :: (a -> a -> a) -> IntMap a -> IntMap a -> IntMap a #-}
-    {-# SPECIALIZE unionWith :: Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a #-}
-    unionWith :: (a -> a -> a) -> f a -> f a -> f a
-    emptyWith :: f a 
-
-instance HasUnionWith IntMap where 
-    emptyWith = IntMap.empty
-    unionWith = IntMap.unionWith
-
-instance Ord k => HasUnionWith (Map k) where 
-    emptyWith = Map.empty
-    unionWith = Map.unionWith
-
-
--- | The 'Monoid' @('unionWith mappend','empty')@ for containers full of monoids.
-newtype UnionWith f m = UnionWith { getUnionWith :: f m } 
-    deriving (Eq,Ord,Show,Read,Functor,Pointed,Monad)
-
-instance (HasUnionWith f, Monoid m) => Monoid (UnionWith f m) where
-    mempty = UnionWith emptyWith
-    UnionWith a `mappend` UnionWith b = UnionWith (unionWith mappend a b)
-
-instance (HasUnionWith f, Monoid m) => Reducer (f m) (UnionWith f m) where
-    unit = UnionWith
-
-
- rmfile ./dist/doc/html/monoids/src/Data-Monoid-Union.html hunk ./dist/doc/html/monoids/src/Data-Ring-Boolean.html 1 - - - - -Data/Ring/Boolean.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.Boolean
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- A Boolean 'Ring' over 'Bool'. Note well that the 'mappend' of this ring is
--- symmetric difference and not disjunction like you might expect. To get that 
--- you should use use 'Ord' from "Data.Ring.Semi.Ord.Order" on 'Bool' to get the '&&'/'||'-based 
--- distributive-lattice 'SemiRing'
------------------------------------------------------------------------------
-
-module Data.Ring.Boolean
-    ( module Data.Ring
-    , BoolRing(BoolRing, getBoolRing)
-    ) where
-
-import Data.Ring
-import Data.Monoid.Reducer
-
-newtype BoolRing = BoolRing { getBoolRing :: Bool } deriving (Eq,Ord,Show,Read)
-
-instance Monoid BoolRing where
-    mempty = BoolRing False
-    BoolRing a `mappend` BoolRing b = BoolRing ((a || b) && not (a && b))
-
-instance Group BoolRing where
-    gnegate = BoolRing . not . getBoolRing
-
-instance Multiplicative BoolRing where
-    one = BoolRing True
-    BoolRing a `times` BoolRing b = BoolRing (a && b)
-
-instance LeftSemiNearRing BoolRing
-instance RightSemiNearRing BoolRing
-instance SemiRing BoolRing
-instance Ring BoolRing
-
-instance Reducer Bool BoolRing where
-    unit = BoolRing
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Boolean.html hunk ./dist/doc/html/monoids/src/Data-Ring-FromNum.html 1 - - - - -Data/Ring/FromNum.hs - - - -
{-# LANGUAGE FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.FromNum
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- A wrapper that lies for you and claims any instance of 'Num' is a 'Ring'.
--- Who knows, for your type it might even be telling the truth!
---
------------------------------------------------------------------------------
-
-module Data.Ring.FromNum 
-    ( module Data.Ring
-    , FromNum(FromNum, getFromNum)
-    ) where
-
-import Data.Ring
-import Data.Monoid.Reducer
-
-newtype FromNum a = FromNum { getFromNum :: a } deriving (Eq,Show,Num)
-
-instance Num a => Monoid (FromNum a) where
-    mempty = fromInteger 0
-    mappend = (+)
-
-instance Num a => Group (FromNum a) where
-    minus = (-)
-    gnegate = negate
-    
-instance Num a => Multiplicative (FromNum a) where
-    one = fromInteger 1
-    times = (*)
-
--- you can assume these, but you're probably lying to yourself
-instance Num a => LeftSemiNearRing (FromNum a)
-instance Num a => RightSemiNearRing (FromNum a)
-instance Num a => SemiRing (FromNum a)
-instance Num a => Ring (FromNum a)
-    
-instance Num a => Reducer Integer (FromNum a) where
-    unit = fromInteger
-
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-FromNum.html hunk ./dist/doc/html/monoids/src/Data-Ring-Module-AutomaticDifferentiation.html 1 - - - - -Data/Ring/Module/AutomaticDifferentiation.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
-module Data.Ring.Module.AutomaticDifferentiation 
-    ( module Data.Ring.Module
-    , D
-    ) where
-
-import Prelude hiding ((*),(+),(-),subtract,negate)
-import Data.Ring.Sugar
-import Data.Ring.Module
-import Data.Monoid.Reducer
-
-data D r m = D r m
-
-instance (Monoid r, Monoid m) => Monoid (D r m) where
-    mempty = D mempty mempty
-    D x m `mappend` D y n = D (x + y) (m + n)
-
-instance (Module r m) => Multiplicative (D r m) where
-    one = D one zero
-    D x m `times` D y n = D (x * y) (x *. n + m .* y)
-
-instance (Group r, Module r m, Group m) => Group (D r m) where
-    gnegate (D x m) = D (gnegate x) (gnegate m)
-    D x m `minus` D y n = D (x `minus` y) (m `minus` n)
-    D x m `gsubtract` D y n = D (x `gsubtract` y) (m `gsubtract` n)
-
-instance (LeftSemiNearRing r, Module r m) => LeftSemiNearRing (D r m)
-instance (RightSemiNearRing r, Module r m) => RightSemiNearRing (D r m)
-instance (SemiRing r, Module r m) => SemiRing (D r m)
-instance (Ring r, Module r m, Group m) => Ring (D r m)
-
-instance (c `Reducer` r, c `Reducer` m) => Reducer c (D r m) where
-    unit c = D (unit c) (unit c)
-    c `cons` D x m = D (c `cons` x) (c `cons` m)
-    D x m `snoc` c = D (x `snoc` c) (m `snoc` c)
-
-{--
-infix 0 ><
-
-(><) :: Multiplicatve a => (a -> a) -> (AD a -> AD a) -> AD a -> AD a
-(f >< f') a@(AD a0 a') = D (f a0) (a' * f' a)
-
-data AD r = AD r (Maybe (AD r))
-
-instance (Monoid r) => Monoid (AD r) where
-    mempty = K mempty
-    AD x m + AD y n = D (x + y) (m + n)
-
-instance (c `Reducer` r) => Reducer c (AD r) where
-    unit c = c' where c' = AD (unit c) c'
---}
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Module-AutomaticDifferentiation.html hunk ./dist/doc/html/monoids/src/Data-Ring-Module.html 1 - - - - -Data/Ring/Module.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.Module
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
--- Left- and right- modules over rings, semirings, and Seminearrings.
--- To avoid a proliferation of classes. These only require that there
--- be an addition and multiplication operation for the 'Ring'
---
------------------------------------------------------------------------------
-
-module Data.Ring.Module 
-    ( module Data.Ring
-    , LeftModule
-    , (*.)
-    , RightModule
-    , (.*)
-    , Module
-    ) where
-
-import Data.Ring
--- import qualified Data.Monoid.Combinators as Monoid
-
--- | @ (x * y) *. m = x * (y *. m) @
-class (Monoid r, Multiplicative r, Monoid m) => LeftModule r m where
-    (*.) :: r -> m -> m
-    
--- | @ (m .* x) * y = m .* (x * y) @
-class (Monoid r, Multiplicative r, Monoid m) => RightModule r m where
-    (.*) :: m -> r -> m
-
--- | @ (x *. m) .* y = x *. (m .* y) @
-class (LeftModule r m, RightModule r m) => Module r m 
-
--- instance Monoid m => LeftModule Int m where i *. m = Monoid.replicate m i 
--- instance Monoid m => RightModule Int m where m .* i = Monoid.replicate m i 
--- instance Monoid m => Module Int m
-    
--- instance Monoid m => LeftModule Integer m where i *. m = Monoid.replicate m i 
--- instance Monoid m => RightModule Integer m where m .* i = Monoid.replicate m i 
--- instance Monoid m => Module Integer m
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Module.html hunk ./dist/doc/html/monoids/src/Data-Ring-Semi-Near.html 1 - - - - -Data/Ring/Semi/Near.hs - - - -
{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.Semi.Near
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable (instances use MPTCs)
---
--- Defines left- and right- seminearrings. Every 'MonadPlus' wrapped around
--- a 'Monoid' qualifies due to the distributivity of (>>=) over 'mplus'.
---
--- See <http://conway.rutgers.edu/~ccshan/wiki/blog/posts/WordNumbers1/>
---
------------------------------------------------------------------------------
-
-module Data.Ring.Semi.Near
-    ( module Data.Monoid.Multiplicative
-    , LeftSemiNearRing
-    , RightSemiNearRing
-    ) where
-
-import Control.Monad.Reader
-
-import qualified Control.Monad.RWS.Lazy as LRWS
-import qualified Control.Monad.RWS.Strict as SRWS
-
-import qualified Control.Monad.State.Lazy as LState
-import qualified Control.Monad.State.Strict as SState
-
-import qualified Control.Monad.Writer.Lazy as LWriter
-import qualified Control.Monad.Writer.Strict as SWriter
-
-import Data.Monoid.Multiplicative
-import Data.FingerTree
-import Data.Monoid.FromString
-import Data.Monoid.Self
-import Data.Monoid.Generator
-
-import qualified Data.Sequence as Seq
-import Data.Sequence (Seq)
-
-import Text.Parsec.Prim
-
--- | @(a + b) * c = (a * c) + (b * c)@
-class (Multiplicative m, Monoid m) => RightSemiNearRing m 
-
--- 'Monoid' transformers
-instance RightSemiNearRing m => RightSemiNearRing (Self m)
-instance RightSemiNearRing m => RightSemiNearRing (FromString m)
-
--- | @a * (b + c) = (a * b) + (a * c)@
-class (Multiplicative m, Monoid m) => LeftSemiNearRing m 
-
--- 'Monoid' transformers
-instance LeftSemiNearRing m => LeftSemiNearRing (Self m)
-instance LeftSemiNearRing m => LeftSemiNearRing (FromString m)
-
--- non-'Monad' instances
-instance (Measured v m, Monoid m) => LeftSemiNearRing (FingerTree v m)
-
--- 'Monad' instances
--- Every 'MonadPlus' over a 'Monoid' with an appropriate 'Multiplicative' instance
--- for 'liftM2 mappend' is a 'LeftSemiNearRing' by 'MonadPlus' left-distributivity
-
-instance Monoid m => LeftSemiNearRing [m]
-
-instance Monoid m => LeftSemiNearRing (Maybe m)
-
-instance Monoid m => LeftSemiNearRing (Seq m)
-
-instance (Stream s m t, Monoid a) => LeftSemiNearRing (ParsecT s u m a)
-
-instance (MonadPlus m, Monoid n) => LeftSemiNearRing (SState.StateT s m n)
-
-instance (MonadPlus m, Monoid n) => LeftSemiNearRing (LState.StateT s m n)
-
-instance (MonadPlus m, Monoid n) => LeftSemiNearRing (ReaderT e m n)
-
-instance (MonadPlus m, Monoid w, Monoid n) => LeftSemiNearRing (SRWS.RWST r w s m n)
-
-instance (MonadPlus m, Monoid w, Monoid n) => LeftSemiNearRing (LRWS.RWST r w s m n)
-
-instance (MonadPlus m, Monoid w, Monoid n) => LeftSemiNearRing (SWriter.WriterT w m n)
-
-instance (MonadPlus m, Monoid w, Monoid n) => LeftSemiNearRing (LWriter.WriterT w m n)
-
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Semi-Near.html hunk ./dist/doc/html/monoids/src/Data-Ring-Semi-Ord.html 1 - - - - -Data/Ring/Semi/Ord.hs - - - -
{-# LANGUAGE FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}
-----------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.Semi.Ord
--- Copyright   :  (c) Edward Kmett 2009, Conal Elliott 2008
--- License     :  BSD3
--- 
--- Maintainer  :  ekmett@gmail.com
--- Stability   :  experimental
--- 
--- Turn an instance of 'Ord' into a 'SemiRing' over 'max' and 'min'
-------------------------------------------------------------------------
-
-module Data.Ring.Semi.Ord
-    ( module Data.Ring.Semi
-    , Order(Order,getOrder)
-    , Priority(MinBound,Priority,MaxBound)
-    ) where
-
-import Test.QuickCheck
--- import Control.Applicative
-import Control.Functor.Pointed
-import Data.Ring.Semi
-import Data.Monoid.Ord
-import Data.Monoid.Reducer
-
--- | A 'SemiRing' using a type's built-in Bounded instance.
-newtype Order a = Order { getOrder :: a } deriving (Eq,Ord,Read,Show,Bounded,Arbitrary)
-
-instance (Bounded a, Ord a) => Monoid (Order a) where
-    mappend = max
-    mempty = minBound
-
-instance (Bounded a, Ord a) => Multiplicative (Order a) where
-    times = min
-    one = maxBound
-    
-instance (Bounded a, Ord a) => RightSemiNearRing (Order a)
-instance (Bounded a, Ord a) => LeftSemiNearRing (Order a)
-instance (Bounded a, Ord a) => SemiRing (Order a)
-instance (Bounded a, Ord a) => Reducer a (Order a) where
-    unit = Order
-
-instance Functor Order where
-    fmap f (Order a) = Order (f a)
-
-instance Pointed Order where
-    point = Order
-
-instance Copointed Order where
-    extract = getOrder
-
--- | A 'SemiRing' which adds 'minBound' and 'maxBound' to a pre-existing type.
-data Priority a = MinBound | Priority a | MaxBound deriving (Eq,Read,Show)
-
-instance Bounded (Priority a) where
-    minBound = MinBound
-    maxBound = MaxBound
-
-instance Ord a => Ord (Priority a) where
-  MinBound   <= _         = True
-  Priority _ <= MinBound  = False
-  Priority a <= Priority b = a <= b
-  Priority _ <= MaxBound  = True
-  MaxBound   <= MaxBound  = True
-  MaxBound   <= _         = False
-
-  MinBound   `min` _          = MinBound
-  _          `min` MinBound   = MinBound
-  Priority a `min` Priority b = Priority (a `min` b)
-  u          `min` MaxBound   = u
-  MaxBound   `min` v          = v
-  
-  MinBound   `max` v          = v
-  u          `max` MinBound   = u
-  Priority a `max` Priority b = Priority (a `max` b)
-  _          `max` MaxBound   = MaxBound
-  MaxBound   `max` _          = MaxBound
-
-instance Arbitrary a => Arbitrary (Priority a) where
-  arbitrary = frequency [ (1 ,return MinBound)
-                        , (10, fmap Priority arbitrary)
-                        , (1 ,return MaxBound) ]
-  coarbitrary MinBound    = variant 0
-  coarbitrary (Priority a) = variant 1 . coarbitrary a
-  coarbitrary MaxBound    = variant 2
-
-instance Ord a => Monoid (Priority a) where
-    mappend = max
-    mempty = minBound
-
-instance Ord a => Multiplicative (Priority a) where
-    times = min
-    one = maxBound
-
-instance Ord a => LeftSemiNearRing (Priority a)
-instance Ord a => RightSemiNearRing (Priority a)
-instance Ord a => SemiRing (Priority a)
-
-instance Ord a => Reducer a (Priority a) where
-    unit = Priority
-
-instance Ord a => Reducer (MinPriority a) (Priority a) where
-    unit (MinPriority Nothing)  = MaxBound
-    unit (MinPriority (Just x)) = Priority x
-
-instance Ord a => Reducer (MaxPriority a) (Priority a) where
-    unit (MaxPriority Nothing)  = MinBound
-    unit (MaxPriority (Just x)) = Priority x
-
-instance Functor Priority where
-    fmap _ MaxBound = MaxBound
-    fmap f (Priority a) = Priority (f a)
-    fmap _ MinBound = MinBound
-
-instance Pointed Priority where
-    point = Priority
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Semi-Ord.html hunk ./dist/doc/html/monoids/src/Data-Ring-Semi-Tropical.html 1 - - - - -Data/Ring/Semi/Tropical.hs - - - -
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
------------------------------------------------------------------------------
----- |
----- Module      :  Data.Ring.Semi.Tropical
----- Copyright   :  (c) Edward Kmett 2009
----- License     :  BSD-style
----- Maintainer  :  libraries@haskell.org
----- Stability   :  experimental
----- Portability :  portable
-----
------------------------------------------------------------------------------
-
-module Data.Ring.Semi.Tropical
-    ( module Data.Monoid.Reducer
-    , module Data.Ring.Semi
-    -- * Tropical Semirings
-    , infinity
-    , Tropical(Tropical,getTropical)
-    ) where
-
-import Control.Functor.Pointed
-import Data.Monoid.Reducer (Reducer, unit, Monoid, mappend, mempty)
-import Data.Ring.Semi
-import Data.Monoid.Ord hiding (infinity)
-
-infinity :: Tropical a
-infinity = Tropical Nothing
-
--- | The 'SemiRing' @('min','+')@ over @'a' extended with 'infinity'@.
---   When @a@ has a Num instance with an addition that respects order, then this is 
---   transformed into a tropical semiring. It is assumed that 0 is the least element
---   of a.
---
---   <http://hal.archives-ouvertes.fr/docs/00/11/37/79/PDF/Tropical.pdf>
-
-newtype Tropical a = Tropical { getTropical :: Maybe a } deriving (Eq,Show,Read)
-
-instance Ord a => Ord (Tropical a) where
-    Tropical Nothing  `compare` Tropical Nothing  = EQ
-    Tropical Nothing  `compare` _                    = GT
-    _                 `compare` Tropical Nothing  = LT
-    Tropical (Just a) `compare` Tropical (Just b) = a `compare` b
-
-instance Ord a => Monoid (Tropical a) where
-    mempty = infinity
-    mappend = min
-
-instance Ord a => Reducer a (Tropical a) where
-    unit = Tropical . Just
-
-instance Ord a => Reducer (Maybe a) (Tropical a) where
-    unit = Tropical
-
-instance Ord a => Reducer (MinPriority a) (Tropical a) where
-    unit = Tropical . getMinPriority
-
-instance Functor Tropical where
-    fmap f (Tropical a) = Tropical (fmap f a)
-
-instance Pointed Tropical where
-    point = Tropical . Just
-
-instance Num a => Multiplicative (Tropical a) where
-    one = point $ fromInteger 0
-    Tropical Nothing `times` _       = infinity
-    Tropical (Just a) `times` Tropical (Just b) = point (a + b)
-    _  `times` Tropical Nothing      = infinity
-
-instance (Ord a, Num a) => LeftSemiNearRing (Tropical a)
-instance (Ord a, Num a) => RightSemiNearRing (Tropical a)
-instance (Ord a, Num a) => SemiRing (Tropical a)
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Semi-Tropical.html hunk ./dist/doc/html/monoids/src/Data-Ring-Semi.html 1 - - - - -Data/Ring/Semi.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.Semi
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable (MPTCs)
---
---
------------------------------------------------------------------------------
-
-module Data.Ring.Semi
-    ( module Data.Ring.Semi.Near
-    , SemiRing
-    ) where
-
-import Data.Ring.Semi.Near
-
--- | A 'SemiRing' is an instance of both 'Multiplicative' and 'Monoid' where 
---   'times' distributes over 'plus'.
-class (RightSemiNearRing a, LeftSemiNearRing a) => SemiRing a
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Semi.html hunk ./dist/doc/html/monoids/src/Data-Ring-Sugar.html 1 - - - - -Data/Ring/Sugar.hs - - - -
-----------------------------------------------------------------------------
--- |
--- Module      :  Data.Ring.Sugar
--- Copyright   :  (c) Edward Kmett 2009
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Stability   :  experimental
--- Portability :  portable
---
--- Syntactic sugar for working with rings that conflicts with names from the "Prelude".
---
--- > import Prelude hiding ((-), (+), (*), negate, subtract)
--- > import Data.Ring.Sugar
---
------------------------------------------------------------------------------
-
-module Data.Ring.Sugar 
-    ( module Data.Monoid.Multiplicative.Sugar
-    , module Data.Ring.Semi.Near
-    ) where
-
-import Data.Monoid.Multiplicative.Sugar
-import Data.Ring.Semi.Near
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring-Sugar.html hunk ./dist/doc/html/monoids/src/Data-Ring.html 1 - - - - -Data/Ring.hs - - - -
{-# OPTIONS_GHC -fno-warn-orphans #-}
-module Data.Ring
-    ( module Data.Group
-    , module Data.Ring.Semi
-    , Ring
-    ) where
-
-import Data.Group
-import Data.Ring.Semi
-
-class (Group a, SemiRing a) => Ring a
-
- rmfile ./dist/doc/html/monoids/src/Data-Ring.html hunk ./dist/doc/html/monoids/src/hscolour.css 1 -.hs-keyglyph, .hs-layout {color: red;} -.hs-keyword {color: blue;} -.hs-comment, .hs-comment a {color: green;} -.hs-str, .hs-chr {color: teal;} -.hs-keyword, .hs-conid, .hs-varid, .hs-conop, .hs-varop, .hs-num, .hs-cpp, .hs-sel, .hs-definition {} rmfile ./dist/doc/html/monoids/src/hscolour.css rmdir ./dist/doc/html/monoids/src rmdir ./dist/doc/html/monoids rmdir ./dist/doc/html rmdir ./dist/doc rmdir ./dist hunk ./monoids.cabal 2 name: monoids -version: 0.1.8 +version: 0.1.7 license: BSD3 license-file: LICENSE author: Edward A. Kmett } Context: [auto ekmett@gmail.com**20090329041010] [version # ekmett@gmail.com**20090329032119] [removed old documentation ekmett@gmail.com**20090329031117] [added Forward AD and an LZ78 Generator ekmett@gmail.com**20090329012728] [tropical semirings ekmett@gmail.com**20090328184404] [tropical semirings ekmett@gmail.com**20090328184336] [typo ekmett@gmail.com**20090328105231] [a ton of documentation ekmett@gmail.com**20090328104147] [added fold. documentation clean ekmett@gmail.com**20090328100455] [documentation ekmett@gmail.com**20090328091810] [started putting proper headers on things ekmett@gmail.com**20090328075224] [fixed some rings ekmett@gmail.com**20090328062623] [massive restructuring ekmett@gmail.com**20090328062217] [added parsing monoid ekmett@gmail.com**20090327211051] [new combinators ekmett@gmail.com**20090327201059] [restructured namespace to move Data.Monoid.Generator.Combinators into Data.Monoid.Combinators. Added RLE ekmett@gmail.com**20090327193152] [added Boolean Rings ekmett@gmail.com**20090327185113] [added Data.Array Generators ekmett@gmail.com**20090327101045] [killed documentation ekmett@gmail.com**20090327091552] [ring restructuring and documentation ekmett@gmail.com**20090327090844] [change of the way we store Data.Ring to move more into the single namespace ekmett@gmail.com**20090327085823] [documentation ekmett@gmail.com**20090327081650] [started towards bitsets documentation ekmett@gmail.com**20090327081628] [started towards Data.BitSet ekmett@gmail.com**20090327081603] [documentation ekmett@gmail.com**20090327073655] [simplified data.monoid.categorical ekmett@gmail.com**20090327073632] [documentation fix ekmett@gmail.com**20090327073326] [split out Data.Ring ekmett@gmail.com**20090327073223] [data.monoid.monad.* cleanup ekmett@gmail.com**20090327070420] [a ton of Data.Monoid.Monad.* instances ekmett@gmail.com**20090327065253] [Data.Monoid.Monad.* ekmett@gmail.com**20090327061256] [additional seminearrings, cosmetic changes ekmett@gmail.com**20090327053541] [Seminearring Seq ekmett@gmail.com**20090327052349] [generator improvements ekmett@gmail.com**20090327052053] [documentation ekmett@gmail.com**20090327051247] [more generators ekmett@gmail.com**20090327051226] [removed redundant Union newtypes ekmett@gmail.com**20090327043651] [documentation ekmett@gmail.com**20090327043314] [Data.IntMap and Data.Map ekmett@gmail.com**20090327043300] [Data.IntSet ekmett@gmail.com**20090327041957] [Data.Set ekmett@gmail.com**20090327041621] [added Data.Sequence ekmett@gmail.com**20090327040022] [documentation ekmett@gmail.com**20090327004201] [FromString propagation ekmett@gmail.com**20090327004135] [split Self, added FromString ekmett@gmail.com**20090327003859] [modified reducer sugar ekmett@gmail.com**20090327001901] [documentation ekmett@gmail.com**20090327001701] [Trying to get the IsString instance to show up ekmett@gmail.com**20090327001629] [added find to Data.Monoid.Generator ekmett@gmail.com**20090327001612] [documentation ekmett@gmail.com**20090327001246] [added foldReduce to Data.Monoid.Reducer ekmett@gmail.com**20090327001218] [foldMap' filter and find added to Data.Monoid.Generator.Combinators ekmett@gmail.com**20090327000800] [documentation ekmett@gmail.com**20090326234749] [exposed Mon from Data.Monoid.Categorical ekmett@gmail.com**20090326234723] [documentation ekmett@gmail.com**20090326234248] [massive restructuring and additional sugar ekmett@gmail.com**20090326234203] [added a couple more monoids for applicative and monad ekmett@gmail.com**20090325084732] [extra classes for data.monoid.ord ekmett@gmail.com**20090325083138] [doc fixup ekmett@gmail.com**20090325082330] [cleanup on data.monoid.generator.methods ekmett@gmail.com**20090325082224] [data.monoid.generator cleanup ekmett@gmail.com**20090325073324] [added members to Data.Monoid.Generator export list ekmett@gmail.com**20090325071438] [documentation change to reflect new project name ekmett@gmail.com**20090325070736] [widened scope. added more common monoids ekmett@gmail.com**20090325070459] [doc cleanup ekmett@gmail.com**20090323050823] [documentation fixup for Data.Monoid.Ord ekmett@gmail.com**20090323050613] [added min priority monoids as well ekmett@gmail.com**20090323050416] [improved haddock on Data.Monoid.Ord ekmett@gmail.com**20090323045109] [added Data.Monoid.Ord to correct for the lack of Priority, Min, and Max monoids ekmett@gmail.com**20090323043643] [added syntax highlighted documentation to archive ekmett@gmail.com**20090322210732] [embedding documentation so its easier to push up to comonad.com, will probably revert ekmett@gmail.com**20090322210031] [reorganized namespaces. new Generator scheme ekmett@gmail.com**20090322205657] [More robust generator scheme ekmett@gmail.com**20090322194105] [refactored Data.Monoid.Lexical to split out Data.Monoid.Lexical.Generator and Data.Monoid.Lexical.WithLexer ekmett@gmail.com**20090322163256] [added a simple example of usage ekmett@gmail.com**20090322155602] [lines start at character 1, not 0 ekmett@gmail.com**20090322153650] [added instance Lexer c () ekmett@gmail.com**20090322153528] [cleanup ekmett@gmail.com**20090322153514] [splitting Lexer into Lexer and Generator let us generalize the list instance ekmett@gmail.com**20090322152951] [literate setup ekmett@gmail.com**20090322152330] [lexical-monoids package created ekmett@gmail.com**20090322151615] Patch bundle hash: 137ba5ccbb578d2ac90404b31b48695e60bc4055