rank2classes 1.4.0.1 → 1.4.1
raw patch · 3 files changed
+16/−11 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Rank2: data Sum (f :: k -> Type) (g :: k -> Type) (a :: k) :: forall k. () => k -> Type -> k -> Type -> k -> Type
- Rank2: instance forall k k1 (g :: (k1 -> *) -> *) (p :: k -> *) (q :: k1 -> k). GHC.Classes.Eq (g (Data.Functor.Compose.Compose p q)) => GHC.Classes.Eq (Rank2.Compose g p q)
- Rank2: instance forall k k1 (g :: (k1 -> *) -> *) (p :: k -> *) (q :: k1 -> k). GHC.Classes.Ord (g (Data.Functor.Compose.Compose p q)) => GHC.Classes.Ord (Rank2.Compose g p q)
- Rank2: instance forall k k1 (g :: (k1 -> *) -> *) (p :: k -> *) (q :: k1 -> k). GHC.Show.Show (g (Data.Functor.Compose.Compose p q)) => GHC.Show.Show (Rank2.Compose g p q)
- Rank2: instance forall k1 k2 (g :: k2 -> *) (f :: k1 -> k2) (a :: k1). GHC.Base.Monoid (g (f a)) => GHC.Base.Monoid (Rank2.Flip g a f)
- Rank2: instance forall k1 k2 (g :: k2 -> *) (f :: k1 -> k2) (a :: k1). GHC.Base.Semigroup (g (f a)) => GHC.Base.Semigroup (Rank2.Flip g a f)
+ Rank2: data Product (f :: k -> Type) (g :: k -> Type) (a :: k)
+ Rank2: data Sum (f :: k -> Type) (g :: k -> Type) (a :: k)
+ Rank2: instance forall k1 k (g :: (k1 -> *) -> *) (p :: k -> *) (q :: k1 -> k). GHC.Classes.Eq (g (Data.Functor.Compose.Compose p q)) => GHC.Classes.Eq (Rank2.Compose g p q)
+ Rank2: instance forall k1 k (g :: (k1 -> *) -> *) (p :: k -> *) (q :: k1 -> k). GHC.Classes.Ord (g (Data.Functor.Compose.Compose p q)) => GHC.Classes.Ord (Rank2.Compose g p q)
+ Rank2: instance forall k1 k (g :: (k1 -> *) -> *) (p :: k -> *) (q :: k1 -> k). GHC.Show.Show (g (Data.Functor.Compose.Compose p q)) => GHC.Show.Show (Rank2.Compose g p q)
+ Rank2: instance forall k1 k2 (g :: k1 -> *) (f :: k2 -> k1) (a :: k2). GHC.Base.Monoid (g (f a)) => GHC.Base.Monoid (Rank2.Flip g a f)
+ Rank2: instance forall k1 k2 (g :: k1 -> *) (f :: k2 -> k1) (a :: k2). GHC.Base.Semigroup (g (f a)) => GHC.Base.Semigroup (Rank2.Flip g a f)
- Rank2: InL :: f a -> Sum
+ Rank2: InL :: f a -> Sum (f :: k -> Type) (g :: k -> Type) (a :: k)
- Rank2: InR :: g a -> Sum
+ Rank2: InR :: g a -> Sum (f :: k -> Type) (g :: k -> Type) (a :: k)
- Rank2: Pair :: f a -> g a -> Product
+ Rank2: Pair :: f a -> g a -> Product (f :: k -> Type) (g :: k -> Type) (a :: k)
Files
- CHANGELOG.md +5/−0
- rank2classes.cabal +1/−1
- src/Rank2/TH.hs +10/−10
CHANGELOG.md view
@@ -1,3 +1,8 @@+Version 1.4.1+---------------+* Fixed the templates for multi-constructor records+* Made Rank2.TH.unsafeDeriveApply even more unsafe+ Version 1.4 --------------- * Added Rank2.Compose :: ((* -> *) -> *) -> (* -> *) -> ((* -> *) -> *)
rank2classes.cabal view
@@ -1,5 +1,5 @@ name: rank2classes-version: 1.4.0.1+version: 1.4.1 synopsis: standard type constructor class hierarchy, only with methods of rank 2 types description: A mirror image of the standard type constructor class hierarchy rooted in 'Functor', except with methods of rank 2
src/Rank2/TH.hs view
@@ -172,7 +172,7 @@ ((,) fieldName <$>) <$> genFmapField (varE f) fieldType (appE (varE fieldName) (varE x)) id constraints <- (concat . (fst <$>)) <$> sequence constraintsAndFields- (,) constraints <$> clause [varP f, bangP (varP x)] body []+ (,) constraints <$> clause [varP f, x `asP` recP name []] body [] genFmapClause (GadtC [name] fieldTypes _resultType@(AppT _ (VarT tyVar))) = do Just (Deriving tyConName _tyVar) <- getQ putQ (Deriving tyConName tyVar)@@ -214,7 +214,7 @@ newNamedField (fieldName, _, fieldType) = fieldExp fieldName (genLiftA2Field unsafely (varE f) fieldType (getFieldOf x) (getFieldOf y) id) where getFieldOf = appE (varE fieldName) . varE- clause [varP f, bangP (varP x), varP y] body []+ clause [varP f, x `asP` recP name [], varP y] body [] genLiftA2Clause unsafely (GadtC [name] fieldTypes _resultType@(AppT _ (VarT tyVar))) = do Just (Deriving tyConName _tyVar) <- getQ putQ (Deriving tyConName tyVar)@@ -235,7 +235,7 @@ | t1 /= VarT typeVar -> genLiftA2Field unsafely fun t2 field1Access field2Access (appE (varE 'liftA2) . wrap) SigT ty _kind -> genLiftA2Field unsafely fun ty field1Access field2Access wrap ParensT ty -> genLiftA2Field unsafely fun ty field1Access field2Access wrap- _ | unsafely -> [| error "Cannot apply liftA2 to field" |]+ _ | unsafely -> field1Access | otherwise -> error ("Cannot apply liftA2 to field of type " <> show fieldType) genLiftA3Clause :: Bool -> Con -> Q Clause@@ -262,7 +262,7 @@ newNamedField (fieldName, _, fieldType) = fieldExp fieldName (genLiftA3Field unsafely (varE f) fieldType (getFieldOf x) (getFieldOf y) (getFieldOf z) id) where getFieldOf = appE (varE fieldName) . varE- clause [varP f, bangP (varP x), varP y, varP z] body []+ clause [varP f, x `asP` recP name [], varP y, varP z] body [] genLiftA3Clause unsafely (GadtC [name] fieldTypes _resultType@(AppT _ (VarT tyVar))) = do Just (Deriving tyConName _tyVar) <- getQ putQ (Deriving tyConName tyVar)@@ -286,7 +286,7 @@ -> genLiftA3Field unsafely fun t2 field1Access field2Access field3Access (appE (varE 'liftA3) . wrap) SigT ty _kind -> genLiftA3Field unsafely fun ty field1Access field2Access field3Access wrap ParensT ty -> genLiftA3Field unsafely fun ty field1Access field2Access field3Access wrap- _ | unsafely -> [| error "Cannot apply liftA3 to field" |]+ _ | unsafely -> field1Access | otherwise -> error ("Cannot apply liftA3 to field of type " <> show fieldType) genApClause :: Bool -> Con -> Q ([Type], Clause)@@ -312,7 +312,7 @@ ((,) fieldName <$>) <$> genApField unsafely fieldType (getFieldOf x) (getFieldOf y) id where getFieldOf = appE (varE fieldName) . varE constraints <- (concat . (fst <$>)) <$> sequence constraintsAndFields- (,) constraints <$> clause [varP x, bangP (varP y)] body []+ (,) constraints <$> clause [x `asP` recP name [], varP y] body [] genApClause unsafely (GadtC [name] fieldTypes _resultType@(AppT _ (VarT tyVar))) = do Just (Deriving tyConName _tyVar) <- getQ putQ (Deriving tyConName tyVar)@@ -333,7 +333,7 @@ AppT t1 t2 | t1 /= VarT typeVar -> genApField unsafely t2 field1Access field2Access (appE (varE 'liftA2) . wrap) SigT ty _kind -> genApField unsafely ty field1Access field2Access wrap ParensT ty -> genApField unsafely ty field1Access field2Access wrap- _ | unsafely -> (,) [] <$> [| error ("Cannot apply ap to field" <> $(pure $ LitE $ StringL $ show fieldType)) |]+ _ | unsafely -> (,) [] <$> field1Access | otherwise -> error ("Cannot apply ap to field of type " <> show fieldType) genPureClause :: Con -> Q ([Type], Clause)@@ -378,7 +378,7 @@ newField x (_, fieldType) = genFoldMapField f fieldType (varE x) id constraints <- (concat . (fst <$>)) <$> sequence constraintsAndFields (,) constraints <$> clause pats (normalB body) []-genFoldMapClause (RecC _name fields) = do+genFoldMapClause (RecC name fields) = do f <- newName "f" x <- newName "x" let body | null fields = [| mempty |]@@ -388,7 +388,7 @@ newField :: VarBangType -> Q ([Type], Exp) newField (fieldName, _, fieldType) = genFoldMapField f fieldType (appE (varE fieldName) (varE x)) id constraints <- (concat . (fst <$>)) <$> sequence constraintsAndFields- (,) constraints <$> clause [varP f, bangP (varP x)] (normalB body) []+ (,) constraints <$> clause [varP f, x `asP` recP name []] (normalB body) [] genFoldMapClause (GadtC [name] fieldTypes _resultType@(AppT _ (VarT tyVar))) = do Just (Deriving tyConName _tyVar) <- getQ putQ (Deriving tyConName tyVar)@@ -437,7 +437,7 @@ newField :: VarBangType -> Q ([Type], Exp) newField (fieldName, _, fieldType) = genTraverseField (varE f) fieldType (appE (varE fieldName) (varE x)) id constraints <- (concat . (fst <$>)) <$> sequence constraintsAndFields- (,) constraints <$> clause [varP f, bangP (varP x)] body []+ (,) constraints <$> clause [varP f, x `asP` recP name []] body [] genTraverseClause (GadtC [name] fieldTypes _resultType@(AppT _ (VarT tyVar))) = do Just (Deriving tyConName _tyVar) <- getQ putQ (Deriving tyConName tyVar)