From d2ee5b2b0eb2afb970ab8d4feed84434dc8236e0 Mon Sep 17 00:00:00 2001 From: Veronika Romashkina Date: Wed, 26 Feb 2020 10:49:03 +0000 Subject: Support GHC-8.8 Add MonadFail instances and constraints. --- .gitignore | 3 +++ CHANGELOG.md | 4 ++++ hakyll.cabal | 10 +++++----- lib/Hakyll/Core/Compiler/Internal.hs | 8 +++++++- lib/Hakyll/Core/Metadata.hs | 2 +- lib/Hakyll/Core/Rules/Internal.hs | 2 +- lib/Hakyll/Web/Template/Context.hs | 2 +- lib/Hakyll/Web/Template/List.hs | 8 ++++---- stack.yaml | 12 +++--------- 9 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 49f55c1..eab2fac 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ tags cabal.sandbox.config .cabal-sandbox/ .stack-work +dist +dist-* +.ghc.environment.* # Ignore test builds. tests/Main diff --git a/CHANGELOG.md b/CHANGELOG.md index af21933..3f5bb3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ title: Releases # Releases +## Unreleased + +- Support GHC-8.8. Add `MonadFail` instances and constraints. + ## Hakyll 4.13.0.1 (2019-09-18) - Add missing test files (contribution by Justin Humm) diff --git a/hakyll.cabal b/hakyll.cabal index 927498c..90ba220 100644 --- a/hakyll.cabal +++ b/hakyll.cabal @@ -179,15 +179,15 @@ Library lrucache >= 1.1.1 && < 1.3, mtl >= 1 && < 2.3, network-uri >= 2.6 && < 2.7, - optparse-applicative >= 0.12 && < 0.15, + optparse-applicative >= 0.12 && < 0.16, parsec >= 3.0 && < 3.2, process >= 1.6 && < 1.7, random >= 1.0 && < 1.2, - regex-tdfa >= 1.1 && < 1.3, + regex-tdfa >= 1.1 && < 1.4, resourcet >= 1.1 && < 1.3, scientific >= 0.3.4 && < 0.4, tagsoup >= 0.13.1 && < 0.15, - template-haskell >= 2.14 && < 2.15, + template-haskell >= 2.14 && < 2.16, text >= 0.11 && < 1.3, time >= 1.8 && < 1.10, time-locale-compat >= 0.1 && < 0.2, @@ -231,7 +231,7 @@ Library Other-Modules: Hakyll.Web.Pandoc.Binary Build-Depends: - pandoc >= 2.0.5 && < 2.8, + pandoc >= 2.0.5 && < 2.10, pandoc-citeproc >= 0.14 && < 0.17 Cpp-options: -DUSE_PANDOC @@ -326,4 +326,4 @@ Executable hakyll-website base >= 4 && < 5, directory >= 1.0 && < 1.4, filepath >= 1.0 && < 1.5, - pandoc >= 2.0.5 && < 2.8 + pandoc >= 2.0.5 && < 2.10 diff --git a/lib/Hakyll/Core/Compiler/Internal.hs b/lib/Hakyll/Core/Compiler/Internal.hs index 762630c..3b62e2d 100644 --- a/lib/Hakyll/Core/Compiler/Internal.hs +++ b/lib/Hakyll/Core/Compiler/Internal.hs @@ -40,6 +40,7 @@ module Hakyll.Core.Compiler.Internal import Control.Applicative (Alternative (..)) import Control.Exception (SomeException, handle) import Control.Monad (forM_) +import qualified Control.Monad.Fail as Fail import Control.Monad.Except (MonadError (..)) import Data.List.NonEmpty (NonEmpty (..)) import qualified Data.List.NonEmpty as NonEmpty @@ -183,9 +184,14 @@ instance Monad Compiler where CompilerError e -> return $ CompilerError e {-# INLINE (>>=) #-} - fail = compilerThrow . return +#if !(MIN_VERSION_base(4,13,0)) + fail = Fail.fail {-# INLINE fail #-} +#endif +instance Fail.MonadFail Compiler where + fail = compilerThrow . return + {-# INLINE fail #-} -------------------------------------------------------------------------------- instance Applicative Compiler where diff --git a/lib/Hakyll/Core/Metadata.hs b/lib/Hakyll/Core/Metadata.hs index 1cf536e..9d99857 100644 --- a/lib/Hakyll/Core/Metadata.hs +++ b/lib/Hakyll/Core/Metadata.hs @@ -66,7 +66,7 @@ getMetadataField identifier key = do -------------------------------------------------------------------------------- -- | Version of 'getMetadataField' which throws an error if the field does not -- exist. -getMetadataField' :: MonadMetadata m => Identifier -> String -> m String +getMetadataField' :: (MonadFail m, MonadMetadata m) => Identifier -> String -> m String getMetadataField' identifier key = do field <- getMetadataField identifier key case field of diff --git a/lib/Hakyll/Core/Rules/Internal.hs b/lib/Hakyll/Core/Rules/Internal.hs index 647af74..2617798 100644 --- a/lib/Hakyll/Core/Rules/Internal.hs +++ b/lib/Hakyll/Core/Rules/Internal.hs @@ -88,7 +88,7 @@ emptyRulesState = RulesState Nothing Nothing -- | The monad used to compose rules newtype Rules a = Rules { unRules :: RWST RulesRead RuleSet RulesState IO a - } deriving (Monad, Functor, Applicative) + } deriving (Monad, MonadFail, Functor, Applicative) -------------------------------------------------------------------------------- diff --git a/lib/Hakyll/Web/Template/Context.hs b/lib/Hakyll/Web/Template/Context.hs index 8627d5b..a5049c2 100644 --- a/lib/Hakyll/Web/Template/Context.hs +++ b/lib/Hakyll/Web/Template/Context.hs @@ -365,7 +365,7 @@ dateFieldWith locale key format = field key $ \i -> do -- | Parser to try to extract and parse the time from the @published@ -- field or from the filename. See 'dateField' for more information. -- Exported for user convenience. -getItemUTC :: MonadMetadata m +getItemUTC :: (MonadMetadata m, MonadFail m) => TimeLocale -- ^ Output time locale -> Identifier -- ^ Input page -> m UTCTime -- ^ Parsed UTCTime diff --git a/lib/Hakyll/Web/Template/List.hs b/lib/Hakyll/Web/Template/List.hs index 4d769fc..db3fff1 100644 --- a/lib/Hakyll/Web/Template/List.hs +++ b/lib/Hakyll/Web/Template/List.hs @@ -60,7 +60,7 @@ applyJoinTemplateList delimiter tpl context items = do -------------------------------------------------------------------------------- -- | Sort pages chronologically. Uses the same method as 'dateField' for -- extracting the date. -chronological :: MonadMetadata m => [Item a] -> m [Item a] +chronological :: (MonadMetadata m, MonadFail m) => [Item a] -> m [Item a] chronological = sortByM $ getItemUTC defaultTimeLocale . itemIdentifier where @@ -71,14 +71,14 @@ chronological = -------------------------------------------------------------------------------- -- | The reverse of 'chronological' -recentFirst :: MonadMetadata m => [Item a] -> m [Item a] +recentFirst :: (MonadMetadata m, MonadFail m) => [Item a] -> m [Item a] recentFirst = liftM reverse . chronological -------------------------------------------------------------------------------- -- | Version of 'chronological' which doesn't need the actual items. sortChronological - :: MonadMetadata m => [Identifier] -> m [Identifier] + :: (MonadMetadata m, MonadFail m) => [Identifier] -> m [Identifier] sortChronological ids = liftM (map itemIdentifier) $ chronological [Item i () | i <- ids] @@ -86,6 +86,6 @@ sortChronological ids = -------------------------------------------------------------------------------- -- | Version of 'recentFirst' which doesn't need the actual items. sortRecentFirst - :: MonadMetadata m => [Identifier] -> m [Identifier] + :: (MonadMetadata m, MonadFail m) => [Identifier] -> m [Identifier] sortRecentFirst ids = liftM (map itemIdentifier) $ recentFirst [Item i () | i <- ids] diff --git a/stack.yaml b/stack.yaml index f8a83a4..36891d2 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-13.29 +resolver: lts-15.0 save-hackage-creds: false flags: @@ -23,11 +23,5 @@ build: haddock-deps: false extra-deps: -- 'cmark-gfm-0.2.0' -- 'hslua-module-system-0.2.1' -- 'ipynb-0.1' -- 'lrucache-1.2.0.1' -- 'pandoc-2.7.3' -- 'pandoc-citeproc-0.16.2' -- 'skylighting-0.8.2' -- 'skylighting-core-0.8.2' +- 'http2-1.6.5' +- 'warp-3.2.28' -- cgit v1.2.3