@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE ExplicitForAll #-}
23{-# LANGUAGE FlexibleContexts #-}
34{-# LANGUAGE FlexibleInstances #-}
@@ -202,7 +203,11 @@ import Data.Default
202203import Data.List (intercalate, isSuffixOf, transpose)
203204import qualified Data.Map as M
204205import Data.Maybe (mapMaybe, fromMaybe)
206+#if MIN_VERSION_base(4,9,0)
207+import Data.Semigroup (Semigroup, (<>))
208+#else
205209import Data.Monoid ((<>))
210+#endif
206211import qualified Data.Set as Set
207212import Data.Text (Text)
208213import Text.HTML.TagSoup.Entity (lookupEntity)
@@ -250,10 +255,17 @@ returnF = return . return
250255trimInlinesF :: Future s Inlines -> Future s Inlines
251256trimInlinesF = liftM trimInlines
252257
258+#if MIN_VERSION_base(4,9,0)
259+instance Semigroup a => Semigroup (Future s a) where
260+ (<>) = liftM2 (<>)
261+instance (Semigroup a, Monoid a) => Monoid (Future s a) where
262+ mempty = return mempty
263+ mappend = (<>)
264+#else
253265instance Monoid a => Monoid (Future s a) where
254266 mempty = return mempty
255267 mappend = liftM2 mappend
256− mconcat = liftM mconcat . sequence
268+#endif
257269
258270-- | Parse characters while a predicate is true.
259271takeWhileP :: Monad m
@@ -1437,7 +1449,7 @@ token pp pos match = tokenPrim pp (\_ t _ -> pos t) match
14371449
14381450infixr 5 <+?>
14391451(<+?>) :: (Monoid a) => ParserT s st m a -> ParserT s st m a -> ParserT s st m a
1440−a <+?> b = a >>= flip fmap (try b <|> return mempty) . (<>)
1452+a <+?> b = a >>= flip fmap (try b <|> return mempty) . mappend
14411453
14421454extractIdClass :: Attr -> Attr
14431455extractIdClass (ident, cls, kvs) = (ident', cls', kvs')