packages feed

invariant 0.5.1 → 0.5.2

raw patch · 3 files changed

+37/−23 lines, 3 filesdep ~th-abstractionPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: th-abstraction

API changes (from Hackage documentation)

- Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Base.Maybe
+ Data.Functor.Invariant: instance Data.Functor.Invariant.Invariant GHC.Maybe.Maybe
- Data.Functor.Invariant: newtype WrappedBifunctor (p :: k -> k1 -> *) (a :: k) (b :: k1) :: forall k k1. () => k -> k1 -> * -> k -> k1 -> *
+ Data.Functor.Invariant: newtype WrappedBifunctor (p :: k -> k1 -> Type) (a :: k) (b :: k1) :: forall k k1. () => k -> k1 -> Type -> k -> k1 -> Type

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.5.2 [2019.04.26]+* Support `th-abstraction-0.3.0.0` or later.+* Only incur a `semigroups` dependency on old GHCs.+ # 0.5.1 [2018.07.15] * Depend on `QuickCheck-2.11` or later in the test suite. * Some Haddock fixes in `Data.Functor.Invariant.TH`.
invariant.cabal view
@@ -1,5 +1,5 @@ name:                invariant-version:             0.5.1+version:             0.5.2 synopsis:            Haskell98 invariant functors description:         Haskell98 invariant functors (also known as exponential functors).                      .@@ -24,8 +24,8 @@                    , GHC == 7.10.3                    , GHC == 8.0.2                    , GHC == 8.2.2-                   , GHC == 8.4.3-                   , GHC == 8.6.1+                   , GHC == 8.4.4+                   , GHC == 8.6.4 extra-source-files:  CHANGELOG.md, README.md  source-repository head@@ -46,16 +46,18 @@                      , contravariant        >= 0.5    && < 2                      , ghc-prim                      , profunctors          >= 5.2.1  && < 6-                     , semigroups           >= 0.16.2 && < 1                      , StateVar             >= 1.1    && < 2                      , stm                  >= 2.2    && < 3                      , tagged               >= 0.7.3  && < 1                      , template-haskell     >= 2.4    && < 2.15-                     , th-abstraction       >= 0.2.2  && < 1+                     , th-abstraction       >= 0.2.2  && < 0.4                      , transformers         >= 0.2    && < 0.6                      , transformers-compat  >= 0.3    && < 1                      , unordered-containers >= 0.2.4  && < 0.3   ghc-options:         -Wall++  if !impl(ghc >= 8.0)+    build-depends:     semigroups           >= 0.16.2 && < 1  test-suite spec   type:                exitcode-stdio-1.0
src/Data/Functor/Invariant/TH.hs view
@@ -269,26 +269,30 @@ deriveInvariantClass iClass opts name = do   info <- reifyDatatype name   case info of-    DatatypeInfo { datatypeContext = ctxt-                 , datatypeName    = parentName-                 , datatypeVars    = vars-                 , datatypeVariant = variant-                 , datatypeCons    = cons+    DatatypeInfo { datatypeContext   = ctxt+                 , datatypeName      = parentName+#if MIN_VERSION_th_abstraction(0,3,0)+                 , datatypeInstTypes = instTys+#else+                 , datatypeVars      = instTys+#endif+                 , datatypeVariant   = variant+                 , datatypeCons      = cons                  } -> do       (instanceCxt, instanceType)-        <- buildTypeInstance iClass parentName ctxt vars variant+        <- buildTypeInstance iClass parentName ctxt instTys variant       (:[]) `fmap` instanceD (return instanceCxt)                              (return instanceType)-                             (invmapDecs iClass opts parentName vars cons)+                             (invmapDecs iClass opts parentName instTys cons)  -- | Generates a declaration defining the primary function corresponding to a -- particular class (invmap for Invariant and invmap2 for Invariant2). invmapDecs :: InvariantClass -> Options -> Name -> [Type] -> [ConstructorInfo]            -> [Q Dec]-invmapDecs iClass opts parentName vars cons =+invmapDecs iClass opts parentName instTys cons =     [ funD (invmapName iClass)            [ clause []-                    (normalB $ makeInvmapForCons iClass opts parentName vars cons)+                    (normalB $ makeInvmapForCons iClass opts parentName instTys cons)                     []            ]     ]@@ -299,29 +303,33 @@ makeInvmapClass iClass opts name = do   info <- reifyDatatype name   case info of-    DatatypeInfo { datatypeContext = ctxt-                 , datatypeName    = parentName-                 , datatypeVars    = vars-                 , datatypeVariant = variant-                 , datatypeCons    = cons+    DatatypeInfo { datatypeContext   = ctxt+                 , datatypeName      = parentName+#if MIN_VERSION_th_abstraction(0,3,0)+                 , datatypeInstTypes = instTys+#else+                 , datatypeVars      = instTys+#endif+                 , datatypeVariant   = variant+                 , datatypeCons      = cons                  } ->       -- We force buildTypeInstance here since it performs some checks for whether       -- or not the provided datatype can actually have invmap/invmap2       -- implemented for it, and produces errors if it can't.-      buildTypeInstance iClass parentName ctxt vars variant-        >> makeInvmapForCons iClass opts parentName vars cons+      buildTypeInstance iClass parentName ctxt instTys variant+        >> makeInvmapForCons iClass opts parentName instTys cons  -- | Generates a lambda expression for invmap(2) for the given constructors. -- All constructors must be from the same type. makeInvmapForCons :: InvariantClass -> Options -> Name -> [Type] -> [ConstructorInfo]                   -> Q Exp-makeInvmapForCons iClass opts _parentName vars cons = do+makeInvmapForCons iClass opts _parentName instTys cons = do     value      <- newName "value"     covMaps    <- newNameList "covMap" numNbs     contraMaps <- newNameList "contraMap" numNbs      let mapFuns    = zip covMaps contraMaps-        lastTyVars = map varTToName $ drop (length vars - fromEnum iClass) vars+        lastTyVars = map varTToName $ drop (length instTys - fromEnum iClass) instTys         tvMap      = Map.fromList $ zip lastTyVars mapFuns         argNames   = concat (transpose [covMaps, contraMaps]) ++ [value]     lamE (map varP argNames)