From d525cb59dde3458c6ac36a1f1ca9c20a4e7d6b4c Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 23 Sep 2021 17:53:35 -0400 Subject: [PATCH 1/2] Make it build with GHC 8.6 through 8.10 GHC 8.6 and 8.8 don't have unlifted newtypes, so Option is a type synonym for those versions. --- parsnip/parsnip.cabal | 2 +- parsnip/src/Text/Parsnip/Internal/Parser.hs | 23 +++++++++++++++++++- parsnip/src/Text/Parsnip/Internal/Private.hs | 1 - 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/parsnip/parsnip.cabal b/parsnip/parsnip.cabal index 46bc78dd..4d638f74 100644 --- a/parsnip/parsnip.cabal +++ b/parsnip/parsnip.cabal @@ -47,7 +47,7 @@ common base c-sources: cbits/parsnip.c build-depends: attoparsec, - base >= 4.15 && < 5, + base >= 4.12 && < 5, bytestring, containers, data-default, diff --git a/parsnip/src/Text/Parsnip/Internal/Parser.hs b/parsnip/src/Text/Parsnip/Internal/Parser.hs index a13b6bb2..cdd7698e 100644 --- a/parsnip/src/Text/Parsnip/Internal/Parser.hs +++ b/parsnip/src/Text/Parsnip/Internal/Parser.hs @@ -22,14 +22,20 @@ {-# language UnboxedTuples #-} {-# language MagicHash #-} {-# language PatternSynonyms #-} + +#if __GLASGOW_HASKELL__ >= 810 {-# language UnliftedNewtypes #-} +#endif + {-# options_ghc -O2 #-} module Text.Parsnip.Internal.Parser ( -- * Parser Parser(..) -, Option(Option#,Some,None) +, Option +, pattern Some +, pattern None , mapOption, setOption , Result, pattern OK, pattern Fail , mapResult, setResult @@ -67,6 +73,9 @@ import Text.Parsnip.Internal.Private -------------------------------------------------------------------------------- -- | Unlifted 'Maybe' + +#if __GLASGOW_HASKELL__ >= 810 + newtype Option a = Option# (# a | (##) #) pattern Some :: a -> Option a @@ -75,6 +84,18 @@ pattern Some a = Option# (# a | #) pattern None :: Option a pattern None = Option# (# | (##) #) +#else + +type Option a = (# a | (##) #) + +pattern Some :: a -> Option a +pattern Some a = (# a | #) + +pattern None :: Option a +pattern None = (# | (##) #) + +#endif + {-# complete Some, None #-} -- these don't work outside this module =( mapOption :: (a -> b) -> Option a -> Option b diff --git a/parsnip/src/Text/Parsnip/Internal/Private.hs b/parsnip/src/Text/Parsnip/Internal/Private.hs index f37b899a..be1673bd 100644 --- a/parsnip/src/Text/Parsnip/Internal/Private.hs +++ b/parsnip/src/Text/Parsnip/Internal/Private.hs @@ -4,7 +4,6 @@ {-# language BangPatterns #-} {-# language ViewPatterns #-} {-# language UnliftedFFITypes #-} -{-# language UnliftedNewtypes #-} -- | the proverbial junk drawer module Text.Parsnip.Internal.Private From 2010f723c05459a527011526eb31e2fc72767384 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 23 Sep 2021 18:20:44 -0400 Subject: [PATCH 2/2] Restore original export bundling for GHC 8.10+ --- parsnip/src/Text/Parsnip/Internal/Parser.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/parsnip/src/Text/Parsnip/Internal/Parser.hs b/parsnip/src/Text/Parsnip/Internal/Parser.hs index cdd7698e..36a05681 100644 --- a/parsnip/src/Text/Parsnip/Internal/Parser.hs +++ b/parsnip/src/Text/Parsnip/Internal/Parser.hs @@ -33,9 +33,13 @@ module Text.Parsnip.Internal.Parser ( -- * Parser Parser(..) +#if __GLASGOW_HASKELL__ >= 810 +, Option(Option#, Some, None) +#else , Option , pattern Some , pattern None +#endif , mapOption, setOption , Result, pattern OK, pattern Fail , mapResult, setResult