RepLib 0.5.3.1 → 0.5.3.2
raw patch · 7 files changed
+92/−19 lines, 7 filesdep ~template-haskellPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: template-haskell
API changes (from Hackage documentation)
- Generics.RepLib: class EqT (f :: * -> *)
- Generics.RepLib: eqT :: EqT f => f a -> f b -> Maybe (:=: a b)
- Generics.RepLib.R: instance (Rep a, Rep b) => Rep (a :=: b)
- Generics.RepLib.R1: instance (Rep a, Rep b, Sat (ctx a), Sat (ctx b)) => Rep1 ctx (a :=: b)
- Generics.RepLib.RepAux: instance EqT R
+ Generics.RepLib: class TestEquality (f :: k -> *)
+ Generics.RepLib: testEquality :: TestEquality f => f a -> f b -> Maybe ((:~:) k a b)
+ Generics.RepLib.Lib: instance Applicative M
+ Generics.RepLib.Lib: instance Functor M
+ Generics.RepLib.R: instance (Rep a, Rep b) => Rep (a :~: b)
+ Generics.RepLib.R1: instance (Rep a, Rep b, Sat (ctx a), Sat (ctx b)) => Rep1 ctx (a :~: b)
+ Generics.RepLib.RepAux: instance TestEquality R
- Generics.RepLib: Refl :: :=: a a
+ Generics.RepLib: Refl :: (:~:) k a1 a1
- Generics.RepLib: data (:=:) a b :: * -> * -> *
+ Generics.RepLib: data (:~:) (a :: k) (b :: k) :: k -> k -> *
- Generics.RepLib.AbstractReps: rMap :: (Rep k_alfV, Rep a_alfW) => R (Map k_alfV a_alfW)
+ Generics.RepLib.AbstractReps: rMap :: (Rep k_ajN7, Rep a_ajN8) => R (Map k_ajN7 a_ajN8)
- Generics.RepLib.AbstractReps: rMap1 :: (Rep k_alfV, Rep a_alfW) => R1 ctx_alg5 (Map k_alfV a_alfW)
+ Generics.RepLib.AbstractReps: rMap1 :: (Rep k_ajN7, Rep a_ajN8) => R1 ctx_ajNn (Map k_ajN7 a_ajN8)
- Generics.RepLib.AbstractReps: rSet :: Rep a_a4Dq => R (Set a_a4Dq)
+ Generics.RepLib.AbstractReps: rSet :: Rep a_a6C2 => R (Set a_a6C2)
- Generics.RepLib.AbstractReps: rSet1 :: Rep a_a4Dq => R1 ctx_algi (Set a_a4Dq)
+ Generics.RepLib.AbstractReps: rSet1 :: Rep a_a6C2 => R1 ctx_ajNB (Set a_a6C2)
- Generics.RepLib.PreludeReps: rBool1 :: () -> () -> R1 ctx_af82 Bool
+ Generics.RepLib.PreludeReps: rBool1 :: () -> () -> R1 ctx_adrR Bool
- Generics.RepLib.PreludeReps: rEither :: (Rep a_af8l, Rep b_af8m) => R (Either a_af8l b_af8m)
+ Generics.RepLib.PreludeReps: rEither :: (Rep a_adsa, Rep b_adsb) => R (Either a_adsa b_adsb)
- Generics.RepLib.PreludeReps: rEither1 :: (Rep a_af8l, Rep b_af8m) => ctx_af8v a_af8l -> ctx_af8v b_af8m -> R1 ctx_af8v (Either a_af8l b_af8m)
+ Generics.RepLib.PreludeReps: rEither1 :: (Rep a_adsa, Rep b_adsb) => ctx_adsq a_adsa -> ctx_adsq b_adsb -> R1 ctx_adsq (Either a_adsa b_adsb)
- Generics.RepLib.PreludeReps: rMaybe :: Rep a_a1we => R (Maybe a_a1we)
+ Generics.RepLib.PreludeReps: rMaybe :: Rep a_a2Fz => R (Maybe a_a2Fz)
- Generics.RepLib.PreludeReps: rMaybe1 :: Rep a_a1we => () -> ctx_af89 a_a1we -> R1 ctx_af89 (Maybe a_a1we)
+ Generics.RepLib.PreludeReps: rMaybe1 :: Rep a_a2Fz => () -> ctx_adrY a_a2Fz -> R1 ctx_adrY (Maybe a_a2Fz)
- Generics.RepLib.PreludeReps: rOrdering1 :: () -> () -> () -> R1 ctx_af8M Ordering
+ Generics.RepLib.PreludeReps: rOrdering1 :: () -> () -> () -> R1 ctx_adsH Ordering
- Generics.RepLib.PreludeReps: rTup3_1 :: (Rep a_12, Rep b_13, Rep c_14) => (ctx_af8W a_12, ctx_af8W b_13, ctx_af8W c_14) -> R1 ctx_af8W ((,,) a_12 b_13 c_14)
+ Generics.RepLib.PreludeReps: rTup3_1 :: (Rep a_12, Rep b_13, Rep c_14) => (ctx_adsR a_12, ctx_adsR b_13, ctx_adsR c_14) -> R1 ctx_adsR ((,,) a_12 b_13 c_14)
- Generics.RepLib.PreludeReps: rTup4_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15) => (ctx_af9f a_12, ctx_af9f b_13, ctx_af9f c_14, ctx_af9f d_15) -> R1 ctx_af9f ((,,,) a_12 b_13 c_14 d_15)
+ Generics.RepLib.PreludeReps: rTup4_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15) => (ctx_adta a_12, ctx_adta b_13, ctx_adta c_14, ctx_adta d_15) -> R1 ctx_adta ((,,,) a_12 b_13 c_14 d_15)
- Generics.RepLib.PreludeReps: rTup5_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15, Rep e_16) => (ctx_af9D a_12, ctx_af9D b_13, ctx_af9D c_14, ctx_af9D d_15, ctx_af9D e_16) -> R1 ctx_af9D ((,,,,) a_12 b_13 c_14 d_15 e_16)
+ Generics.RepLib.PreludeReps: rTup5_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15, Rep e_16) => (ctx_adty a_12, ctx_adty b_13, ctx_adty c_14, ctx_adty d_15, ctx_adty e_16) -> R1 ctx_adty ((,,,,) a_12 b_13 c_14 d_15 e_16)
- Generics.RepLib.PreludeReps: rTup6_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15, Rep e_16, Rep f_17) => (ctx_afa6 a_12, ctx_afa6 b_13, ctx_afa6 c_14, ctx_afa6 d_15, ctx_afa6 e_16, ctx_afa6 f_17) -> R1 ctx_afa6 ((,,,,,) a_12 b_13 c_14 d_15 e_16 f_17)
+ Generics.RepLib.PreludeReps: rTup6_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15, Rep e_16, Rep f_17) => (ctx_adu1 a_12, ctx_adu1 b_13, ctx_adu1 c_14, ctx_adu1 d_15, ctx_adu1 e_16, ctx_adu1 f_17) -> R1 ctx_adu1 ((,,,,,) a_12 b_13 c_14 d_15 e_16 f_17)
- Generics.RepLib.PreludeReps: rTup7_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15, Rep e_16, Rep f_17, Rep g_18) => (ctx_afaE a_12, ctx_afaE b_13, ctx_afaE c_14, ctx_afaE d_15, ctx_afaE e_16, ctx_afaE f_17, ctx_afaE g_18) -> R1 ctx_afaE ((,,,,,,) a_12 b_13 c_14 d_15 e_16 f_17 g_18)
+ Generics.RepLib.PreludeReps: rTup7_1 :: (Rep a_12, Rep b_13, Rep c_14, Rep d_15, Rep e_16, Rep f_17, Rep g_18) => (ctx_aduz a_12, ctx_aduz b_13, ctx_aduz c_14, ctx_aduz d_15, ctx_aduz e_16, ctx_aduz f_17, ctx_aduz g_18) -> R1 ctx_aduz ((,,,,,,) a_12 b_13 c_14 d_15 e_16 f_17 g_18)
- Generics.RepLib.R: (:*:) :: a -> l -> :*: a l
+ Generics.RepLib.R: (:*:) :: a -> l -> (:*:) a l
- Generics.RepLib.R: Equal :: R a -> R b -> R (a :=: b)
+ Generics.RepLib.R: Equal :: R a -> R b -> R (a :~: b)
- Generics.RepLib.R1: Equal1 :: ctx a -> ctx b -> R1 ctx (a :=: b)
+ Generics.RepLib.R1: Equal1 :: ctx a -> ctx b -> R1 ctx (a :~: b)
Files
- Generics/RepLib.hs +5/−1
- Generics/RepLib/Derive.hs +23/−6
- Generics/RepLib/Lib.hs +15/−5
- Generics/RepLib/R.hs +9/−1
- Generics/RepLib/R1.hs +11/−1
- Generics/RepLib/RepAux.hs +20/−0
- RepLib.cabal +9/−5
Generics/RepLib.hs view
@@ -1,5 +1,5 @@ -- OPTIONS -fglasgow-exts -fth -fallow-undecidable-instances-{-# LANGUAGE TemplateHaskell, UndecidableInstances #-}+{-# LANGUAGE TemplateHaskell, UndecidableInstances, CPP #-} ----------------------------------------------------------------------------- -- |@@ -37,7 +37,11 @@ -- ** Derivable type classes written as generic operations module Generics.RepLib.PreludeLib, +#if MIN_VERSION_base(4,7,0)+ (:~:)(..), TestEquality(..)+#else (:=:)(..), EqT(..)+#endif ) where
Generics/RepLib/Derive.hs view
@@ -83,7 +83,7 @@ newtype QN a = QN { unQN :: WriterT (S.Set Int) Q a } #if MIN_VERSION_template_haskell(2,7,0) deriving (Applicative, Functor, Monad, MonadWriter (S.Set Int))-#else +#else deriving (Functor, Monad, MonadWriter (S.Set Int)) #endif @@ -105,11 +105,20 @@ qClassInstances n tys = liftQN $ qClassInstances n tys #endif qLocation = liftQN qLocation- qRunIO io = liftQN $ qRunIO io + qRunIO io = liftQN $ qRunIO io #if MIN_VERSION_template_haskell(2,7,0) qLookupName ns s = liftQN $ qLookupName ns s qAddDependentFile fp = liftQN $ qAddDependentFile fp #endif+#if MIN_VERSION_template_haskell(2,9,0)+ qReifyRoles n = liftQN $ qReifyRoles n+ qReifyAnnotations al = liftQN $ qReifyAnnotations al+ qReifyModule m = liftQN $ qReifyModule m+ qAddTopDecls ds = liftQN $ qAddTopDecls ds+ qAddModFinalizer q = liftQN $ qAddModFinalizer q+ qGetQ = liftQN $ qGetQ+ qPutQ a = liftQN $ qPutQ a+#endif -- Generate the representation for a data constructor. -- As our representation of data constructors evolves, so must this definition.@@ -166,7 +175,11 @@ let (con, args) = decomposeTy ty when (not (null args)) $ tell $ S.singleton (length args) liftQN $ case args of+#if MIN_VERSION_base(4,7,0)+ [] -> do e <- [| testEquality (rep :: R $(varT n)) $(return $ repty ty) |]+#else [] -> do e <- [| eqT (rep :: R $(varT n)) $(return $ repty ty) |]+#endif p <- [p| Just Refl |] return (e,p) _ -> do e <- [| $(varE (mkName $ "destr" ++ show (length args)))@@ -174,7 +187,11 @@ (rep :: R $(appUnits con (length args))) |] p <- conP (mkName $ "Result" ++ show (length args))+#if MIN_VERSION_base(4,7,0)+ [sigP [p| Refl |] [t| $(varT n) :~: $(return ty) |] ]+#else [sigP [p| Refl |] [t| $(varT n) :=: $(return ty) |] ]+#endif return (e,p) -- | Decompose a type into a constructor and a list of arguments.@@ -617,8 +634,8 @@ deriveRess = S.fold (liftM2 (++) . deriveResMaybe) (return []) deriveResMaybe :: Int -> Q [Dec]-deriveResMaybe n = recover - (deriveRes n) +deriveResMaybe n = recover+ (deriveRes n) (reify (mkName $ "Res" ++ show n) >> return []) deriveRes :: Int -> Q [Dec]@@ -701,7 +718,7 @@ -- (Data (DT s1 ((_ :: R b1') :+: (_ :: R b2') :+: MNil)) _) deriveResDestrLPat :: Name -> [Name] -> Pat-deriveResDestrLPat s1 bs = +deriveResDestrLPat s1 bs = ConP 'Data [ ConP 'DT [ VarP s1@@ -713,7 +730,7 @@ -- (Data (DT s2 _) _) deriveResDestrRPat :: Name -> Pat-deriveResDestrRPat s2 = +deriveResDestrRPat s2 = ConP 'Data [ ConP 'DT [ VarP s2, WildP ] , WildP
Generics/RepLib/Lib.hs view
@@ -45,6 +45,9 @@ import Generics.RepLib.PreludeReps() import Generics.RepLib.AbstractReps() +import Control.Applicative (Applicative (..))+import Control.Monad (ap,liftM)+ import Data.List (inits) import Data.Set (Set)@@ -178,7 +181,7 @@ instance (Rep k, Rep a) => Zero (Map k a) where zero = Map.empty- + instance (Rep a) => Zero (Set a) where zero = Set.empty @@ -225,7 +228,7 @@ instance (Ord k, Generate k, Generate a) => Generate (Map k a) where generate 0 = []- generate i = map Map.fromList + generate i = map Map.fromList (inits [ (k, v) | k <- generate (i-1), v <- generate (i-1)]) ------------ Enumerate -------------------------------@@ -248,7 +251,7 @@ enumerateR1 r1 = error ("No way to enumerate type: " ++ show r1) enumerateCons :: [Con EnumerateD a] -> [a]-enumerateCons (Con emb rec:rest) = +enumerateCons (Con emb rec:rest) = (map (to emb) (fromTupM enumerateD rec)) ++ (enumerateCons rest) enumerateCons [] = [] @@ -268,7 +271,7 @@ instance (Ord a, Enumerate a) => Enumerate (Set a) where enumerate = map Set.fromList enumerate instance (Ord k, Enumerate k, Enumerate a) => Enumerate (Map k a) where- enumerate = map Map.fromList + enumerate = map Map.fromList (inits [ (k, v) | k <- enumerate, v <- enumerate]) ----------------- Shrink (from SYB III) -------------------------------@@ -290,6 +293,13 @@ data M a = M a [a] +instance Functor M where+ fmap = liftM++instance Applicative M where+ pure x = M x []+ (<*>) = ap+ instance Monad M where return x = M x [] (M x xs) >>= k = M r (rs1 ++ rs2)@@ -305,7 +315,7 @@ instance (Ord a, Shrink a) => Shrink (Set a) where shrink x = map Set.fromList (shrink (Set.toList x))- + instance (Ord k, Shrink k, Shrink a) => Shrink (Map k a) where shrink m = map Map.fromList (shrink (Map.toList m))
Generics/RepLib/R.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, UndecidableInstances, ExistentialQuantification, TypeOperators, GADTs, TypeSynonymInstances, FlexibleInstances,- ScopedTypeVariables+ ScopedTypeVariables, CPP #-} ----------------------------------------------------------------------------- -- |@@ -32,7 +32,11 @@ Arrow :: (Rep a, Rep b) => R a -> R b -> R (a -> b) Data :: DT -> [Con R a] -> R a Abstract :: DT -> R a+#if MIN_VERSION_base(4,7,0)+ Equal :: (Rep a, Rep b) => R a -> R b -> R (a :~: b)+#else Equal :: (Rep a, Rep b) => R a -> R b -> R (a :=: b)+#endif -- | Representation of a data constructor includes an -- embedding between the datatype and a list of other types@@ -124,7 +128,11 @@ instance Rep IOError where rep = IOError instance Rep a => Rep (IO a) where rep = IO rep instance (Rep a, Rep b) => Rep (a -> b) where rep = Arrow rep rep+#if MIN_VERSION_base(4,7,0)+instance (Rep a, Rep b) => Rep (a :~: b) where rep = Equal rep rep+#else instance (Rep a, Rep b) => Rep (a :=: b) where rep = Equal rep rep+#endif -- Unit
Generics/RepLib/R1.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE +{-# LANGUAGE UndecidableInstances , GADTs , ScopedTypeVariables@@ -6,6 +6,7 @@ , FlexibleInstances , TypeSynonymInstances , TypeOperators+ , CPP #-} {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-} @@ -41,7 +42,12 @@ Arrow1 :: (Rep a, Rep b) => ctx a -> ctx b -> R1 ctx (a -> b) Data1 :: DT -> [Con ctx a] -> R1 ctx a Abstract1 :: DT -> R1 ctx a+#if MIN_VERSION_base(4,7,0)+ Equal1 :: (Rep a, Rep b) => ctx a -> ctx b -> R1 ctx (a :~: b)+#else Equal1 :: (Rep a, Rep b) => ctx a -> ctx b -> R1 ctx (a :=: b)+#endif+ class Sat a where dict :: a class Rep a => Rep1 ctx a where rep1 :: R1 ctx a@@ -98,7 +104,11 @@ Rep1 ctx (a -> b) where rep1 = Arrow1 dict dict instance (Rep a, Rep b, Sat (ctx a), Sat (ctx b)) =>+#if MIN_VERSION_base(4,7,0)+ Rep1 ctx (a :~: b) where rep1 = Equal1 dict dict+#else Rep1 ctx (a :=: b) where rep1 = Equal1 dict dict+#endif -- Data structures
Generics/RepLib/RepAux.hs view
@@ -5,6 +5,7 @@ , GADTs , Rank2Types , TypeOperators+ , CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} -----------------------------------------------------------------------------@@ -44,14 +45,25 @@ import Generics.RepLib.R import Generics.RepLib.R1 import GHC.Base (unsafeCoerce#)+#if MIN_VERSION_base(4,7,0)+import Data.Type.Equality (TestEquality(..), (:~:)(..))+#else import Data.Type.Equality (EqT(..), (:=:)(..))+#endif ------ Casting +#if MIN_VERSION_base(4,7,0)+instance TestEquality R where+ -- testEquality :: R a -> R b -> Maybe (a :~: b)+ testEquality ra rb =+ if eqR ra rb then Just (unsafeCoerce# Refl) else Nothing+#else instance EqT R where -- eqT :: R a -> R b -> Maybe (a :=: b) eqT ra rb = if eqR ra rb then Just (unsafeCoerce# Refl) else Nothing+#endif -- | Determine if two reps are for the same type eqR :: R a -> R b -> Bool@@ -83,7 +95,11 @@ -- | The type-safe cast operation, explicit arguments castR :: R a -> R b -> a -> Maybe b castR ra rb a =+#if MIN_VERSION_base(4,7,0)+ case testEquality ra rb of+#else case eqT ra rb of+#endif Just Refl -> Just a Nothing -> Nothing @@ -94,7 +110,11 @@ -- | Leibniz equality between types, explicit representations gcastR :: forall a b c. R a -> R b -> c a -> Maybe (c b)+#if MIN_VERSION_base(4,7,0)+gcastR ra rb x = case testEquality ra rb of+#else gcastR ra rb x = case eqT ra rb of+#endif Just Refl -> Just x Nothing -> Nothing
RepLib.cabal view
@@ -1,5 +1,5 @@ name: RepLib-version: 0.5.3.1+version: 0.5.3.2 license: BSD3 license-file: LICENSE build-type: Simple@@ -7,7 +7,8 @@ tested-with: GHC == 7.0.4, GHC == 7.2.1, GHC == 7.4.1,- GHC == 7.6.1+ GHC == 7.6.1,+ GHC == 7.8.1 author: Stephanie Weirich maintainer: Brent Yorgey <byorgey@cis.upenn.edu> Chris Casinghino <ccasin@cis.upenn.edu>@@ -25,10 +26,13 @@ Library build-depends: base >= 4.3 && < 5,- template-haskell >= 2.4 && < 2.9,+ template-haskell >= 2.4 && < 2.10, mtl >= 2.0 && < 2.2,- type-equality >= 0.1.0.2 && < 0.2, containers >= 0.4 && < 0.6++ if impl(ghc < 7.8)+ build-depends: type-equality >= 0.1.0.2 && < 0.2+ exposed-modules: Generics.RepLib, Generics.RepLib.R,@@ -48,7 +52,7 @@ OverlappingInstances RankNTypes ScopedTypeVariables- ScopedTypeVariables + ScopedTypeVariables TemplateHaskell UndecidableInstances default-language: Haskell2010