constraints-extras 0.2.3.0 → 0.2.3.1
raw patch · 2 files changed
+64/−1 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- README.md +62/−0
- constraints-extras.cabal +2/−1
+ README.md view
@@ -0,0 +1,62 @@+# constraints-extras++## Example usage:++NB: This example can be built with `-pgmL markdown-unlit`.++```haskell+{-# LANGUAGE GADTs #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE ExistentialQuantification #-}++import Data.Aeson+import Data.Constraint.Forall+import Data.Constraint.Extras+import Data.Constraint.Extras.TH++data A :: * -> * where+ A_a :: A Int+ A_b :: Int -> A ()++data B :: * -> * where+ B_a :: A a -> A a -> B a+ B_x :: Int -> B Int++data V :: (* -> *) -> * where+ V_a :: A Int -> V A++deriveArgDict ''A+deriveArgDict ''B+deriveArgDictV ''V++data DSum k f = forall a. DSum (k a) (f a)++-- Derive a ToJSON instance for our 'DSum'+instance forall k f.+ ( Has' ToJSON k f -- Given a value of type (k a), we can obtain an instance (ToJSON (f a))+ , ForallF ToJSON k -- For any (a), we have an instance (ToJSON (k a))+ ) => ToJSON (DSum k f) where+ toJSON (DSum (k :: k a) f) = toJSON+ ( whichever @ToJSON @k @a $ toJSON k -- Use the (ForallF ToJSON k) constraint to obtain the (ToJSON (k a)) instance+ , has' @ToJSON @f k $ toJSON f -- Use the (Has' ToJSON k f) constraint to obtain the (ToJSON (f a)) instance+ )++data Some k = forall a. Some (k a)++-- Derive a FromJSON instance for our 'DSum'+instance (FromJSON (Some f), Has' FromJSON f g) => FromJSON (DSum f g) where+ parseJSON x = do+ (jf, jg) <- parseJSON x+ Some (f :: f a) <- parseJSON jf+ g <- has' @FromJSON @g f (parseJSON jg)+ return $ DSum f g++main :: IO ()+main = return ()+```
constraints-extras.cabal view
@@ -1,5 +1,5 @@ name: constraints-extras-version: 0.2.3.0+version: 0.2.3.1 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@@ -10,6 +10,7 @@ copyright: Obsidian Systems LLC build-type: Simple cabal-version: >=1.10+extra-source-files: README.md library exposed-modules: Data.Constraint.Extras, Data.Constraint.Extras.TH