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,
RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,
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,
Text.Pandoc.Options,
@ -396,9 +399,9 @@ Library
Text.Pandoc.Compat.Time,
Text.Pandoc.Compat.Except,
Text.Pandoc.Compat.TagSoupEntity,
Text.Pandoc.Compat.Directory
Text.Pandoc.Compat.Directory,
Text.Pandoc.Compat.Monoid,
Paths_pandoc
Prelude
Buildable: True
@ -429,15 +432,20 @@ Executable pandoc
ScopedTypeVariables, GeneralizedNewtypeDeriving,
RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,
FlexibleInstances
Hs-Source-Dirs: ., prelude
Hs-Source-Dirs: .
if impl(ghc < 7.10)
Hs-Source-Dirs: prelude
Other-Modules: Prelude
Main-Is: pandoc.hs
Buildable: True
Other-Modules: Prelude
Paths_pandoc
Other-Modules: Paths_pandoc
Executable trypandoc
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
if flag(trypandoc)
Build-Depends: base, aeson, pandoc, highlighting-kate,
@ -445,12 +453,14 @@ Executable trypandoc
Buildable: True
else
Buildable: False
Other-Modules: Prelude
Test-Suite test-pandoc
Type: exitcode-stdio-1.0
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,
syb >= 0.1 && < 0.7,
pandoc,
@ -495,18 +505,19 @@ Test-Suite test-pandoc
Tests.Writers.LaTeX
Tests.Writers.Docx
Tests.Writers.RST
Prelude
Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind -threaded
Default-Language: Haskell98
benchmark benchmark-pandoc
Type: exitcode-stdio-1.0
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,
base >= 4.2 && < 5,
syb >= 0.1 && < 0.7,
criterion >= 1.0 && < 1.2
Ghc-Options: -rtsopts -Wall -fno-warn-unused-do-bind
Default-Language: Haskell98
Other-Modules: Prelude

View file

