summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2022-03-31 23:09:14 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2022-03-31 23:09:14 -0700
commitc1ab48874c04142988505ca5c5caa6626bb68211 (patch)
tree1a0496fd2a38b938baaab6b115587780b2cc7643 /src
parenta11cbc7b579c5d471295d42e6dde19a749403877 (diff)
Parsing.General: make manyChar1, etc. more strict.
Profiling the muse reader revealed that these were creating huge thunks.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Parsing/General.hs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Parsing/General.hs b/src/Text/Pandoc/Parsing/General.hs
index c03bda117..024038f55 100644
--- a/src/Text/Pandoc/Parsing/General.hs
+++ b/src/Text/Pandoc/Parsing/General.hs
@@ -68,6 +68,7 @@ import Control.Monad
, unless
, void
, when
+ , (<$!>)
)
import Control.Monad.Except ( MonadError(throwError) )
import Control.Monad.Identity ( Identity(..), MonadPlus(mzero) )
@@ -199,20 +200,20 @@ indentWith num = do
manyChar :: Stream s m t
=> ParserT s st m Char
-> ParserT s st m Text
-manyChar = fmap T.pack . many
+manyChar p = T.pack <$!> many p
-- | Like @many1@, but packs its result.
many1Char :: Stream s m t
=> ParserT s st m Char
-> ParserT s st m Text
-many1Char = fmap T.pack . many1
+many1Char p = T.pack <$!> many1 p
-- | Like @manyTill@, but packs its result.
manyTillChar :: Stream s m t
=> ParserT s st m Char
-> ParserT s st m a
-> ParserT s st m Text
-manyTillChar p = fmap T.pack . manyTill p
+manyTillChar p end = T.pack <$!> manyTill p end
-- | Like @manyTill@, but reads at least one item.
many1Till :: (Show end, Stream s m t)