constraints-extras 0.3.1.0 → 0.3.2.0
raw patch · 3 files changed
+23/−2 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Constraint.Extras: instance forall k (c :: k -> GHC.Types.Constraint) (f :: k -> *) (g :: k -> *). (Data.Constraint.Extras.ArgDict c f, Data.Constraint.Extras.ArgDict c g) => Data.Constraint.Extras.ArgDict c (Data.Functor.Sum.Sum f g)
+ Data.Constraint.Extras: instance forall k (c :: k -> GHC.Types.Constraint) (f :: k -> *) (g :: k -> *). (Data.Constraint.Extras.ArgDict c f, Data.Constraint.Extras.ArgDict c g) => Data.Constraint.Extras.ArgDict c (f GHC.Generics.:+: g)
Files
- ChangeLog.md +4/−0
- constraints-extras.cabal +2/−2
- src/Data/Constraint/Extras.hs +17/−0
ChangeLog.md view
@@ -1,5 +1,9 @@ # Revision history for constraints-extras +## 0.3.2.0++* Provide `ArgDict` instances for sums of functors.+ ## 0.3.1.0 * Allow deriving instances with `deriveArgDict` for data and newtype family instances by supplying the name of one of its constructors
constraints-extras.cabal view
@@ -1,5 +1,5 @@ name: constraints-extras-version: 0.3.1.0+version: 0.3.2.0 synopsis: Utility package for constraints description: Convenience functions and TH for working with constraints. See <https://github.com/obsidiansystems/constraints-extras/blob/develop/README.md README.md> for example usage. category: Constraints@@ -33,7 +33,7 @@ , ConstraintKinds , TemplateHaskell build-depends: base >=4.9 && <4.16- , constraints >= 0.9 && < 0.13+ , constraints >= 0.9 && < 0.14 , template-haskell >=2.11 && <2.18 hs-source-dirs: src default-language: Haskell2010
src/Data/Constraint/Extras.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-}@@ -51,7 +52,9 @@ import Data.Constraint.Compose import Data.Constraint.Flip import Data.Constraint.Forall+import Data.Functor.Sum (Sum(..)) import Data.Kind+import GHC.Generics ((:+:)(..)) -- | Morally, this class is for GADTs whose indices can be finitely -- enumerated. An @'ArgDict' c f@ instance allows us to do two things:@@ -73,6 +76,20 @@ -- -- > argDict I :: Dict (Show Int) argDict :: ConstraintsFor f c => f a -> Dict (c a)++-- | @since 0.3.2.0+instance (ArgDict c f, ArgDict c g) => ArgDict c (f :+: g) where+ type ConstraintsFor (f :+: g) c = (ConstraintsFor f c, ConstraintsFor g c)+ argDict = \case+ L1 f -> argDict f+ R1 g -> argDict g++-- | @since 0.3.2.0+instance (ArgDict c f, ArgDict c g) => ArgDict c (Sum f g) where+ type ConstraintsFor (Sum f g) c = (ConstraintsFor f c, ConstraintsFor g c)+ argDict = \case+ InL f -> argDict f+ InR g -> argDict g -- | \"Primed\" variants (@ConstraintsFor'@, 'argDict'', 'Has'', -- 'has'', &c.) use the 'ArgDict' instance on @f@ to apply constraints