@ -1,23 +1,24 @@
{-# LANGUAGE PackageImports #-}
{-# LANGUAGE CPP #-}
-- This custom Prelude emulates the API of the prelude
-- with base 4.8.
module Prelude
(
module P
, Monoid(..)
, Applicative(..)
#if MIN_VERSION_base(4,8,0)
#else
, Monoid(..)
, Applicative(..)
, (<$>)
, (<$)
#endif
, (<>)
)
where
#if MIN_VERSION_base(4,8,0)
import "base" Prelude as P
import Data.Monoid ((<>))
#elif MIN_VERSION_base(4,6,0)
import "base" Prelude as P
import Control.Applicative
@ -27,13 +28,3 @@ import "base" Prelude as P hiding (catch)
import Control.Applicative
import Data.Monoid
#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.Char8 as BC
import qualified Data.ByteString as BS
import Text.Pandoc.Compat.Monoid ((<>))
import System.Exit (ExitCode (..))
import System.FilePath
import System.IO (stderr, stdout)

View file

@ -185,6 +185,7 @@ import Text.TeXMath.Readers.TeX.Macros (applyMacros, Macro,
parseMacroDefinitions)
import Text.Pandoc.Compat.TagSoupEntity ( lookupEntity )
import Text.Pandoc.Asciify (toAsciiChar)
import Text.Pandoc.Compat.Monoid ((<>))
import Data.Default
import qualified Data.Set as Set
import Control.Monad.Reader

View file

@ -80,6 +80,7 @@ import Data.List (intercalate)
import Data.String
import Control.Monad.State
import Data.Char (isSpace)
import Text.Pandoc.Compat.Monoid ((<>))
data RenderState a = RenderState{
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.MediaBag (MediaBag, insertMedia)
import Text.Pandoc.Compat.Except (MonadError, throwError, runExcept, Except)
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.MIME (MimeType)
import qualified Text.Pandoc.Builder as B
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 Text.Pandoc.Error
import Text.Pandoc.CSS (foldOrElse, pickStyleAttrProps)
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Parsec.Error

View file

@ -16,6 +16,7 @@ module Text.Pandoc.Readers.Haddock
import Text.Pandoc.Builder (Blocks, Inlines)
import qualified Text.Pandoc.Builder as B
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Shared (trim, splitBy)
import Data.List (intersperse, stripPrefix)
import Data.Maybe (fromMaybe)

View file

@ -62,6 +62,7 @@ import Text.HTML.TagSoup.Match (tagOpen)
import qualified Data.Set as Set
import Text.Printf (printf)
import Debug.Trace (trace)
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Error
type MarkdownParser = Parser [Char] ParserState

View file

@ -39,6 +39,7 @@ module Text.Pandoc.Readers.MediaWiki ( readMediaWiki ) where
import Text.Pandoc.Definition
import qualified Text.Pandoc.Builder as B
import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Options
import Text.Pandoc.Readers.HTML ( htmlTag, isBlockTag, isCommentTag )
import Text.Pandoc.XML ( fromEntities )

View file

@ -46,6 +46,7 @@ import Control.Monad
import Data.Foldable
import Text.Pandoc.Compat.Monoid
import Text.Pandoc.Readers.Odt.Arrows.Utils
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.Utils
import Text.Pandoc.Compat.Monoid
and2 :: (Arrow a) => a b c -> a b c' -> a b (c,c')
and2 = (&&&)

View file

@ -41,7 +41,7 @@ module Text.Pandoc.Readers.Odt.Generic.Fallible where
import Control.Applicative
import Control.Monad
import Text.Pandoc.Compat.Monoid ((<>))
import qualified Data.Foldable as F
-- | 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(..),
trimInlines )
import Text.Pandoc.Definition
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Options
import qualified Text.Pandoc.Parsing as P
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 Data.Sequence (viewr, ViewR(..))
import Data.Char (toLower, isHexDigit, isSpace)
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Error
-- | Parse reStructuredText string and return Pandoc document.

View file

@ -64,6 +64,7 @@ import Text.HTML.TagSoup.Match
import Data.List ( intercalate )
import Data.Char ( digitToInt, isUpper)
import Control.Monad ( guard, liftM, when )
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Printf
import Debug.Trace (trace)
import Text.Pandoc.Error

View file

@ -34,6 +34,7 @@ module Text.Pandoc.Readers.Txt2Tags ( readTxt2Tags
import qualified Text.Pandoc.Builder as B
import Text.Pandoc.Builder ( Inlines, Blocks, trimInlines )
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Definition
import Text.Pandoc.Options
import Text.Pandoc.Shared (escapeURI,compactify', compactify'DL)

View file

@ -129,6 +129,7 @@ import System.IO (stderr)
import System.IO.Temp
import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
renderOptions)
import Text.Pandoc.Compat.Monoid ((<>))
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as B8
import Data.ByteString.Base64 (decodeLenient)

View file

@ -98,6 +98,7 @@ import Control.Monad (guard, when)
import Data.Aeson (ToJSON(..), Value(..))
import qualified Text.Parsec as P
import Text.Parsec.Text (Parser)
import Text.Pandoc.Compat.Monoid ((<>))
import qualified Data.Text as T
import Data.Text (Text)
import Data.Text.Encoding (encodeUtf8)

View file

@ -60,6 +60,7 @@ import Data.Unique (hashUnique, newUnique)
import System.Random (randomRIO)
import Text.Printf (printf)
import qualified Control.Exception as E
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.MIME (MimeType, getMimeType, getMimeTypeDef,
extensionFromMimeType)
import Control.Applicative ((<|>))

View file

@ -31,6 +31,7 @@ Conversion of 'Pandoc' documents to HTML.
-}
module Text.Pandoc.Writers.HTML ( writeHtml , writeHtmlString ) where
import Text.Pandoc.Definition
import Text.Pandoc.Compat.Monoid ((<>))
import Text.Pandoc.Shared
import Text.Pandoc.Writers.Shared
import Text.Pandoc.Options