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:
John MacFarlane 2015-11-09 11:15:11 -08:00
parent 23b693c029
commit c1e474f005
22 changed files with 64 additions and 30 deletions

View file

@ -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

View file

@ -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

View 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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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 )

View file

@ -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

View file

@ -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 = (&&&)

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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 ((<|>))

View file

@ -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