| Copyright | (c) Edward Kmett 2009-2012 |
|---|---|
| License | BSD-style |
| Maintainer | ekmett@gmail.com |
| Stability | experimental |
| Portability | non-portable (type families) |
| Safe Haskell | Trustworthy |
| Language | Haskell98 |
Data.Compressed.Internal.LZ78
Description
Compression algorithms are all about exploiting redundancy. When applying
an expensive Reducer to a redundant source, it may be better to
extract the structural redundancy that is present. LZ78 is a compression
algorithm that does so, without requiring the dictionary to be populated
with all of the possible values of a data type unlike its later
refinement LZW, and which has fewer comparison reqirements during encoding
than its earlier counterpart LZ77.
Synopsis
- data Token a = Token !Int a
- data LZ78 a
- encode :: (Hashable a, Eq a) => [a] -> LZ78 a
- encodeOrd :: Ord a => [a] -> LZ78 a
- encodeEq :: Eq a => [a] -> LZ78 a
- decode :: LZ78 a -> [a]
- recode :: (Eq a, Hashable a) => LZ78 a -> LZ78 a
- recodeOrd :: Ord a => LZ78 a -> LZ78 a
- recodeEq :: Eq a => LZ78 a -> LZ78 a
- data Entry i a = Entry !i a
- entries :: LZ78 a -> LZ78 (Entry Int a)
Lempel-Ziv 78
Instances
| Functor Token # | |
| Foldable Token # | |
Defined in Data.Compressed.Internal.LZ78 Methods fold :: Monoid m => Token m -> m # foldMap :: Monoid m => (a -> m) -> Token a -> m # foldr :: (a -> b -> b) -> b -> Token a -> b # foldr' :: (a -> b -> b) -> b -> Token a -> b # foldl :: (b -> a -> b) -> b -> Token a -> b # foldl' :: (b -> a -> b) -> b -> Token a -> b # foldr1 :: (a -> a -> a) -> Token a -> a # foldl1 :: (a -> a -> a) -> Token a -> a # elem :: Eq a => a -> Token a -> Bool # maximum :: Ord a => Token a -> a # minimum :: Ord a => Token a -> a # | |
| Traversable Token # | |
| Comonad Token # | |
| Extend Token # | |
| Eq a => Eq (Token a) # | |
| Ord a => Ord (Token a) # | |
Defined in Data.Compressed.Internal.LZ78 | |
| Hashable a => Hashable (Token a) # | |
Defined in Data.Compressed.Internal.LZ78 | |
An LZ78 compressed Generator.
Instances
Encoding
encode :: (Hashable a, Eq a) => [a] -> LZ78 a #
O(n) Construct an LZ78-compressed Generator using a HashMap internally.
encodeOrd :: Ord a => [a] -> LZ78 a #
O(n log n) Contruct an LZ78-compressed Generator using a Map internally.
encodeEq :: Eq a => [a] -> LZ78 a #
O(n^2) Contruct an LZ78-compressed Generator using a list internally, requires an instance of Eq,
less efficient than encode.
Decoding (reduce)
Recoding
Unsafe (exposes internal structure)
Constructors
| Entry !i a |
Instances
| Functor (Entry i) # | |
| Comonad (Entry i) # | |
| Extend (Entry i) # | |
| Eq i => Eq (Entry i a) # | |
| Ord i => Ord (Entry i a) # | |
| (Read i, Read a) => Read (Entry i a) # | |
| (Show i, Show a) => Show (Entry i a) # | |
| Hashable i => Hashable (Entry i a) # | |
Defined in Data.Compressed.Internal.LZ78 | |