diff options
27 files changed, 84 insertions, 75 deletions
diff --git a/src/Text/Pandoc/App/CommandLineOptions.hs b/src/Text/Pandoc/App/CommandLineOptions.hs index e9d5e0597..1020d716d 100644 --- a/src/Text/Pandoc/App/CommandLineOptions.hs +++ b/src/Text/Pandoc/App/CommandLineOptions.hs @@ -31,7 +31,8 @@ import Data.Aeson.Encode.Pretty (encodePretty', Config(..), keyOrder, defConfig, Indent(..), NumberFormat(..)) import Data.Bifunctor (second) import Data.Char (toLower) -import Data.List (intercalate, sort, foldl') +import Data.List (intercalate, sort) +import qualified Data.List as L #ifdef _WINDOWS import Data.List (isPrefixOf) #endif @@ -100,7 +101,7 @@ parseOptionsFromArgs options' defaults prg rawArgs = do if (null errors && null unknownOptionErrors) then -- thread option data structure through all supplied option actions - runExceptT $ adjustOpts <$> (foldl' (>>=) (return defaults) actions) + runExceptT $ adjustOpts <$> (L.foldl' (>>=) (return defaults) actions) else return $ Left $ OptError $ PandocOptionError $ T.pack $ concat errors ++ unlines unknownOptionErrors ++ ("Try " ++ prg ++ " --help for more information.") diff --git a/src/Text/Pandoc/Citeproc/BibTeX.hs b/src/Text/Pandoc/Citeproc/BibTeX.hs index 180f0988c..06696bcf3 100644 --- a/src/Text/Pandoc/Citeproc/BibTeX.hs +++ b/src/Text/Pandoc/Citeproc/BibTeX.hs @@ -52,7 +52,8 @@ import qualified Data.Sequence as Seq import Data.Char (isAlphaNum, isDigit, isLetter, isUpper, toLower, toUpper, isLower, isPunctuation, isSpace) -import Data.List (foldl', intercalate, intersperse) +import Data.List (intercalate, intersperse) +import qualified Data.List as L import Safe (readMay) import Text.Printf (printf) import Text.DocLayout (literal, hsep, nest, hang, Doc(..), @@ -1115,7 +1116,7 @@ toLiteralList [Plain xs] = toLiteralList [Para xs] toLiteralList _ = mzero concatWith :: Char -> [Inlines] -> Inlines -concatWith sep = foldl' go mempty +concatWith sep = L.foldl' go mempty where go :: Inlines -> Inlines -> Inlines go accum s | s == mempty = accum diff --git a/src/Text/Pandoc/Citeproc/Locator.hs b/src/Text/Pandoc/Citeproc/Locator.hs index 8d8328270..d514b492f 100644 --- a/src/Text/Pandoc/Citeproc/Locator.hs +++ b/src/Text/Pandoc/Citeproc/Locator.hs @@ -11,7 +11,7 @@ import Citeproc.Types import Text.Pandoc.Citeproc.Util (splitStrWhen) import Data.Text (Text) import qualified Data.Text as T -import Data.List (foldl') +import qualified Data.List as L import Text.Pandoc.Definition import Text.Pandoc.Parsing import Text.Pandoc.Shared (stringify) @@ -196,7 +196,7 @@ pBalancedBraces braces p = try $ do where except = notFollowedBy pBraces >> p -- outer and inner - surround = foldl' (\a (open, close) -> sur open close except <|> a) + surround = L.foldl' (\a (open, close) -> sur open close except <|> a) except braces diff --git a/src/Text/Pandoc/Citeproc/Name.hs b/src/Text/Pandoc/Citeproc/Name.hs index d62a9e4a1..68662cb57 100644 --- a/src/Text/Pandoc/Citeproc/Name.hs +++ b/src/Text/Pandoc/Citeproc/Name.hs @@ -30,7 +30,7 @@ import Text.Pandoc.Citeproc.Util (splitStrWhen) import qualified Data.Text as T import Data.List.Split (splitWhen, wordsBy) import Data.Char (isUpper, isDigit) -import Data.List (foldl') +import qualified Data.List as L emptyName :: Name emptyName = @@ -83,7 +83,7 @@ toName _ ils@(Str ys:_) | T.any (== '=') ys = do ag{ nameSuffix = Just $ stringify xs } addPart ag (Space : xs) = addPart ag xs addPart ag _ = ag - return $ foldl' addPart emptyName commaParts + return $ L.foldl' addPart emptyName commaParts -- First von Last -- von Last, First -- von Last, Jr ,First diff --git a/src/Text/Pandoc/Format.hs b/src/Text/Pandoc/Format.hs index 5b87a2531..788e2db4d 100644 --- a/src/Text/Pandoc/Format.hs +++ b/src/Text/Pandoc/Format.hs @@ -22,7 +22,7 @@ module Text.Pandoc.Format import Control.Monad.Except (throwError) import Data.Char (toLower) import Data.Foldable (asum) -import Data.List (foldl') +import qualified Data.List as L import System.FilePath (splitExtension, takeExtension) import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Error (PandocError (..)) @@ -142,7 +142,7 @@ parseFlavoredFormat spec = pExtensionsDiff :: (UpdateSourcePos s Char, Stream s m Char) => ParsecT s u m ExtensionsDiff -pExtensionsDiff = foldl' (flip ($)) mempty <$> many extMod +pExtensionsDiff = L.foldl' (flip ($)) mempty <$> many extMod where extMod = do polarity <- oneOf "-+" diff --git a/src/Text/Pandoc/Readers/AsciiDoc.hs b/src/Text/Pandoc/Readers/AsciiDoc.hs index 391c38b30..965e47fa1 100644 --- a/src/Text/Pandoc/Readers/AsciiDoc.hs +++ b/src/Text/Pandoc/Readers/AsciiDoc.hs @@ -37,7 +37,7 @@ import Text.Pandoc.Parsing (newPos, sourceName) import Text.Pandoc.Logging import Text.Pandoc.Sources import Control.Monad.State -import Data.List (intersperse, foldl') +import qualified Data.List as L import Data.Char (chr, ord) import qualified Data.Text as T import qualified Data.Map as M @@ -148,7 +148,7 @@ doMeta meta = do B.setMeta "version" vers . maybe id (B.setMeta "date") mbdate . maybe id (B.setMeta "remark") mbremark) . - flip (foldl' (\m (k,v) -> + flip (L.foldl' (\m (k,v) -> -- leave out flags that are set just for processing if k == "sectids" || k == "stem" then m @@ -363,7 +363,7 @@ doInline (A.Inline (A.Attr _ps kvs') it) = do (B.str ("[" <> t <> "]")) A.Button t -> pure $ B.spanWith ("",["button"],[]) (B.strong $ B.str ("[" <> t <> "]")) - A.Kbd ts -> pure $ mconcat $ intersperse (B.str "+") $ + A.Kbd ts -> pure $ mconcat $ L.intersperse (B.str "+") $ map (B.spanWith ("",["kbd"],[]) . B.strong . B.str) ts A.Menu ts -> pure $ B.spanWith ("",["menu"],[]) $ B.strong $ B.text $ T.intercalate " › " ts diff --git a/src/Text/Pandoc/Readers/Djot.hs b/src/Text/Pandoc/Readers/Djot.hs index ecfe3e2c1..471d6a0c9 100644 --- a/src/Text/Pandoc/Readers/Djot.hs +++ b/src/Text/Pandoc/Readers/Djot.hs @@ -37,7 +37,6 @@ import Text.Pandoc.Logging import Text.Pandoc.Emoji (emojiToInline) import Control.Monad.Reader import qualified Data.Foldable as F -import Data.List (foldl') import Data.ByteString (ByteString) -- import Debug.Trace @@ -141,7 +140,7 @@ convertBlock (D.Node pos attr bl) = addAttrToBlock pos attr <$> (hs,bs):rs -> (hs,row:bs):rs [] -> [([],[row])] let reverseSnd (as,bs) = (as,reverse bs) - let bodies = reverse $ map reverseSnd $ foldl' getBody [] rest + let bodies = reverse $ map reverseSnd $ F.foldl' getBody [] rest let toCell (D.Cell _ al ils) = Cell nullAttr (toAlign al) (RowSpan 1) (ColSpan 1) . (\is -> [Para $ toList is]) <$> convertInlines ils diff --git a/src/Text/Pandoc/Readers/Docx.hs b/src/Text/Pandoc/Readers/Docx.hs index 8f70fe7a6..8ec14c040 100644 --- a/src/Text/Pandoc/Readers/Docx.hs +++ b/src/Text/Pandoc/Readers/Docx.hs @@ -74,7 +74,8 @@ import Control.Monad.State.Strict import Data.Bifunctor (bimap, first) import qualified Data.ByteString.Lazy as B import Data.Default (Default) -import Data.List (delete, intersect, foldl') +import Data.List (delete, intersect) +import qualified Data.List as L import Data.Char (isSpace) import qualified Data.Map as M import qualified Data.Text as T @@ -625,8 +626,8 @@ rowsToRows rows = do splitHeaderRows :: Bool -> [Docx.Row] -> ([Docx.Row], [Docx.Row]) splitHeaderRows hasFirstRowFormatting rs = bimap reverse reverse $ fst $ if hasFirstRowFormatting - then foldl' f ((take 1 rs, []), True) (drop 1 rs) - else foldl' f (([], []), False) rs + then L.foldl' f ((take 1 rs, []), True) (drop 1 rs) + else L.foldl' f (([], []), False) rs where f ((headerRows, bodyRows), previousRowWasHeader) r@(Docx.Row h cs) | h == HasTblHeader || (previousRowWasHeader && any isContinuationCell cs) diff --git a/src/Text/Pandoc/Readers/HTML.hs b/src/Text/Pandoc/Readers/HTML.hs index 23019e651..9178ab848 100644 --- a/src/Text/Pandoc/Readers/HTML.hs +++ b/src/Text/Pandoc/Readers/HTML.hs @@ -33,7 +33,7 @@ import Data.Char (isAlphaNum, isLetter) import Data.Default (Default (..), def) import Data.Foldable (for_) import Data.List.Split (splitWhen) -import Data.List (foldl') +import qualified Data.List as L import qualified Data.Map as M import Data.Maybe (fromMaybe, isJust, isNothing) import Data.Either (partitionEithers) @@ -444,9 +444,9 @@ pDefListItem = try $ do terms <- many1 (try $ skipMany nonItem >> pInTags "dt" inline) defs <- many1 (try $ skipMany nonItem >> pInTags "dd" block) skipMany nonItem - let term = foldl' (\x y -> if null x - then trimInlines y - else x <> B.linebreak <> trimInlines y) + let term = L.foldl' (\x y -> if null x + then trimInlines y + else x <> B.linebreak <> trimInlines y) mempty terms return (term, map (fixPlains True) defs) diff --git a/src/Text/Pandoc/Readers/HTML/Table.hs b/src/Text/Pandoc/Readers/HTML/Table.hs index 756f857fd..b452a60ac 100644 --- a/src/Text/Pandoc/Readers/HTML/Table.hs +++ b/src/Text/Pandoc/Readers/HTML/Table.hs @@ -20,7 +20,7 @@ import Control.Applicative ((<|>)) import Data.Maybe (fromMaybe, isJust) import Data.Either (lefts, rights) import Data.List.NonEmpty (nonEmpty) -import Data.List (foldl') +import qualified Data.List as L import Data.Text (Text) import Text.HTML.TagSoup import Text.Pandoc.Builder (Blocks) @@ -204,9 +204,9 @@ pTableBody block = try $ do let adjustRowHeadCols headcolsv (currentrow, (numheads, Row _ cells)) = - foldl' (adjustRowHeadColsForCell currentrow) headcolsv + L.foldl' (adjustRowHeadColsForCell currentrow) headcolsv (take numheads cells) - let headcols = foldl' adjustRowHeadCols + let headcols = L.foldl' adjustRowHeadCols (V.replicate numrows (0 :: Int)) (zip [(0 :: Int)..] rows) let rowHeadCols = case V.uncons headcols of diff --git a/src/Text/Pandoc/Readers/JATS.hs b/src/Text/Pandoc/Readers/JATS.hs index 8f9951099..a1ea1d918 100644 --- a/src/Text/Pandoc/Readers/JATS.hs +++ b/src/Text/Pandoc/Readers/JATS.hs @@ -21,7 +21,7 @@ import Text.Pandoc.Error (PandocError(..)) import Data.Char (isDigit, isSpace) import Data.Default import Data.Generics -import Data.List (foldl', intersperse) +import qualified Data.List as L import qualified Data.Map as Map import Data.Maybe (maybeToList, fromMaybe, catMaybes) import Data.Text (Text) @@ -290,11 +290,11 @@ parseBlock (Elem e) = do let items = filterChildren (named "def") e' terms' <- mapM getInlines terms items' <- mapM getBlocks items - return (mconcat $ intersperse (str "; ") terms', items') + return (mconcat $ L.intersperse (str "; ") terms', items') parseFigure = do modify $ \st -> st{ jatsInFigure = True } capt <- case filterChild (named "caption") e of - Just t -> mconcat . intersperse linebreak <$> + Just t -> mconcat . L.intersperse linebreak <$> mapM getInlines (filterChildren (const True) t) Nothing -> return mempty contents <- getBlocks e @@ -350,7 +350,7 @@ parseBlock (Elem e) = do n <- safeRead $ "0" <> T.filter (\x -> isDigit x || x == '.') w if n > 0 then Just n else Nothing let firstBody = fromMaybe [] (headMay multipleBodyRowElements) - let numrows = foldl' max 0 $ map length firstBody + let numrows = L.foldl' max 0 $ map length firstBody let aligns = case colspecs of [] -> replicate numrows AlignDefault cs -> map toAlignment cs diff --git a/src/Text/Pandoc/Readers/LaTeX/Math.hs b/src/Text/Pandoc/Readers/LaTeX/Math.hs index f1491656e..5685465f8 100644 --- a/src/Text/Pandoc/Readers/LaTeX/Math.hs +++ b/src/Text/Pandoc/Readers/LaTeX/Math.hs @@ -14,7 +14,7 @@ module Text.Pandoc.Readers.LaTeX.Math ) where import Data.Maybe (fromMaybe, mapMaybe, listToMaybe) -import Data.List (foldl') +import qualified Data.List as L import Text.Pandoc.Walk (walk) import Text.Pandoc.Builder as B import qualified Data.Sequence as Seq @@ -160,7 +160,7 @@ newtheorem inline = do extractLabelFromBlock :: Block -> Maybe Text extractLabelFromBlock (Para inlines) = extractLabel Nothing inlines where - extractLabel = foldl' go + extractLabel = L.foldl' go go :: Maybe Text -> Inline -> Maybe Text go (Just t) _ = Just t go Nothing (Span (_, _, attrs) _) = lookup "label" attrs diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 1ee1b801e..ad22996b4 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -24,7 +24,8 @@ import Control.Monad import Control.Monad.Except (throwError) import qualified Data.Bifunctor as Bifunctor import Data.Char (isAlphaNum, isPunctuation, isSpace) -import Data.List (transpose, elemIndex, sortOn, foldl') +import Data.List (transpose, elemIndex, sortOn) +import qualified Data.List as L import qualified Data.Map as M import Data.Maybe import qualified Data.Set as Set @@ -388,7 +389,7 @@ referenceKey = try $ do addKvs <- option [] $ guardEnabled Ext_mmd_link_attributes >> many (try $ spnl >> keyValAttr) blanklines - let attr' = extractIdClass $ foldl' (\x f -> f x) attr addKvs + let attr' = extractIdClass $ L.foldl' (\x f -> f x) attr addKvs target = (escapeURI $ trimr src, tit) st <- getState let oldkeys = stateKeys st @@ -648,7 +649,7 @@ attributes = try $ do spnl attrs <- many (attribute <* spnl) char '}' - return $ foldl' (\x f -> f x) nullAttr attrs + return $ L.foldl' (\x f -> f x) nullAttr attrs attribute :: PandocMonad m => MarkdownParser m (Attr -> Attr) attribute = identifierAttr <|> classAttr <|> keyValAttr <|> specialAttr diff --git a/src/Text/Pandoc/Readers/ODT/Arrows/State.hs b/src/Text/Pandoc/Readers/ODT/Arrows/State.hs index 9e695fa17..ef6986278 100644 --- a/src/Text/Pandoc/Readers/ODT/Arrows/State.hs +++ b/src/Text/Pandoc/Readers/ODT/Arrows/State.hs @@ -36,7 +36,6 @@ module Text.Pandoc.Readers.ODT.Arrows.State import Control.Arrow import qualified Control.Category as Cat import Control.Monad -import Data.Foldable import Text.Pandoc.Readers.ODT.Arrows.Utils import Text.Pandoc.Readers.ODT.Generic.Fallible diff --git a/src/Text/Pandoc/Readers/ODT/Generic/XMLConverter.hs b/src/Text/Pandoc/Readers/ODT/Generic/XMLConverter.hs index f5bd843ca..727ec3166 100644 --- a/src/Text/Pandoc/Readers/ODT/Generic/XMLConverter.hs +++ b/src/Text/Pandoc/Readers/ODT/Generic/XMLConverter.hs @@ -64,7 +64,7 @@ import qualified Data.Map as M import Data.Text (Text) import Data.Default import Data.Maybe -import Data.List (foldl') +import qualified Data.List as L import qualified Data.List.NonEmpty as NonEmpty import Data.List.NonEmpty (NonEmpty(..)) @@ -298,7 +298,7 @@ readNSattributes = fromState $ \state -> maybe (state, failEmpty ) => XMLConverterState nsID extraState -> Maybe (XMLConverterState nsID extraState) extractNSAttrs startState - = foldl' (\state d -> state >>= addNS d) + = L.foldl' (\state d -> state >>= addNS d) (Just startState) nsAttribs where nsAttribs = mapMaybe readNSattr (XML.elAttribs element) diff --git a/src/Text/Pandoc/Readers/ODT/StyleReader.hs b/src/Text/Pandoc/Readers/ODT/StyleReader.hs index 474303bd6..a1031d4ab 100644 --- a/src/Text/Pandoc/Readers/ODT/StyleReader.hs +++ b/src/Text/Pandoc/Readers/ODT/StyleReader.hs @@ -45,7 +45,7 @@ import Control.Arrow import Data.Default import qualified Data.Foldable as F -import Data.List (unfoldr, foldl') +import qualified Data.List as L import qualified Data.Map as M import Data.Maybe import Data.Text (Text) @@ -121,7 +121,7 @@ fontPitchReader = executeInSub NsOffice "font-face-decls" ( &&& lookupDefaultingAttr NsStyle "font-pitch" )) - >>?^ ( M.fromList . foldl' accumLegalPitches [] ) + >>?^ ( M.fromList . L.foldl' accumLegalPitches [] ) ) `ifFailedDo` returnV (Right M.empty) where accumLegalPitches ls (Nothing,_) = ls accumLegalPitches ls (Just n,p) = (n,p):ls @@ -603,7 +603,7 @@ lookupListStyleByName name Styles{..} = M.lookup name listStylesByName -- be the first element of the list, followed by its parent and so on. -- The current style is not in the list. parents :: Style -> Styles -> [Style] -parents style styles = unfoldr findNextParent style -- Ha! +parents style styles = L.unfoldr findNextParent style -- Ha! where findNextParent Style{..} = fmap duplicate $ (`lookupStyle` styles) =<< styleParentName diff --git a/src/Text/Pandoc/Readers/Org/Blocks.hs b/src/Text/Pandoc/Readers/Org/Blocks.hs index 9c9123a47..cddd56382 100644 --- a/src/Text/Pandoc/Readers/Org/Blocks.hs +++ b/src/Text/Pandoc/Readers/Org/Blocks.hs @@ -38,7 +38,7 @@ import Data.Bifunctor (bimap) import Data.Char (isSpace) import Data.Default (Default) import Data.Functor (($>)) -import Data.List (find, foldl') +import qualified Data.List as L import Data.Maybe (fromMaybe, isJust, isNothing) import Data.Text (Text) import Data.List.NonEmpty (nonEmpty) @@ -130,9 +130,9 @@ blockAttributes :: PandocMonad m => OrgParser m BlockAttributes blockAttributes = try $ do kv <- many stringyMetaAttribute guard $ all (isBlockAttr . fst) kv - let caption = foldl' (appendValues "caption") Nothing kv - let kvAttrs = foldl' (appendValues "attr_html") Nothing kv - let name = snd <$> find ((`elem` ["name", "label"]) . fst) (reverse kv) + let caption = L.foldl' (appendValues "caption") Nothing kv + let kvAttrs = L.foldl' (appendValues "attr_html") Nothing kv + let name = snd <$> L.find ((`elem` ["name", "label"]) . fst) (reverse kv) caption' <- traverse (parseFromString inlines . (<> "\n")) caption kvAttrs' <- parseFromString keyValues . (<> "\n") $ fromMaybe mempty kvAttrs return BlockAttributes diff --git a/src/Text/Pandoc/Readers/RIS.hs b/src/Text/Pandoc/Readers/RIS.hs index 66fa26506..fab266657 100644 --- a/src/Text/Pandoc/Readers/RIS.hs +++ b/src/Text/Pandoc/Readers/RIS.hs @@ -23,7 +23,7 @@ import Text.Pandoc.Options import Text.Pandoc.Definition import Text.Pandoc.Parsing import Data.Char (isAsciiUpper, isDigit, isSpace, ord, chr) -import Data.List (foldl') +import qualified Data.List as L import Citeproc (Reference(..), ItemId(..), Val(..), Date(..), DateParts(..), toVariable) import Text.Pandoc.Builder as B @@ -185,7 +185,7 @@ risReferences = do return $ fixDuplicateIds $ map risRecordToReference recs fixDuplicateIds :: [Reference Text] -> [Reference Text] -fixDuplicateIds = reverse . snd . foldl' go (mempty, []) +fixDuplicateIds = reverse . snd . L.foldl' go (mempty, []) where go (ids_seen, refs) ref = case M.lookup (referenceId ref) ids_seen of diff --git a/src/Text/Pandoc/Readers/RTF.hs b/src/Text/Pandoc/Readers/RTF.hs index b1195ac19..cb60242be 100644 --- a/src/Text/Pandoc/Readers/RTF.hs +++ b/src/Text/Pandoc/Readers/RTF.hs @@ -20,7 +20,7 @@ import qualified Data.Sequence as Seq import Control.Monad import Control.Monad.Except (throwError) import Crypto.Hash (hashWith, SHA1(SHA1)) -import Data.List (find, foldl') +import qualified Data.List as L import Data.Word (Word8, Word16) import Data.Default import Data.Text (Text) @@ -895,7 +895,7 @@ parseStyle (Tok _ (Grouped toks)) = do _ -> mempty let isBasedOn (Tok _ (ControlWord "sbasedon" (Just _))) = True isBasedOn _ = False - let styBasedOn = case find isBasedOn toks of + let styBasedOn = case L.find isBasedOn toks of Just (Tok _ (ControlWord "sbasedon" (Just i))) -> Just i _ -> Nothing let isStyleControl (Tok _ (ControlWord x _)) = @@ -920,7 +920,7 @@ hexToWord t = case TR.hexadecimal t of handlePict :: PandocMonad m => [Tok] -> RTFParser m () handlePict toks = do - let pict = foldl' getPictData def toks + let pict = L.foldl' getPictData def toks let altText = "image" let bytes = if picBinary pict @@ -959,7 +959,7 @@ handlePict toks = do processFontTable :: [Tok] -> FontTable -processFontTable = snd . foldl' go (0, mempty) +processFontTable = snd . L.foldl' go (0, mempty) where go (fontnum, tbl) (Tok _ tok') = case tok' of @@ -972,7 +972,7 @@ processFontTable = snd . foldl' go (0, mempty) (ControlWord "fdecor" _) -> (fontnum, IntMap.insert fontnum Decor tbl) (ControlWord "ftech" _) -> (fontnum, IntMap.insert fontnum Tech tbl) (ControlWord "fbidi" _) -> (fontnum, IntMap.insert fontnum Bidi tbl) - (Grouped ts) -> foldl' go (fontnum, tbl) ts + (Grouped ts) -> L.foldl' go (fontnum, tbl) ts _ -> (fontnum, tbl) defaultAnsiWordToChar :: Word8 -> Char diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs index f6a73d641..cbe10b327 100644 --- a/src/Text/Pandoc/Readers/Textile.hs +++ b/src/Text/Pandoc/Readers/Textile.hs @@ -38,7 +38,8 @@ module Text.Pandoc.Readers.Textile ( readTextile) where import Control.Monad (guard, liftM) import Control.Monad.Except (throwError) import Data.Char (digitToInt, isUpper) -import Data.List (intersperse, transpose, foldl') +import Data.List (intersperse, transpose) +import qualified Data.List as L import Data.List.NonEmpty (NonEmpty(..), nonEmpty) import qualified Data.Map as M import Data.Text (Text) @@ -732,7 +733,7 @@ orderedListStartAttr = do -- | Html / CSS attributes attributes :: PandocMonad m => TextileParser m Attr -attributes = foldl' (flip ($)) ("",[],[]) <$> +attributes = L.foldl' (flip ($)) ("",[],[]) <$> try (do special <- option id specialAttribute attrs <- many attribute return (special : attrs)) diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index 657c95b71..5b3a620d3 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -91,7 +91,8 @@ import Data.Containers.ListUtils (nubOrd) import Data.Char (isAlpha, isLower, isSpace, isUpper, toLower, isAlphaNum, generalCategory, GeneralCategory(NonSpacingMark, SpacingCombiningMark, EnclosingMark, ConnectorPunctuation)) -import Data.List (find, foldl', groupBy, intercalate, intersperse, union) +import Data.List (find, groupBy, intercalate, intersperse, union) +import qualified Data.List as L import qualified Data.Map as M import Data.Maybe (mapMaybe) import Data.Monoid (Any (..) ) @@ -746,7 +747,7 @@ inDirectory path action = E.bracket -- | Canonicalizes a file path by removing redundant @.@ and @..@. makeCanonical :: FilePath -> FilePath makeCanonical = Posix.joinPath . transformPathParts . splitDirectories - where transformPathParts = reverse . foldl' go [] + where transformPathParts = reverse . L.foldl' go [] go as "." = as go ("..":as) ".." = ["..", ".."] <> as go (_:as) ".." = as @@ -762,7 +763,7 @@ makeCanonical = Posix.joinPath . transformPathParts . splitDirectories -- > collapseFilePath "parent/foo/.." == "parent" -- > collapseFilePath "/parent/foo/../../bar" == "/bar" collapseFilePath :: FilePath -> FilePath -collapseFilePath = Posix.joinPath . reverse . foldl' go [] . splitDirectories +collapseFilePath = Posix.joinPath . reverse . L.foldl' go [] . splitDirectories where go rs "." = rs go r@(p:rs) ".." = case p of diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs index cdfe89879..2b4cfc5aa 100644 --- a/src/Text/Pandoc/Writers/HTML.hs +++ b/src/Text/Pandoc/Writers/HTML.hs @@ -35,7 +35,8 @@ import Control.Monad.State.Strict import Control.Monad ( liftM, when, foldM, unless ) import Control.Monad.Trans ( MonadTrans(lift) ) import Data.Char (ord, isSpace, isAscii) -import Data.List (intercalate, intersperse, partition, delete, (\\), foldl') +import Data.List (intercalate, intersperse, partition, delete, (\\)) +import qualified Data.List as L import Data.List.NonEmpty (NonEmpty((:|))) import Data.Containers.ListUtils (nubOrd) import Data.Maybe (fromMaybe, isJust, isNothing) @@ -125,7 +126,7 @@ defaultWriterState = WriterState {stNotes= [], strToHtml :: Text -> Html strToHtml t | T.any isSpecial t = - let !x = foldl' go mempty $ T.groupBy samegroup t + let !x = L.foldl' go mempty $ T.groupBy samegroup t in x | otherwise = toHtml t where @@ -674,7 +675,7 @@ tagWithAttributes opts html5 selfClosing tagname attr = addAttrs :: PandocMonad m => WriterOptions -> Attr -> Html -> StateT WriterState m Html -addAttrs opts attr h = foldl' (!) h <$> attrsToHtml opts attr +addAttrs opts attr h = L.foldl' (!) h <$> attrsToHtml opts attr toAttrs :: PandocMonad m => [(Text, Text)] -> StateT WriterState m [Attribute] @@ -1046,7 +1047,7 @@ blockToHtmlInner opts (OrderedList (startnum, numstyle, _) lst) = do numstyle'] else []) l <- ordList opts contents - return $ foldl' (!) l attribs + return $ L.foldl' (!) l attribs blockToHtmlInner opts (DefinitionList lst) = do contents <- mapM (\(term, defs) -> do term' <- liftM H.dt $ inlineListToHtml opts term @@ -1413,7 +1414,7 @@ inlineToHtml opts inline = do = Just (t . H.u, cs) | otherwise = Just (t, c:cs) - spanLikeTags = foldl' go Nothing + spanLikeTags = L.foldl' go Nothing in case spanLikeTags classes of Just (tag, cs) -> do h <- inlineListToHtml opts ils @@ -1610,7 +1611,7 @@ inlineToHtml opts inline = do Just "audio" -> mediaTag H5.audio "Audio" Just _ -> (H5.embed, []) _ -> imageTag - return $ foldl' (!) tag $ attributes ++ specAttrs + return $ L.foldl' (!) tag $ attributes ++ specAttrs -- note: null title included, as in Markdown.pl (Note contents) -> do notes <- gets stNotes diff --git a/src/Text/Pandoc/Writers/LaTeX/Citation.hs b/src/Text/Pandoc/Writers/LaTeX/Citation.hs index 1c02dafe8..bb7ddcc04 100644 --- a/src/Text/Pandoc/Writers/LaTeX/Citation.hs +++ b/src/Text/Pandoc/Writers/LaTeX/Citation.hs @@ -21,7 +21,7 @@ import qualified Data.Text as T import Text.Pandoc.Options import Text.Pandoc.Class.PandocMonad (PandocMonad) import Text.Pandoc.Definition -import Data.List (foldl') +import qualified Data.List as L import Text.DocLayout (Doc, brackets, empty, (<+>), text, isEmpty, literal, braces) import Text.Pandoc.Walk @@ -73,7 +73,7 @@ citationsToNatbib inlineListToLaTeX (c:cs) citationsToNatbib inlineListToLaTeX cits = do cits' <- mapM convertOne cits - return $ text "\\citetext{" <> foldl' combineTwo empty cits' <> text "}" + return $ text "\\citetext{" <> L.foldl' combineTwo empty cits' <> text "}" where citeCommand' = citeCommand inlineListToLaTeX combineTwo a b | isEmpty a = b @@ -182,7 +182,7 @@ citationsToBiblatex inlineListToLaTeX (c:cs) NormalCitation -> "\\autocites" groups <- mapM (citeArgumentsList inlineListToLaTeX) - (reverse (foldl' grouper [] (c:cs))) + (reverse (L.foldl' grouper [] (c:cs))) return $ text cmd <> mconcat groups diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs index 72ee05c4e..fc32479d2 100644 --- a/src/Text/Pandoc/Writers/OpenDocument.hs +++ b/src/Text/Pandoc/Writers/OpenDocument.hs @@ -19,7 +19,8 @@ import Control.Monad (unless, liftM) import Control.Monad.State.Strict ( StateT(..), modify, gets, lift ) import Data.Char (chr) import Data.Foldable (find) -import Data.List (sortOn, sortBy, foldl') +import Data.List (sortOn, sortBy) +import qualified Data.List as L import qualified Data.Map as Map import Data.Ord (comparing, Down (Down)) import qualified Data.Set as Set @@ -175,7 +176,7 @@ inTextStyle d = do ,("style:family", "text")] $ selfClosingTag "style:text-properties" (sortOn fst . Map.toList - $ foldl' textStyleAttr mempty (Set.toList at))) + $ L.foldl' textStyleAttr mempty (Set.toList at))) return $ inTags False "text:span" [("text:style-name",styleName)] d diff --git a/src/Text/Pandoc/Writers/RST.hs b/src/Text/Pandoc/Writers/RST.hs index 680b3b07c..fb564a245 100644 --- a/src/Text/Pandoc/Writers/RST.hs +++ b/src/Text/Pandoc/Writers/RST.hs @@ -20,7 +20,8 @@ import Data.Char (isSpace, generalCategory, isAscii, isAlphaNum, GeneralCategory( ClosePunctuation, OpenPunctuation, InitialQuote, FinalQuote, DashPunctuation, OtherPunctuation)) -import Data.List (transpose, intersperse, foldl') +import Data.List (transpose, intersperse) +import qualified Data.List as L import qualified Data.List.NonEmpty as NE import Data.Maybe (fromMaybe) import qualified Data.Text as T @@ -674,7 +675,7 @@ flatten outer | null contents = [outer] | otherwise = combineAll contents where contents = dropInlineParent outer - combineAll = foldl' combine [] + combineAll = L.foldl' combine [] combine :: [Inline] -> Inline -> [Inline] combine f i = diff --git a/src/Text/Pandoc/Writers/Shared.hs b/src/Text/Pandoc/Writers/Shared.hs index c95ba06d7..42b33a64b 100644 --- a/src/Text/Pandoc/Writers/Shared.hs +++ b/src/Text/Pandoc/Writers/Shared.hs @@ -63,7 +63,8 @@ import Control.Monad (MonadPlus, mzero) import Data.Either (isRight) import Data.Aeson (ToJSON (..), encode) import Data.Char (chr, ord, isSpace, isLetter, isUpper) -import Data.List (groupBy, intersperse, foldl', transpose) +import Data.List (groupBy, intersperse, transpose) +import qualified Data.List as L import Data.List.NonEmpty (NonEmpty((:|))) import Data.Text.Conversions (FromText(..)) import qualified Data.Map as M @@ -381,7 +382,7 @@ makeDummy c = cellTopBorder = NoLine } addDummies :: [[RenderedCell Text]] -> [[RenderedCell Text]] -addDummies = reverse . foldl' go [] +addDummies = reverse . L.foldl' go [] where go [] cs = [cs] go (prevRow:rs) cs = addDummiesToRow prevRow cs : prevRow : rs @@ -468,7 +469,7 @@ combineBorders t1 t2 = formatHeaderLine :: Show a => LineStyle -> [[RenderedCell a]] -> Doc Text formatHeaderLine lineStyle rows = - literal $ foldl' + literal $ L.foldl' (\t row -> combineBorders t (render Nothing $ formatBorder (const lineStyle) True row)) mempty rows @@ -479,7 +480,7 @@ formatBorder borderStyle alignMarkers cs = then char '|' else char '+' where - (lastBorderStyle, borderParts) = foldl' addBorder (NoLine, mempty) cs + (lastBorderStyle, borderParts) = L.foldl' addBorder (NoLine, mempty) cs addBorder (prevBorderStyle, accum) c = (borderStyle c, accum <> char junctionChar <> toBorderSection c) where junctionChar = case (borderStyle c, prevBorderStyle) of diff --git a/src/Text/Pandoc/Writers/Texinfo.hs b/src/Text/Pandoc/Writers/Texinfo.hs index 755e9130c..30a311a8f 100644 --- a/src/Text/Pandoc/Writers/Texinfo.hs +++ b/src/Text/Pandoc/Writers/Texinfo.hs @@ -17,7 +17,8 @@ import Control.Monad.Except (throwError) import Control.Monad.State.Strict ( StateT, MonadState(get), gets, modify, evalStateT ) import Data.Char (chr, ord, isAlphaNum) -import Data.List (maximumBy, transpose, foldl') +import Data.List (maximumBy, transpose) +import qualified Data.List as L import Data.List.NonEmpty (nonEmpty) import Data.Ord (comparing) import qualified Data.Map as M @@ -347,7 +348,7 @@ tableAnyRowToTexinfo :: PandocMonad m -> [[Block]] -> TI m (Doc Text) tableAnyRowToTexinfo itemtype aligns cols = - (literal itemtype $$) . foldl' (\row item -> row $$ + (literal itemtype $$) . L.foldl' (\row item -> row $$ (if isEmpty row then empty else text " @tab ") <> item) empty <$> zipWithM alignedBlock aligns cols alignedBlock :: PandocMonad m |
