th-orphans 0.13.14 → 0.13.15
raw patch · 4 files changed
+32/−404 lines, 4 filesdep −faildep −generic-derivingdep −semigroupsdep ~basedep ~template-haskellPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: fail, generic-deriving, semigroups, th-lift-instances
Dependency ranges changed: base, template-haskell
API changes (from Hackage documentation)
- Language.Haskell.TH.Instances: instance (Language.Haskell.TH.Syntax.Compat.Quote m, GHC.Base.Monoid w) => Language.Haskell.TH.Syntax.Compat.Quote (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
- Language.Haskell.TH.Instances: instance (Language.Haskell.TH.Syntax.Compat.Quote m, GHC.Base.Monoid w) => Language.Haskell.TH.Syntax.Compat.Quote (Control.Monad.Trans.Writer.Lazy.WriterT w m)
- Language.Haskell.TH.Instances: instance Control.Monad.Fix.MonadFix Language.Haskell.TH.Syntax.Q
- Language.Haskell.TH.Instances: instance GHC.Base.Monoid a => GHC.Base.Monoid (Language.Haskell.TH.Syntax.Q a)
- Language.Haskell.TH.Instances: instance GHC.Base.Semigroup a => GHC.Base.Semigroup (Language.Haskell.TH.Syntax.Q a)
- Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Compat.Quote m => Language.Haskell.TH.Syntax.Compat.Quote (Control.Monad.Trans.Reader.ReaderT r m)
- Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Compat.Quote m => Language.Haskell.TH.Syntax.Compat.Quote (Control.Monad.Trans.State.Lazy.StateT s m)
- Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Lift Language.Haskell.TH.Syntax.TyVarBndr
+ Language.Haskell.TH.Instances: instance (Language.Haskell.TH.Syntax.Quote m, GHC.Base.Monoid w) => Language.Haskell.TH.Syntax.Quote (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Language.Haskell.TH.Instances: instance (Language.Haskell.TH.Syntax.Quote m, GHC.Base.Monoid w) => Language.Haskell.TH.Syntax.Quote (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Lift Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Lift flag => Language.Haskell.TH.Syntax.Lift (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Quote m => Language.Haskell.TH.Syntax.Quote (Control.Monad.Trans.Reader.ReaderT r m)
+ Language.Haskell.TH.Instances: instance Language.Haskell.TH.Syntax.Quote m => Language.Haskell.TH.Syntax.Quote (Control.Monad.Trans.State.Lazy.StateT s m)
Files
- CHANGELOG.md +4/−0
- src/Language/Haskell/TH/Instances.hs +14/−355
- src/Language/Haskell/TH/Instances/Internal.hs +3/−23
- th-orphans.cabal +11/−26
CHANGELOG.md view
@@ -1,3 +1,7 @@+### 0.13.15 [2024.10.22]+* Support building with `template-haskell-2.22.1`.+* Drop support for pre-8.0 versions of GHC.+ ### 0.13.14 [2022.08.21] * Only depend on `th-lift-instances` for `ghc <= 7.8`.
src/Language/Haskell/TH/Instances.hs view
@@ -5,22 +5,8 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -#if defined(__GLASGOW_HASKELL__)-# define LANGUAGE_DeriveDataTypeable-{-# LANGUAGE DeriveDataTypeable #-}-#endif--#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 704-# define LANGUAGE_DeriveGeneric-{-# LANGUAGE DeriveGeneric #-}-#endif--#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 706-{-# LANGUAGE DataKinds #-}-#endif--{-# OPTIONS_GHC -fno-warn-deprecations #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# OPTIONS_GHC -Wno-deprecations #-}+{-# OPTIONS_GHC -Wno-orphans #-} -- | -- Module : Language.Haskell.TH.Instances@@ -32,29 +18,14 @@ -- -- It provides the following instances: ----- * 'Ord', 'Lift', 'Generic', 'Show', 'Eq', 'Data', 'Typeable',--- 'Ppr', instances for the datatypes in "Language.Haskell.TH"------ * 'Lift' instances for "Data.Word" / "Data.Int" types------ * 'Applicative' for 'Q'+-- * 'Lift' instances for the datatypes in "Language.Haskell.TH" -- -- * 'Quasi' for 'ReaderT', 'WriterT', 'StateT', and 'RWST'. ----- * 'Typeable' for 'Lift', 'NameIs', 'Ppr', 'PprM', 'Q', 'Quasi',--- 'QuasiQuoter', and 'TExp'------ More recent versions of template-haskell, particularly 2.10 (GHC--- 7.10), provide these instances. However, in order to support older--- versions you should import this module.------ Note that the 'Ord' instances are not guaranteed to produce--- consistent results across template-haskell / GHC versions, as they--- have different data types, with different constructor orders.+-- * 'MonadFix' for 'Q' ----- This module also implicitly re-exports the instances defined in--- "Instances.TH.Lift". This is mostly to ensure that there aren't--- collisions of orphans between @th-orphans@ and @th-lift-instances@.+-- More recent versions of template-haskell provide these instances. However, in+-- order to support older versions you should import this module. module Language.Haskell.TH.Instances () where import Language.Haskell.TH hiding (newName)@@ -69,59 +40,12 @@ import Control.Monad.State (StateT(StateT), runStateT) import qualified Control.Monad.Trans as Trans (MonadTrans(lift)) import Control.Monad.Writer (WriterT(WriterT), runWriterT)-#if !MIN_VERSION_base(4,8,0)-import Instances.TH.Lift ()-#endif -#if !(MIN_VERSION_template_haskell(2,8,0))-import Unsafe.Coerce (unsafeCoerce)-#endif--#if MIN_VERSION_template_haskell(2,11,0) && !(MIN_VERSION_template_haskell(2,15,0))+#if !(MIN_VERSION_template_haskell(2,15,0)) import Language.Haskell.TH.LanguageExtensions (Extension(..)) #endif --- Thanks to Richard Eisenberg, GHC 7.10 adds many of the instances--- from this module.-#if !MIN_VERSION_template_haskell(2,10,0)-import Language.Haskell.TH.Ppr-# if MIN_VERSION_template_haskell(2,3,0)-import Language.Haskell.TH.PprLib-import Language.Haskell.TH.Quote-# endif-# if MIN_VERSION_template_haskell(2,4,0) && !(MIN_VERSION_template_haskell(2,8,0))-import Language.Haskell.TH.Syntax.Internals-# endif--# if !(MIN_VERSION_template_haskell(2,9,0))-# if !(MIN_VERSION_base(4,8,0))-import Control.Applicative (Applicative(..))-# endif-import Control.Monad (ap, liftM)-# endif--# if !(MIN_VERSION_base(4,8,0))-import Data.Monoid (Monoid (..))-# endif--# if MIN_VERSION_template_haskell(2,3,0) && defined(LANGUAGE_DeriveDataTypeable)-import Data.Data hiding (Fixity(..))-# endif--# if __GLASGOW_HASKELL__ > 702-import GHC.Generics (Generic)-# endif--# if __GLASGOW_HASKELL__ <= 702 || !(MIN_VERSION_template_haskell(2,10,0))-import qualified Generics.Deriving.TH as Generic (deriveAll)-# endif-#endif--#if !(MIN_VERSION_template_haskell(2,11,0))-import qualified Control.Monad.Fail as Fail-#endif--#if MIN_VERSION_template_haskell(2,16,0)+#if MIN_VERSION_template_haskell(2,16,0) && !(MIN_VERSION_template_haskell(2,22,1)) import GHC.Ptr (Ptr(Ptr)) import GHC.ForeignPtr (newForeignPtr_) import Language.Haskell.TH.Syntax.Compat (liftTypedFromUntypedSplice)@@ -142,300 +66,35 @@ # endif #endif -#if !MIN_VERSION_template_haskell(2,11,0)-deriving instance Show NameFlavour-deriving instance Show NameSpace--instance Fail.MonadFail Q where- fail s = report True s >> q (fail "Q monad failure")- where- q :: (forall m. Quasi m => m a) -> Q a-# if MIN_VERSION_template_haskell(2,8,0)- q = Q-# else- -- Early versions of template-haskell did not expose Q's newtype- -- constructor. Desperate times call for desperate measures.- q = unsafeCoerce-# endif-#endif---- Ideally, it'd be possible to use reifyManyWithoutInstances for--- these Ord instances, but TH can't output deriving instances (and--- even if this is added for later versions, we need to support many--- ghc / th versions). We can't generate Ord instances from TH due to--- some undiagnosed funkiness:--- https://github.com/mgsloan/th-orphans/issues/14---- GHC 7.10 comes with Ord instances for TH datatypes.-#if !MIN_VERSION_template_haskell(2,10,0)-instance Ppr Lit where- ppr = pprLit noPrec--deriving instance Eq Info--deriving instance Ord Body-deriving instance Ord Callconv-deriving instance Ord Clause-deriving instance Ord Con-deriving instance Ord Dec-deriving instance Ord Exp-deriving instance Ord Fixity-deriving instance Ord FixityDirection-deriving instance Ord Foreign-deriving instance Ord FunDep-deriving instance Ord Guard-deriving instance Ord Info-deriving instance Ord Lit-deriving instance Ord Match-deriving instance Ord Pat-deriving instance Ord Range-deriving instance Ord Safety-deriving instance Ord Stmt-deriving instance Ord Strict-deriving instance Ord Type--# if defined(LANGUAGE_DeriveDataTypeable)-deriving instance Typeable NameIs-deriving instance Typeable1 PprM-deriving instance Typeable1 Q-# endif--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic Body-deriving instance Generic Callconv-deriving instance Generic Clause-deriving instance Generic Con-deriving instance Generic Dec-deriving instance Generic Exp-deriving instance Generic Fixity-deriving instance Generic FixityDirection-deriving instance Generic Foreign-deriving instance Generic FunDep-deriving instance Generic Guard-deriving instance Generic Info-deriving instance Generic Lit-deriving instance Generic Match-deriving instance Generic Name-deriving instance Generic NameSpace-deriving instance Generic Pat-deriving instance Generic Range-deriving instance Generic Safety-deriving instance Generic Stmt-deriving instance Generic Strict-deriving instance Generic Type-# else-$(Generic.deriveAll ''Body)-$(Generic.deriveAll ''Callconv)-$(Generic.deriveAll ''Clause)-$(Generic.deriveAll ''Con)-$(Generic.deriveAll ''Dec)-$(Generic.deriveAll ''Exp)-$(Generic.deriveAll ''Fixity)-$(Generic.deriveAll ''FixityDirection)-$(Generic.deriveAll ''Foreign)-$(Generic.deriveAll ''FunDep)-$(Generic.deriveAll ''Guard)-$(Generic.deriveAll ''Info)-$(Generic.deriveAll ''Lit)-$(Generic.deriveAll ''Match)-$(Generic.deriveAll ''Name)-$(Generic.deriveAll ''NameSpace)-$(Generic.deriveAll ''Pat)-$(Generic.deriveAll ''Range)-$(Generic.deriveAll ''Safety)-$(Generic.deriveAll ''Stmt)-$(Generic.deriveAll ''Strict)-$(Generic.deriveAll ''Type)-# endif---- Unconditionally use Template Haskell to derive this Generic instance, since--- NameFlavour has fields with unboxed types (for which deriving Generic--- support wasn't added to GHC until 8.0).-$(Generic.deriveAll ''NameFlavour)--# if MIN_VERSION_template_haskell(2,3,0)-instance Ppr Loc where- ppr (Loc { loc_module = md- , loc_package = pkg- , loc_start = (start_ln, start_col)- , loc_end = (end_ln, end_col) })- = hcat [ text pkg, colon, text md, colon- , parens $ int start_ln <> comma <> int start_col- , text "-"- , parens $ int end_ln <> comma <> int end_col ]--deriving instance Eq Loc-deriving instance Ord Loc-deriving instance Show Loc--# if defined(LANGUAGE_DeriveDataTypeable)-deriving instance Data Loc-deriving instance Typeable Loc--deriving instance Typeable QuasiQuoter-# endif--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic Loc-# else-$(Generic.deriveAll ''Loc)-# endif-# endif--# if MIN_VERSION_template_haskell(2,4,0)-deriving instance Ord FamFlavour-deriving instance Ord Pragma-deriving instance Ord Pred-deriving instance Ord TyVarBndr--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic FamFlavour-deriving instance Generic ModName-deriving instance Generic OccName-deriving instance Generic PkgName-deriving instance Generic Pragma-deriving instance Generic Pred-deriving instance Generic TyVarBndr-# else-$(Generic.deriveAll ''FamFlavour)-$(Generic.deriveAll ''ModName)-$(Generic.deriveAll ''OccName)-$(Generic.deriveAll ''PkgName)-$(Generic.deriveAll ''Pragma)-$(Generic.deriveAll ''Pred)-$(Generic.deriveAll ''TyVarBndr)-# endif--# if !(MIN_VERSION_template_haskell(2,8,0))-deriving instance Ord InlineSpec-deriving instance Ord Kind--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic InlineSpec-deriving instance Generic Kind-# else-$(Generic.deriveAll ''InlineSpec)-$(Generic.deriveAll ''Kind)-# endif-# endif-# endif--# if MIN_VERSION_template_haskell(2,5,0) && !(MIN_VERSION_template_haskell(2,7,0))-deriving instance Eq ClassInstance-deriving instance Ord ClassInstance--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic ClassInstance-# else-$(Generic.deriveAll ''ClassInstance)-# endif-# endif--# if !(MIN_VERSION_template_haskell(2,7,0))-instance Applicative Q where- pure = return- (<*>) = ap-# endif--# if MIN_VERSION_template_haskell(2,8,0)-deriving instance Ord Inline-deriving instance Ord Phases-deriving instance Ord RuleBndr-deriving instance Ord RuleMatch-deriving instance Ord TyLit--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic Inline-deriving instance Generic Phases-deriving instance Generic RuleBndr-deriving instance Generic RuleMatch-deriving instance Generic TyLit-# else-$(Generic.deriveAll ''Inline)-$(Generic.deriveAll ''Phases)-$(Generic.deriveAll ''RuleBndr)-$(Generic.deriveAll ''RuleMatch)-$(Generic.deriveAll ''TyLit)-# endif-# endif--# if MIN_VERSION_template_haskell(2,9,0)-deriving instance Eq ModuleInfo--deriving instance Ord AnnLookup-deriving instance Ord AnnTarget-deriving instance Ord ModuleInfo-deriving instance Ord Role-deriving instance Ord TySynEqn--# if defined(LANGUAGE_DeriveDataTypeable)-deriving instance Typeable TExp-# endif--# if defined(LANGUAGE_DeriveGeneric)-deriving instance Generic AnnLookup-deriving instance Generic AnnTarget-deriving instance Generic Module-deriving instance Generic ModuleInfo-deriving instance Generic Role-deriving instance Generic TySynEqn-# else-$(Generic.deriveAll ''AnnLookup)-$(Generic.deriveAll ''AnnTarget)-$(Generic.deriveAll ''Module)-$(Generic.deriveAll ''ModuleInfo)-$(Generic.deriveAll ''Role)-$(Generic.deriveAll ''TySynEqn)-# endif-# else-deriving instance Show ModName-deriving instance Show OccName-deriving instance Show PkgName--instance Functor PprM where- fmap = liftM--instance Applicative PprM where- pure = return- (<*>) = ap-# endif-#endif--#if MIN_VERSION_template_haskell(2,11,0) && !(MIN_VERSION_template_haskell(2,15,0))+#if !(MIN_VERSION_template_haskell(2,15,0)) deriving instance Bounded Extension #endif instance Quote m => Quote (ReaderT r m) where newName = Trans.lift . newName $(deriveQuasiTrans- [t| forall r m. Quasi m => Proxy2 (ReaderT r m) |]+ [t| forall r m. Quasi m => Quasi (ReaderT r m) |] [e| \m1 m2 -> ReaderT $ \ r -> runReaderT m1 r `qRecover` runReaderT m2 r |]) instance (Quote m, Monoid w) => Quote (WriterT w m) where newName = Trans.lift . newName $(deriveQuasiTrans- [t| forall w m. (Quasi m, Monoid w) => Proxy2 (WriterT w m) |]+ [t| forall w m. (Quasi m, Monoid w) => Quasi (WriterT w m) |] [e| \m1 m2 -> WriterT $ runWriterT m1 `qRecover` runWriterT m2 |]) instance Quote m => Quote (StateT s m) where newName = Trans.lift . newName $(deriveQuasiTrans- [t| forall s m. Quasi m => Proxy2 (StateT s m) |]+ [t| forall s m. Quasi m => Quasi (StateT s m) |] [e| \m1 m2 -> StateT $ \ s -> runStateT m1 s `qRecover` runStateT m2 s |]) instance (Quote m, Monoid w) => Quote (RWST r w s m) where newName = Trans.lift . newName $(deriveQuasiTrans- [t| forall r w s m. (Quasi m, Monoid w) => Proxy2 (RWST r w s m) |]+ [t| forall r w s m. (Quasi m, Monoid w) => Quasi (RWST r w s m) |] [e| \m1 m2 -> RWST $ \ r s -> runRWST m1 r s `qRecover` runRWST m2 r s |]) -#if MIN_VERSION_base(4,7,0) && defined(LANGUAGE_DeriveDataTypeable) && __GLASGOW_HASKELL__ < 710-deriving instance Typeable Lift-deriving instance Typeable Ppr-deriving instance Typeable Quasi-#endif--#if MIN_VERSION_template_haskell(2,16,0)+#if MIN_VERSION_template_haskell(2,16,0) && !(MIN_VERSION_template_haskell(2,22,1)) instance Lift Bytes where lift bytes = [| Bytes
src/Language/Haskell/TH/Instances/Internal.hs view
@@ -1,13 +1,9 @@ {-# LANGUAGE CPP #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE TemplateHaskell #-} -- | Defines a utility function for deriving 'Quasi' instances for monad -- transformer data types.-module Language.Haskell.TH.Instances.Internal- ( deriveQuasiTrans- , Proxy2- ) where+module Language.Haskell.TH.Instances.Internal (deriveQuasiTrans) where import qualified Control.Monad.Trans as MTL (lift) import Language.Haskell.TH.Lib@@ -17,11 +13,7 @@ deriveQuasiTrans :: Q Type -- ^ The instance head. For example, this might be of the form: --- -- > [t| forall r m. Quasi m => Proxy2 (ReaderT r m) |]- --- -- Why use 'Proxy2' instead of 'Quasi'? Sadly, GHC 7.0/7.2 will- -- not accept it if you use the latter due to old TH bugs, so we- -- use 'Proxy2' as an ugly workaround.+ -- > [t| forall r m. Quasi m => Quasi (ReaderT r m) |] -> Q Exp -- ^ The implementation of 'qRecover' -> Q [Dec] -- ^ The 'Quasi' instance declaration deriveQuasiTrans qInstHead qRecoverExpr = do@@ -30,7 +22,7 @@ qInstCxt = return instCxt qInstTy = case mangledInstTy of ConT proxy2 `AppT` instTy- | proxy2 == ''Proxy2+ | proxy2 == ''Quasi -> conT ''Quasi `appT` return instTy _ -> fail $ "Unexpected type " ++ pprint mangledInstTy instDec <- instanceD qInstCxt qInstTy qInstMethDecs@@ -53,11 +45,9 @@ , ('qReify, [| MTL.lift . qReify |]) , ('qLocation, [| MTL.lift qLocation |]) , ('qRunIO, [| MTL.lift . qRunIO |])-#if MIN_VERSION_template_haskell(2,7,0) , ('qReifyInstances, [| \a b -> MTL.lift $ qReifyInstances a b |]) , ('qLookupName, [| \a b -> MTL.lift $ qLookupName a b |]) , ('qAddDependentFile, [| MTL.lift . qAddDependentFile |])-# if MIN_VERSION_template_haskell(2,9,0) , ('qReifyRoles, [| MTL.lift . qReifyRoles |]) , ('qReifyAnnotations, [| MTL.lift . qReifyAnnotations |]) , ('qReifyModule, [| MTL.lift . qReifyModule |])@@ -65,16 +55,10 @@ , ('qAddModFinalizer, [| MTL.lift . qAddModFinalizer |]) , ('qGetQ, [| MTL.lift qGetQ |]) , ('qPutQ, [| MTL.lift . qPutQ |])-# endif-# if MIN_VERSION_template_haskell(2,11,0) , ('qReifyFixity, [| MTL.lift . qReifyFixity |]) , ('qReifyConStrictness, [| MTL.lift . qReifyConStrictness |]) , ('qIsExtEnabled, [| MTL.lift . qIsExtEnabled |]) , ('qExtsEnabled, [| MTL.lift qExtsEnabled |])-# endif-#elif MIN_VERSION_template_haskell(2,5,0)- , ('qClassInstances, [| \a b -> MTL.lift $ qClassInstances a b |])-#endif #if MIN_VERSION_template_haskell(2,14,0) , ('qAddForeignFilePath, [| \a b -> MTL.lift $ qAddForeignFilePath a b |]) , ('qAddTempFile, [| MTL.lift . qAddTempFile |])@@ -100,7 +84,3 @@ mkDec methName methRhs = valD (varP methName) (normalB methRhs) [] in map (uncurry mkDec) instMeths---- | See the Haddocks for 'deriveQuasiTrans' for an explanation of why this--- type needs to exist.-data Proxy2 (m :: * -> *)
th-orphans.cabal view
@@ -1,5 +1,5 @@ name: th-orphans-version: 0.13.14+version: 0.13.15 cabal-version: >= 1.10 build-type: Simple license: BSD3@@ -10,20 +10,19 @@ maintainer: Ryan Scott <ryan.gl.scott@gmail.com> bug-reports: https://github.com/mgsloan/th-orphans/issues stability: experimental-tested-with: GHC == 7.0.4- , GHC == 7.2.2- , GHC == 7.4.2- , GHC == 7.6.3- , GHC == 7.8.4- , GHC == 7.10.3- , GHC == 8.0.2+tested-with: GHC == 8.0.2 , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5 , GHC == 8.8.4 , GHC == 8.10.7- , GHC == 9.0.1- , GHC == 9.2.1+ , GHC == 9.0.2+ , GHC == 9.2.8+ , GHC == 9.4.8+ , GHC == 9.6.6+ , GHC == 9.8.2+ , GHC == 9.10.1+ , GHC == 9.12.1 synopsis: Orphan instances for TH datatypes description: Orphan instances for TH datatypes. In particular, instances for Ord and Lift, as well as a few missing Show / Eq. These@@ -32,27 +31,13 @@ extra-source-files: CHANGELOG.md, README.md library- build-depends: base >= 4.3 && < 5,- template-haskell < 2.20,+ build-depends: base >= 4.9 && < 5,+ template-haskell >= 2.11 && < 2.23, th-compat >= 0.1 && < 0.2, -- https://github.com/mboes/th-lift/issues/14 th-lift >= 0.7.1, th-reify-many >= 0.1.9 && < 0.2, mtl >= 2-- if !impl(ghc >= 8.0)- build-depends: fail == 4.9.*,- semigroups >= 0.18.5 && < 0.21-- -- Use TH to derive Generics instances instead of DeriveGeneric, for < 7.10- if impl(ghc < 7.10)- build-depends: generic-deriving >= 1.9- , th-lift-instances-- -- Prior to GHC 7.6, GHC generics lived in ghc-prim- if impl(ghc >= 7.2) && impl(ghc < 7.6)- build-depends: ghc-prim- hs-source-dirs: src ghc-options: -Wall if impl(ghc >= 8.6)