I've selected a chunk size of 8000 bytes rather arbitrarily, but it seems to work just fine. The bigger problem is that the simplified final fraction makes the running fraction in decompression's foldl more complicated as time goes on, making it around 50 times slower than compression. It takes just under an hour to decompress the Great Gatsby.
73 lines
1.4 KiB
Text
73 lines
1.4 KiB
Text
cabal-version: 3.0
|
|
name: compress
|
|
version: 0.1.0.0
|
|
category: Web
|
|
build-type: Simple
|
|
license: MIT
|
|
license-file: LICENSE
|
|
|
|
executable compress
|
|
main-is:
|
|
Main.hs
|
|
default-extensions:
|
|
DataKinds,
|
|
DeriveAnyClass,
|
|
DeriveGeneric,
|
|
DuplicateRecordFields,
|
|
ExtendedDefaultRules,
|
|
FlexibleContexts,
|
|
FlexibleInstances,
|
|
ImpredicativeTypes,
|
|
InstanceSigs,
|
|
MultiParamTypeClasses,
|
|
NamedFieldPuns,
|
|
OverloadedLabels,
|
|
OverloadedLists,
|
|
OverloadedStrings,
|
|
PartialTypeSignatures,
|
|
RankNTypes,
|
|
RecordWildCards,
|
|
RecursiveDo,
|
|
ScopedTypeVariables,
|
|
StandaloneDeriving,
|
|
StrictData,
|
|
TemplateHaskell,
|
|
LambdaCase,
|
|
TupleSections,
|
|
TypeApplications,
|
|
TypeFamilies,
|
|
TypeOperators,
|
|
TypeSynonymInstances,
|
|
UndecidableInstances,
|
|
hs-source-dirs:
|
|
src
|
|
build-depends:
|
|
base,
|
|
basement,
|
|
bitvec,
|
|
bytestring,
|
|
cereal,
|
|
containers,
|
|
text,
|
|
uuid,
|
|
optparse-generic,
|
|
vector,
|
|
nonempty-containers,
|
|
witch,
|
|
monad-par,
|
|
monad-par-extras
|
|
default-language:
|
|
GHC2021
|
|
other-modules:
|
|
Data.PQueue
|
|
Data.FiniteBit
|
|
Compress.Huffman
|
|
Compress.PrefixTree
|
|
Data.HuffmanTree
|
|
Compress.Arithmetic
|
|
Data.WordyMap
|
|
ghc-options:
|
|
-threaded
|
|
-fprof-auto
|
|
-fprof-late
|
|
"-with-rtsopts=-p -hc -B -N -qa"
|