Use Control.Monad.State.Strict throughout.
This gives 20-30% speedup and reduction of memory usage in most of the writers.
This commit is contained in:
parent
23f3c2d7b4
commit
9849ba7fd7
33 changed files with 34 additions and 34 deletions
2
Makefile
2
Makefile
|
@ -16,7 +16,7 @@ test:
|
|||
stack test --flag 'pandoc:embed_data_files' --fast --test-arguments='-j4 --hide-successes $(TESTARGS)'
|
||||
|
||||
bench:
|
||||
stack bench
|
||||
stack bench --benchmark-arguments='$(BENCHARGS)'
|
||||
|
||||
weigh:
|
||||
stack build --flag 'pandoc:weigh-pandoc' && stack exec weigh-pandoc
|
||||
|
|
|
@ -107,7 +107,7 @@ import qualified System.FilePath.Glob as IO (glob)
|
|||
import qualified System.Directory as IO (getModificationTime)
|
||||
import Control.Monad as M (fail)
|
||||
import Control.Monad.Reader (ReaderT)
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Control.Monad.Except
|
||||
import Control.Monad.Writer (WriterT)
|
||||
import Control.Monad.RWS (RWST)
|
||||
|
|
|
@ -77,7 +77,7 @@ module Text.Pandoc.Pretty (
|
|||
)
|
||||
|
||||
where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (isSpace)
|
||||
import Data.Foldable (toList)
|
||||
import Data.List (intersperse)
|
||||
|
|
|
@ -9,7 +9,7 @@ import Text.HTML.TagSoup.Entity (lookupEntity)
|
|||
import Data.Either (rights)
|
||||
import Data.Generics
|
||||
import Data.Char (isSpace)
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.List (intersperse)
|
||||
import Data.Maybe (fromMaybe)
|
||||
import Text.TeXMath (readMathML, writeTeX)
|
||||
|
|
|
@ -76,7 +76,7 @@ module Text.Pandoc.Readers.Docx
|
|||
|
||||
import Codec.Archive.Zip
|
||||
import Control.Monad.Reader
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import Data.Default (Default)
|
||||
import Data.List (delete, intersect)
|
||||
|
|
|
@ -58,7 +58,7 @@ import Codec.Archive.Zip
|
|||
import Control.Applicative ((<|>))
|
||||
import Control.Monad.Except
|
||||
import Control.Monad.Reader
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Bits ((.|.))
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import Data.Char (chr, isDigit, ord, readLitChar)
|
||||
|
|
|
@ -7,7 +7,7 @@ module Text.Pandoc.Readers.Docx.StyleMap ( StyleMaps(..)
|
|||
, hasStyleName
|
||||
) where
|
||||
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (toLower)
|
||||
import qualified Data.Map as M
|
||||
import Text.Pandoc.Readers.Docx.Util
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{-# LANGUAGE FlexibleContexts #-}
|
||||
module Text.Pandoc.Readers.OPML ( readOPML ) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (toUpper)
|
||||
import Data.Text (Text, unpack, pack)
|
||||
import Data.Default
|
||||
|
|
|
@ -117,7 +117,7 @@ import Text.Pandoc.MIME (MimeType)
|
|||
import Text.Pandoc.Error (PandocError(..))
|
||||
import System.FilePath ( (</>) )
|
||||
import Data.Generics (Typeable, Data)
|
||||
import qualified Control.Monad.State as S
|
||||
import qualified Control.Monad.State.Strict as S
|
||||
import qualified Control.Exception as E
|
||||
import Control.Monad (msum, unless, MonadPlus(..))
|
||||
import Text.Pandoc.Pretty (charWidth)
|
||||
|
|
|
@ -37,7 +37,7 @@ that it has omitted the construct.
|
|||
AsciiDoc: <http://www.methods.co.nz/asciidoc/>
|
||||
-}
|
||||
module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Aeson (Result (..), Value (String), fromJSON, toJSON)
|
||||
import Data.Char (isPunctuation, isSpace)
|
||||
import Data.List (intercalate, intersperse, stripPrefix)
|
||||
|
|
|
@ -32,7 +32,7 @@ CommonMark: <http://commonmark.org>
|
|||
module Text.Pandoc.Writers.CommonMark (writeCommonMark) where
|
||||
|
||||
import CMark
|
||||
import Control.Monad.State (State, get, modify, runState)
|
||||
import Control.Monad.State.Strict (State, get, modify, runState)
|
||||
import Data.Foldable (foldrM)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
|
|
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
Conversion of 'Pandoc' format into ConTeXt.
|
||||
-}
|
||||
module Text.Pandoc.Writers.ConTeXt ( writeConTeXt ) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (ord)
|
||||
import Data.List (intercalate, intersperse)
|
||||
import Data.Maybe (catMaybes)
|
||||
|
|
|
@ -37,7 +37,7 @@ import Codec.Archive.Zip
|
|||
import Control.Applicative ((<|>))
|
||||
import Control.Monad.Except (catchError)
|
||||
import Control.Monad.Reader
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import qualified Data.ByteString as B
|
||||
import qualified Data.ByteString.Lazy as BL
|
||||
import qualified Data.ByteString.Lazy.Char8 as BL8
|
||||
|
|
|
@ -41,7 +41,7 @@ DokuWiki: <https://www.dokuwiki.org/dokuwiki>
|
|||
module Text.Pandoc.Writers.DokuWiki ( writeDokuWiki ) where
|
||||
import Control.Monad (zipWithM)
|
||||
import Control.Monad.Reader (ReaderT, ask, local, runReaderT)
|
||||
import Control.Monad.State (StateT, evalStateT, gets, modify)
|
||||
import Control.Monad.State.Strict (StateT, evalStateT, gets, modify)
|
||||
import Data.Default (Default (..))
|
||||
import Data.List (intercalate, intersect, isPrefixOf, transpose)
|
||||
import Data.Text (Text, pack)
|
||||
|
|
|
@ -36,7 +36,7 @@ import Codec.Archive.Zip (Entry, addEntryToArchive, eRelativePath, emptyArchive,
|
|||
fromArchive, fromEntry, toEntry)
|
||||
import Control.Monad (mplus, when, zipWithM)
|
||||
import Control.Monad.Except (catchError, throwError)
|
||||
import Control.Monad.State (State, StateT, evalState, evalStateT, get, gets,
|
||||
import Control.Monad.State.Strict (State, StateT, evalState, evalStateT, get, gets,
|
||||
lift, modify, put)
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import qualified Data.ByteString.Lazy.Char8 as B8
|
||||
|
|
|
@ -38,8 +38,8 @@ FictionBook is an XML-based e-book format. For more information see:
|
|||
module Text.Pandoc.Writers.FB2 (writeFB2) where
|
||||
|
||||
import Control.Monad.Except (catchError, throwError)
|
||||
import Control.Monad.State (StateT, evalStateT, get, lift, modify)
|
||||
import Control.Monad.State (liftM)
|
||||
import Control.Monad.State.Strict (StateT, evalStateT, get, lift, modify)
|
||||
import Control.Monad.State.Strict (liftM)
|
||||
import Data.ByteString.Base64 (encode)
|
||||
import qualified Data.ByteString.Char8 as B8
|
||||
import Data.Char (isAscii, isControl, isSpace, toLower)
|
||||
|
|
|
@ -43,7 +43,7 @@ module Text.Pandoc.Writers.HTML (
|
|||
writeDZSlides,
|
||||
writeRevealJs
|
||||
) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (ord, toLower)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text.Lazy as TL
|
||||
|
|
|
@ -33,7 +33,7 @@ Conversion of 'Pandoc' documents to haddock markup.
|
|||
Haddock: <http://www.haskell.org/haddock/doc/html/>
|
||||
-}
|
||||
module Text.Pandoc.Writers.Haddock (writeHaddock) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Default
|
||||
import Data.Text (Text)
|
||||
import Data.List (intersperse, transpose)
|
||||
|
|
|
@ -17,7 +17,7 @@ into InDesign with File -> Place.
|
|||
-}
|
||||
module Text.Pandoc.Writers.ICML (writeICML) where
|
||||
import Control.Monad.Except (catchError)
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.List (intersperse, isInfixOf, isPrefixOf, stripPrefix)
|
||||
import qualified Data.Set as Set
|
||||
import Data.Text as Text (breakOnAll, pack)
|
||||
|
|
|
@ -35,7 +35,7 @@ module Text.Pandoc.Writers.LaTeX (
|
|||
, writeBeamer
|
||||
) where
|
||||
import Control.Applicative ((<|>))
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Aeson (FromJSON, object, (.=))
|
||||
import Data.Char (isAlphaNum, isAscii, isDigit, isLetter, isPunctuation, ord,
|
||||
toLower)
|
||||
|
|
|
@ -31,7 +31,7 @@ Conversion of 'Pandoc' documents to groff man page format.
|
|||
-}
|
||||
module Text.Pandoc.Writers.Man ( writeMan) where
|
||||
import Control.Monad.Except (throwError)
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.List (intercalate, intersperse, stripPrefix, sort)
|
||||
import qualified Data.Map as Map
|
||||
import Data.Maybe (fromMaybe)
|
||||
|
|
|
@ -35,7 +35,7 @@ Markdown: <http://daringfireball.net/projects/markdown/>
|
|||
-}
|
||||
module Text.Pandoc.Writers.Markdown (writeMarkdown, writePlain) where
|
||||
import Control.Monad.Reader
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (chr, isPunctuation, isSpace, ord)
|
||||
import Data.Default
|
||||
import qualified Data.HashMap.Strict as H
|
||||
|
|
|
@ -31,7 +31,7 @@ MediaWiki: <http://www.mediawiki.org/wiki/MediaWiki>
|
|||
-}
|
||||
module Text.Pandoc.Writers.MediaWiki ( writeMediaWiki ) where
|
||||
import Control.Monad.Reader
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.List (intercalate)
|
||||
import qualified Data.Set as Set
|
||||
import Data.Text (Text, pack)
|
||||
|
|
|
@ -52,7 +52,7 @@ import Text.Pandoc.Pretty
|
|||
import Text.Pandoc.Class (PandocMonad, report)
|
||||
import Text.Pandoc.ImageSize
|
||||
import Text.Pandoc.Logging
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char ( isLower, isUpper, toUpper )
|
||||
import Text.TeXMath (writeEqn)
|
||||
import System.FilePath (takeExtension)
|
||||
|
|
|
@ -42,7 +42,7 @@ However, @\<literal style="html">@ tag is used for HTML raw blocks
|
|||
even though it is supported only in Emacs Muse.
|
||||
-}
|
||||
module Text.Pandoc.Writers.Muse (writeMuse) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Text (Text)
|
||||
import Data.List (intersperse, transpose, isInfixOf)
|
||||
import System.FilePath (takeExtension)
|
||||
|
|
|
@ -31,7 +31,7 @@ Conversion of 'Pandoc' documents to ODT.
|
|||
module Text.Pandoc.Writers.ODT ( writeODT ) where
|
||||
import Codec.Archive.Zip
|
||||
import Control.Monad.Except (catchError)
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import Data.List (isPrefixOf)
|
||||
import Data.Maybe (fromMaybe)
|
||||
|
|
|
@ -33,7 +33,7 @@ Conversion of 'Pandoc' documents to OpenDocument XML.
|
|||
-}
|
||||
module Text.Pandoc.Writers.OpenDocument ( writeOpenDocument ) where
|
||||
import Control.Arrow ((***), (>>>))
|
||||
import Control.Monad.State hiding (when)
|
||||
import Control.Monad.State.Strict hiding (when)
|
||||
import Data.Char (chr)
|
||||
import Data.List (sortBy)
|
||||
import Data.Text (Text)
|
||||
|
|
|
@ -35,7 +35,7 @@ Conversion of 'Pandoc' documents to Emacs Org-Mode.
|
|||
Org-Mode: <http://orgmode.org>
|
||||
-}
|
||||
module Text.Pandoc.Writers.Org (writeOrg) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (isAlphaNum, toLower)
|
||||
import Data.Text (Text)
|
||||
import Data.List (intersect, intersperse, isPrefixOf, partition, transpose)
|
||||
|
|
|
@ -31,7 +31,7 @@ Conversion of 'Pandoc' documents to reStructuredText.
|
|||
reStructuredText: <http://docutils.sourceforge.net/rst.html>
|
||||
-}
|
||||
module Text.Pandoc.Writers.RST ( writeRST ) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (isSpace, toLower)
|
||||
import Data.List (isPrefixOf, stripPrefix)
|
||||
import Data.Maybe (fromMaybe)
|
||||
|
|
|
@ -32,7 +32,7 @@ Conversion of 'Pandoc' format into Texinfo.
|
|||
-}
|
||||
module Text.Pandoc.Writers.Texinfo ( writeTexinfo ) where
|
||||
import Control.Monad.Except (throwError)
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (chr, ord)
|
||||
import Data.List (maximumBy, transpose)
|
||||
import Data.Ord (comparing)
|
||||
|
|
|
@ -30,7 +30,7 @@ Conversion of 'Pandoc' documents to Textile markup.
|
|||
Textile: <http://thresholdstate.com/articles/4312/the-textile-reference-manual>
|
||||
-}
|
||||
module Text.Pandoc.Writers.Textile ( writeTextile ) where
|
||||
import Control.Monad.State
|
||||
import Control.Monad.State.Strict
|
||||
import Data.Char (isSpace)
|
||||
import Data.List (intercalate)
|
||||
import Data.Text (Text, pack)
|
||||
|
|
|
@ -33,7 +33,7 @@ http://zim-wiki.org/manual/Help/Wiki_Syntax.html
|
|||
|
||||
module Text.Pandoc.Writers.ZimWiki ( writeZimWiki ) where
|
||||
import Control.Monad (zipWithM)
|
||||
import Control.Monad.State (StateT, evalStateT, gets, modify)
|
||||
import Control.Monad.State.Strict (StateT, evalStateT, gets, modify)
|
||||
import Data.Default (Default (..))
|
||||
import Data.List (intercalate, isInfixOf, isPrefixOf, transpose)
|
||||
import qualified Data.Map as Map
|
||||
|
|
Loading…
Reference in a new issue