Restored Text.Pandoc.Compat.Monoid.
Don't use custom prelude for latest ghc. This is a better approach to making 'stack ghci' and 'cabal repl' work. Instead of using NoImplicitPrelude, we only use the custom prelude for older ghc versions. The custom prelude presents a uniform API that matches the current base version's prelude. So, when developing (presumably with latest ghc), we don't use a custom prelude at all and hence have no trouble with ghci. The custom prelude no longer exports (<>): we now want to match the base 4.8 prelude behavior.
This commit is contained in:
parent
23b693c029
commit
c1e474f005
22 changed files with 64 additions and 30 deletions
35
pandoc.cabal
35
pandoc.cabal
|
@ -310,7 +310,10 @@ Library
|
||||||
ScopedTypeVariables, GeneralizedNewtypeDeriving,
|
ScopedTypeVariables, GeneralizedNewtypeDeriving,
|
||||||
RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,
|
RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,
|
||||||
FlexibleInstances
|
FlexibleInstances
|
||||||
Hs-Source-Dirs: src, prelude
|
Hs-Source-Dirs: src
|
||||||
|
if impl(ghc < 7.10)
|
||||||
|
Hs-Source-Dirs: prelude
|
||||||
|
Other-Modules: Prelude
|
||||||
|
|
||||||
Exposed-Modules: Text.Pandoc,
|
Exposed-Modules: Text.Pandoc,
|
||||||
Text.Pandoc.Options,
|
Text.Pandoc.Options,
|
||||||
|
@ -396,9 +399,9 @@ Library
|
||||||
Text.Pandoc.Compat.Time,
|
Text.Pandoc.Compat.Time,
|
||||||
Text.Pandoc.Compat.Except,
|
Text.Pandoc.Compat.Except,
|
||||||
Text.Pandoc.Compat.TagSoupEntity,
|
Text.Pandoc.Compat.TagSoupEntity,
|
||||||
Text.Pandoc.Compat.Directory
|
Text.Pandoc.Compat.Directory,
|
||||||
|
Text.Pandoc.Compat.Monoid,
|
||||||
Paths_pandoc
|
Paths_pandoc
|
||||||
Prelude
|
|
||||||
|
|
||||||
Buildable: True
|
Buildable: True
|
||||||
|
|
||||||
|
@ -429,15 +432,20 @@ Executable pandoc
|
||||||
ScopedTypeVariables, GeneralizedNewtypeDeriving,
|
ScopedTypeVariables, GeneralizedNewtypeDeriving,
|
||||||
RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,
|
RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,
|
||||||
FlexibleInstances
|
FlexibleInstances
|
||||||
Hs-Source-Dirs: ., prelude
|
Hs-Source-Dirs: .
|
||||||
|
if impl(ghc < 7.10)
|
||||||
|
Hs-Source-Dirs: prelude
|
||||||
|
Other-Modules: Prelude
|
||||||
Main-Is: pandoc.hs
|
Main-Is: pandoc.hs
|
||||||
Buildable: True
|
Buildable: True
|
||||||
Other-Modules: Prelude
|
Other-Modules: Paths_pandoc
|
||||||
Paths_pandoc
|
|
||||||
|
|
||||||
Executable trypandoc
|
Executable trypandoc
|
||||||
Main-Is: trypandoc.hs
|
Main-Is: trypandoc.hs
|
||||||
Hs-Source-Dirs: trypandoc, prelude
|
Hs-Source-Dirs: trypandoc
|
||||||
|
if impl(ghc < 7.10)
|
||||||
|
Hs-Source-Dirs: prelude
|
||||||
|
Other-Modules: Prelude
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
if flag(trypandoc)
|
if flag(trypandoc)
|
||||||
Build-Depends: base, aeson, pandoc, highlighting-kate,
|
Build-Depends: base, aeson, pandoc, highlighting-kate,
|
||||||
|
@ -445,12 +453,14 @@ Executable trypandoc
|
||||||
Buildable: True
|
Buildable: True
|
||||||
else
|
else
|
||||||
Buildable: False
|
Buildable: False
|
||||||
Other-Modules: Prelude
|
|
||||||
|
|
||||||
Test-Suite test-pandoc
|
Test-Suite test-pandoc
|
||||||
Type: exitcode-stdio-1.0
|
Type: exitcode-stdio-1.0
|
||||||
Main-Is: test-pandoc.hs
|
Main-Is: test-pandoc.hs
|
||||||
Hs-Source-Dirs: tests, prelude
|
Hs-Source-Dirs: tests
|
||||||
|
if impl(ghc < 7.10)
|
||||||
|
Hs-Source-Dirs: prelude
|
||||||
|
Other-Modules: Prelude
|
||||||
Build-Depends: base >= 4.2 && < 5,
|
Build-Depends: base >= 4.2 && < 5,
|
||||||
syb >= 0.1 && < 0.7,
|
syb >= 0.1 && < 0.7,
|
||||||
pandoc,
|
pandoc,
|
||||||
|
@ -495,18 +505,19 @@ Test-Suite test-pandoc
|
||||||
Tests.Writers.LaTeX
|
Tests.Writers.LaTeX
|
||||||
Tests.Writers.Docx
|
Tests.Writers.Docx
|
||||||
Tests.Writers.RST
|
Tests.Writers.RST
|
||||||
Prelude
|
|
||||||
Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind -threaded
|
Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind -threaded
|
||||||
Default-Language: Haskell98
|
Default-Language: Haskell98
|
||||||
|
|
||||||
benchmark benchmark-pandoc
|
benchmark benchmark-pandoc
|
||||||
Type: exitcode-stdio-1.0
|
Type: exitcode-stdio-1.0
|
||||||
Main-Is: benchmark-pandoc.hs
|
Main-Is: benchmark-pandoc.hs
|
||||||
Hs-Source-Dirs: benchmark, prelude
|
Hs-Source-Dirs: benchmark
|
||||||
|
if impl(ghc < 7.10)
|
||||||
|
Hs-Source-Dirs: prelude
|
||||||
|
Other-Modules: Prelude
|
||||||
Build-Depends: pandoc,
|
Build-Depends: pandoc,
|
||||||
base >= 4.2 && < 5,
|
base >= 4.2 && < 5,
|
||||||
syb >= 0.1 && < 0.7,
|
syb >= 0.1 && < 0.7,
|
||||||
criterion >= 1.0 && < 1.2
|
criterion >= 1.0 && < 1.2
|
||||||
Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind
|
Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind
|
||||||
Default-Language: Haskell98
|
Default-Language: Haskell98
|
||||||
Other-Modules: Prelude
|
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
{-# LANGUAGE PackageImports #-}
|
{-# LANGUAGE PackageImports #-}
|
||||||
{-# LANGUAGE CPP #-}
|
{-# LANGUAGE CPP #-}
|
||||||
|
|
||||||
|
-- This custom Prelude emulates the API of the prelude
|
||||||
|
-- with base 4.8.
|
||||||
|
|
||||||
module Prelude
|
module Prelude
|
||||||
(
|
(
|
||||||
module P
|
module P
|
||||||
, Monoid(..)
|
|
||||||
, Applicative(..)
|
|
||||||
#if MIN_VERSION_base(4,8,0)
|
#if MIN_VERSION_base(4,8,0)
|
||||||
#else
|
#else
|
||||||
|
, Monoid(..)
|
||||||
|
, Applicative(..)
|
||||||
, (<$>)
|
, (<$>)
|
||||||
, (<$)
|
, (<$)
|
||||||
#endif
|
#endif
|
||||||
, (<>)
|
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
#if MIN_VERSION_base(4,8,0)
|
#if MIN_VERSION_base(4,8,0)
|
||||||
import "base" Prelude as P
|
import "base" Prelude as P
|
||||||
import Data.Monoid ((<>))
|
|
||||||
#elif MIN_VERSION_base(4,6,0)
|
#elif MIN_VERSION_base(4,6,0)
|
||||||
import "base" Prelude as P
|
import "base" Prelude as P
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
|
@ -27,13 +28,3 @@ import "base" Prelude as P hiding (catch)
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Data.Monoid
|
import Data.Monoid
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MIN_VERSION_base(4,5,0)
|
|
||||||
#else
|
|
||||||
infixr 6 <>
|
|
||||||
|
|
||||||
-- | An infix synonym for 'mappend'.
|
|
||||||
(<>) :: Monoid m => m -> m -> m
|
|
||||||
(<>) = mappend
|
|
||||||
{-# INLINE (<>) #-}
|
|
||||||
#endif
|
|
||||||
|
|
17
src/Text/Pandoc/Compat/Monoid.hs
Normal file
17
src/Text/Pandoc/Compat/Monoid.hs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{-# LANGUAGE CPP #-}
|
||||||
|
module Text.Pandoc.Compat.Monoid ( (<>) )
|
||||||
|
where
|
||||||
|
|
||||||
|
#if MIN_VERSION_base(4,5,0)
|
||||||
|
import Data.Monoid ((<>))
|
||||||
|
|
||||||
|
#else
|
||||||
|
import Data.Monoid
|
||||||
|
|
||||||
|
infixr 6 <>
|
||||||
|
|
||||||
|
--- | An infix synonym for 'mappend'.
|
||||||
|
(<>) :: Monoid m => m -> m -> m
|
||||||
|
(<>) = mappend
|
||||||
|
{-# INLINE (<>) #-}
|
||||||
|
#endif
|
|
@ -34,6 +34,7 @@ import Data.ByteString.Lazy (ByteString)
|
||||||
import qualified Data.ByteString.Lazy as B
|
import qualified Data.ByteString.Lazy as B
|
||||||
import qualified Data.ByteString.Lazy.Char8 as BC
|
import qualified Data.ByteString.Lazy.Char8 as BC
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import System.Exit (ExitCode (..))
|
import System.Exit (ExitCode (..))
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.IO (stderr, stdout)
|
import System.IO (stderr, stdout)
|
||||||
|
|
|
@ -185,6 +185,7 @@ import Text.TeXMath.Readers.TeX.Macros (applyMacros, Macro,
|
||||||
parseMacroDefinitions)
|
parseMacroDefinitions)
|
||||||
import Text.Pandoc.Compat.TagSoupEntity ( lookupEntity )
|
import Text.Pandoc.Compat.TagSoupEntity ( lookupEntity )
|
||||||
import Text.Pandoc.Asciify (toAsciiChar)
|
import Text.Pandoc.Asciify (toAsciiChar)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
|
|
|
@ -80,6 +80,7 @@ import Data.List (intercalate)
|
||||||
import Data.String
|
import Data.String
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Data.Char (isSpace)
|
import Data.Char (isSpace)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
|
|
||||||
data RenderState a = RenderState{
|
data RenderState a = RenderState{
|
||||||
output :: [a] -- ^ In reverse order
|
output :: [a] -- ^ In reverse order
|
||||||
|
|
|
@ -16,6 +16,7 @@ import Text.Pandoc.Options ( ReaderOptions(..), readerTrace)
|
||||||
import Text.Pandoc.Shared (escapeURI, collapseFilePath, addMetaField)
|
import Text.Pandoc.Shared (escapeURI, collapseFilePath, addMetaField)
|
||||||
import Text.Pandoc.MediaBag (MediaBag, insertMedia)
|
import Text.Pandoc.MediaBag (MediaBag, insertMedia)
|
||||||
import Text.Pandoc.Compat.Except (MonadError, throwError, runExcept, Except)
|
import Text.Pandoc.Compat.Except (MonadError, throwError, runExcept, Except)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.MIME (MimeType)
|
import Text.Pandoc.MIME (MimeType)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Codec.Archive.Zip ( Archive (..), toArchive, fromEntry
|
import Codec.Archive.Zip ( Archive (..), toArchive, fromEntry
|
||||||
|
|
|
@ -66,7 +66,7 @@ import Control.Monad.Reader (Reader,ask, asks, local, runReader)
|
||||||
import Network.URI (isURI)
|
import Network.URI (isURI)
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import Text.Pandoc.CSS (foldOrElse, pickStyleAttrProps)
|
import Text.Pandoc.CSS (foldOrElse, pickStyleAttrProps)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Parsec.Error
|
import Text.Parsec.Error
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ module Text.Pandoc.Readers.Haddock
|
||||||
|
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines)
|
import Text.Pandoc.Builder (Blocks, Inlines)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Shared (trim, splitBy)
|
import Text.Pandoc.Shared (trim, splitBy)
|
||||||
import Data.List (intersperse, stripPrefix)
|
import Data.List (intersperse, stripPrefix)
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
|
|
|
@ -62,6 +62,7 @@ import Text.HTML.TagSoup.Match (tagOpen)
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
import Debug.Trace (trace)
|
import Debug.Trace (trace)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
|
|
||||||
type MarkdownParser = Parser [Char] ParserState
|
type MarkdownParser = Parser [Char] ParserState
|
||||||
|
|
|
@ -39,6 +39,7 @@ module Text.Pandoc.Readers.MediaWiki ( readMediaWiki ) where
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
|
import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Readers.HTML ( htmlTag, isBlockTag, isCommentTag )
|
import Text.Pandoc.Readers.HTML ( htmlTag, isBlockTag, isCommentTag )
|
||||||
import Text.Pandoc.XML ( fromEntities )
|
import Text.Pandoc.XML ( fromEntities )
|
||||||
|
|
|
@ -46,6 +46,7 @@ import Control.Monad
|
||||||
|
|
||||||
import Data.Foldable
|
import Data.Foldable
|
||||||
|
|
||||||
|
import Text.Pandoc.Compat.Monoid
|
||||||
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ import qualified Data.Foldable as F
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Utils
|
import Text.Pandoc.Readers.Odt.Generic.Utils
|
||||||
|
import Text.Pandoc.Compat.Monoid
|
||||||
|
|
||||||
and2 :: (Arrow a) => a b c -> a b c' -> a b (c,c')
|
and2 :: (Arrow a) => a b c -> a b c' -> a b (c,c')
|
||||||
and2 = (&&&)
|
and2 = (&&&)
|
||||||
|
|
|
@ -41,7 +41,7 @@ module Text.Pandoc.Readers.Odt.Generic.Fallible where
|
||||||
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import qualified Data.Foldable as F
|
import qualified Data.Foldable as F
|
||||||
|
|
||||||
-- | Default for now. Will probably become a class at some point.
|
-- | Default for now. Will probably become a class at some point.
|
||||||
|
|
|
@ -34,6 +34,7 @@ import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Builder ( Inlines, Blocks, HasMeta(..),
|
import Text.Pandoc.Builder ( Inlines, Blocks, HasMeta(..),
|
||||||
trimInlines )
|
trimInlines )
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import qualified Text.Pandoc.Parsing as P
|
import qualified Text.Pandoc.Parsing as P
|
||||||
import Text.Pandoc.Parsing hiding ( F, unF, askF, asksF, runF
|
import Text.Pandoc.Parsing hiding ( F, unF, askF, asksF, runF
|
||||||
|
|
|
@ -48,7 +48,7 @@ import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Data.Sequence (viewr, ViewR(..))
|
import Data.Sequence (viewr, ViewR(..))
|
||||||
import Data.Char (toLower, isHexDigit, isSpace)
|
import Data.Char (toLower, isHexDigit, isSpace)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
|
|
||||||
-- | Parse reStructuredText string and return Pandoc document.
|
-- | Parse reStructuredText string and return Pandoc document.
|
||||||
|
|
|
@ -64,6 +64,7 @@ import Text.HTML.TagSoup.Match
|
||||||
import Data.List ( intercalate )
|
import Data.List ( intercalate )
|
||||||
import Data.Char ( digitToInt, isUpper)
|
import Data.Char ( digitToInt, isUpper)
|
||||||
import Control.Monad ( guard, liftM, when )
|
import Control.Monad ( guard, liftM, when )
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Printf
|
import Text.Printf
|
||||||
import Debug.Trace (trace)
|
import Debug.Trace (trace)
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
|
|
|
@ -34,6 +34,7 @@ module Text.Pandoc.Readers.Txt2Tags ( readTxt2Tags
|
||||||
|
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Builder ( Inlines, Blocks, trimInlines )
|
import Text.Pandoc.Builder ( Inlines, Blocks, trimInlines )
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Shared (escapeURI,compactify', compactify'DL)
|
import Text.Pandoc.Shared (escapeURI,compactify', compactify'DL)
|
||||||
|
|
|
@ -129,6 +129,7 @@ import System.IO (stderr)
|
||||||
import System.IO.Temp
|
import System.IO.Temp
|
||||||
import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
|
import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
|
||||||
renderOptions)
|
renderOptions)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Data.ByteString.Char8 as B8
|
import qualified Data.ByteString.Char8 as B8
|
||||||
import Data.ByteString.Base64 (decodeLenient)
|
import Data.ByteString.Base64 (decodeLenient)
|
||||||
|
|
|
@ -98,6 +98,7 @@ import Control.Monad (guard, when)
|
||||||
import Data.Aeson (ToJSON(..), Value(..))
|
import Data.Aeson (ToJSON(..), Value(..))
|
||||||
import qualified Text.Parsec as P
|
import qualified Text.Parsec as P
|
||||||
import Text.Parsec.Text (Parser)
|
import Text.Parsec.Text (Parser)
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.Text.Encoding (encodeUtf8)
|
import Data.Text.Encoding (encodeUtf8)
|
||||||
|
|
|
@ -60,6 +60,7 @@ import Data.Unique (hashUnique, newUnique)
|
||||||
import System.Random (randomRIO)
|
import System.Random (randomRIO)
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
import qualified Control.Exception as E
|
import qualified Control.Exception as E
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.MIME (MimeType, getMimeType, getMimeTypeDef,
|
import Text.Pandoc.MIME (MimeType, getMimeType, getMimeTypeDef,
|
||||||
extensionFromMimeType)
|
extensionFromMimeType)
|
||||||
import Control.Applicative ((<|>))
|
import Control.Applicative ((<|>))
|
||||||
|
|
|
@ -31,6 +31,7 @@ Conversion of 'Pandoc' documents to HTML.
|
||||||
-}
|
-}
|
||||||
module Text.Pandoc.Writers.HTML ( writeHtml , writeHtmlString ) where
|
module Text.Pandoc.Writers.HTML ( writeHtml , writeHtmlString ) where
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Compat.Monoid ((<>))
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
import Text.Pandoc.Writers.Shared
|
import Text.Pandoc.Writers.Shared
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue