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..36a05681 100644 --- a/parsnip/src/Text/Parsnip/Internal/Parser.hs +++ b/parsnip/src/Text/Parsnip/Internal/Parser.hs @@ -22,14 +22,24 @@ {-# 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) +#if __GLASGOW_HASKELL__ >= 810 +, Option(Option#, Some, None) +#else +, Option +, pattern Some +, pattern None +#endif , mapOption, setOption , Result, pattern OK, pattern Fail , mapResult, setResult @@ -67,6 +77,9 @@ import Text.Parsnip.Internal.Private -------------------------------------------------------------------------------- -- | Unlifted 'Maybe' + +#if __GLASGOW_HASKELL__ >= 810 + newtype Option a = Option# (# a | (##) #) pattern Some :: a -> Option a @@ -75,6 +88,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