packages feed

generics-sop 0.3.1.0 → 0.3.2.0

raw patch · 8 files changed

+631/−48 lines, 8 filesdep −taggeddep ~template-haskelldep ~transformersdep ~transformers-compatPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: tagged

Dependency ranges changed: template-haskell, transformers, transformers-compat

API changes (from Hackage documentation)

- Generics.SOP: class (f x, g x) => And f g x
- Generics.SOP: class (f (g x)) => Compose f g x
- Generics.SOP: data Proxy k (t :: k) :: forall k. k -> *
- Generics.SOP.BasicFunctors: instance forall l (f :: l -> GHC.Types.*) k (g :: k -> l) (p :: k). GHC.Generics.Generic ((Generics.SOP.BasicFunctors.:.:) f g p)
- Generics.SOP.Constraint: class (f x, g x) => And f g x
- Generics.SOP.Constraint: class (f (g x)) => Compose f g x
- Generics.SOP.Constraint: instance forall b a (f :: a -> b -> GHC.Types.Constraint) (xss :: [[a]]) (yss :: [[b]]). (Generics.SOP.Constraint.AllZipF (Generics.SOP.Constraint.AllZip f) xss yss, Generics.SOP.Sing.SListI xss, Generics.SOP.Sing.SListI yss, Generics.SOP.Constraint.SameShapeAs xss yss, Generics.SOP.Constraint.SameShapeAs yss xss) => Generics.SOP.Constraint.AllZip2 f xss yss
- Generics.SOP.Constraint: instance forall k k1 (f :: k1 -> GHC.Types.Constraint) (g :: k -> k1) (x :: k). f (g x) => Generics.SOP.Constraint.Compose f g x
- Generics.SOP.Constraint: instance forall k k1 k2 (f :: k2 -> k1) (x :: k2) (g :: k -> k1) (y :: k). GHC.Types.Coercible (f x) (g y) => Generics.SOP.Constraint.LiftedCoercible f g x y
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic ((Generics.SOP.BasicFunctors.:.:) f0 g0 p0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Complex.Complex a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Either.Either a0 b0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Fixed.Fixed a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.Dual a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.Endo a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.First a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.Last a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.Product a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.Sum a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Ord.Down a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Proxy.Proxy t0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (GHC.Base.Maybe a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Generics.SOP.BasicFunctors.I a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Generics.SOP.BasicFunctors.K a0 b0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (System.Console.GetOpt.ArgDescr a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (System.Console.GetOpt.ArgOrder a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (System.Console.GetOpt.OptDescr a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280, t290)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280, t290, t300)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280, t290, t300, t310)
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic Data.Monoid.All
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic Data.Monoid.Any
- Generics.SOP.Instances: instance Generics.SOP.Universe.Generic [a0]
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo ((Generics.SOP.BasicFunctors.:.:) f0 g0 p0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Complex.Complex a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Either.Either a0 b0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Fixed.Fixed a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.Dual a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.Endo a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.First a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.Last a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.Product a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.Sum a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Ord.Down a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Proxy.Proxy t0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (GHC.Base.Maybe a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Generics.SOP.BasicFunctors.I a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Generics.SOP.BasicFunctors.K a0 b0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (System.Console.GetOpt.ArgDescr a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (System.Console.GetOpt.ArgOrder a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (System.Console.GetOpt.OptDescr a0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280, t290)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280, t290, t300)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a0, b0, c0, d0, e0, f0, g0, h0, i0, j0, k0, l0, m0, n0, o0, p0, q0, r0, s0, t0, u0, v0, w0, x0, y0, z0, t280, t290, t300, t310)
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo Data.Monoid.All
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo Data.Monoid.Any
- Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo [a0]
- Generics.SOP.NP: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). Control.DeepSeq.NFData (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => Control.DeepSeq.NFData (Generics.SOP.NP.POP f xss)
- Generics.SOP.NP: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). GHC.Classes.Eq (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => GHC.Classes.Eq (Generics.SOP.NP.POP f xss)
- Generics.SOP.NP: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). GHC.Classes.Ord (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => GHC.Classes.Ord (Generics.SOP.NP.POP f xss)
- Generics.SOP.NP: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). GHC.Show.Show (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => GHC.Show.Show (Generics.SOP.NP.POP f xss)
- Generics.SOP.NS: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). Control.DeepSeq.NFData (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => Control.DeepSeq.NFData (Generics.SOP.NS.SOP f xss)
- Generics.SOP.NS: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). GHC.Classes.Eq (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => GHC.Classes.Eq (Generics.SOP.NS.SOP f xss)
- Generics.SOP.NS: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). GHC.Classes.Ord (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => GHC.Classes.Ord (Generics.SOP.NS.SOP f xss)
- Generics.SOP.NS: instance forall k (f :: k -> GHC.Types.*) (xss :: [[k]]). GHC.Show.Show (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => GHC.Show.Show (Generics.SOP.NS.SOP f xss)
- Generics.SOP.Type.Metadata: instance (GHC.TypeLits.KnownSymbol s, Generics.SOP.Type.Metadata.DemoteAssociativity a, GHC.TypeLits.KnownNat f) => Generics.SOP.Type.Metadata.DemoteConstructorInfo ('Generics.SOP.Type.Metadata.Infix s a f) '[y, z]
+ Generics.SOP: ccompare_NS :: forall c proxy r f g xs. (All c xs) => proxy c -> r -> (forall x. c x => f x -> g x -> r) -> r -> NS f xs -> NS g xs -> r
+ Generics.SOP: ccompare_SOP :: forall c proxy r f g xss. (All2 c xss) => proxy c -> r -> (forall xs. All c xs => NP f xs -> NP g xs -> r) -> r -> SOP f xss -> SOP g xss -> r
+ Generics.SOP: class (f x, g x) => ( f `And` g ) x
+ Generics.SOP: class HTraverse_ (h :: (k -> *) -> (l -> *))
+ Generics.SOP: compare_NS :: forall r f g xs. r -> (forall x. f x -> g x -> r) -> r -> NS f xs -> NS g xs -> r
+ Generics.SOP: compare_SOP :: forall r f g xss. r -> (forall xs. NP f xs -> NP g xs -> r) -> r -> SOP f xss -> SOP g xss -> r
+ Generics.SOP: data Proxy (t :: k) :: forall k. () => k -> *
+ Generics.SOP: hcfoldMap :: (HTraverse_ h, AllN h c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> h f xs -> m
+ Generics.SOP: hcfor :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> h f xs -> (forall a. c a => f a -> g a) -> g (h I xs)
+ Generics.SOP: hcfor_ :: (HTraverse_ h, AllN h c xs, Applicative g) => proxy c -> h f xs -> (forall a. c a => f a -> g ()) -> g ()
+ Generics.SOP: hctraverse :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> h f xs -> g (h I xs)
+ Generics.SOP: hctraverse' :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> h f xs -> g (h f' xs)
+ Generics.SOP: hctraverse_ :: (HTraverse_ h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g ()) -> h f xs -> g ()
+ Generics.SOP: htraverse' :: (HSequence h, SListIN h xs, Applicative g) => (forall a. f a -> g (f' a)) -> h f xs -> g (h f' xs)
+ Generics.SOP: htraverse_ :: (HTraverse_ h, SListIN h xs, Applicative g) => (forall a. f a -> g ()) -> h f xs -> g ()
+ Generics.SOP.BasicFunctors: instance (Control.DeepSeq.NFData1 f, Control.DeepSeq.NFData1 g) => Control.DeepSeq.NFData1 (f Generics.SOP.BasicFunctors.:.: g)
+ Generics.SOP.BasicFunctors: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData1 (Generics.SOP.BasicFunctors.K a)
+ Generics.SOP.BasicFunctors: instance Control.DeepSeq.NFData1 Generics.SOP.BasicFunctors.I
+ Generics.SOP.BasicFunctors: instance Control.DeepSeq.NFData2 Generics.SOP.BasicFunctors.K
+ Generics.SOP.BasicFunctors: instance forall l (f :: l -> *) k (g :: k -> l) (p :: k). GHC.Generics.Generic ((Generics.SOP.BasicFunctors.:.:) f g p)
+ Generics.SOP.Classes: class HTraverse_ (h :: (k -> *) -> (l -> *))
+ Generics.SOP.Classes: hcfoldMap :: (HTraverse_ h, AllN h c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> h f xs -> m
+ Generics.SOP.Classes: hcfor :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> h f xs -> (forall a. c a => f a -> g a) -> g (h I xs)
+ Generics.SOP.Classes: hcfor_ :: (HTraverse_ h, AllN h c xs, Applicative g) => proxy c -> h f xs -> (forall a. c a => f a -> g ()) -> g ()
+ Generics.SOP.Classes: hctraverse :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> h f xs -> g (h I xs)
+ Generics.SOP.Classes: hctraverse' :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> h f xs -> g (h f' xs)
+ Generics.SOP.Classes: hctraverse_ :: (HTraverse_ h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g ()) -> h f xs -> g ()
+ Generics.SOP.Classes: htraverse' :: (HSequence h, SListIN h xs, Applicative g) => (forall a. f a -> g (f' a)) -> h f xs -> g (h f' xs)
+ Generics.SOP.Classes: htraverse_ :: (HTraverse_ h, SListIN h xs, Applicative g) => (forall a. f a -> g ()) -> h f xs -> g ()
+ Generics.SOP.Constraint: class (f (g x)) => ( f `Compose` g ) x
+ Generics.SOP.Constraint: instance forall a b (f :: a -> b -> GHC.Types.Constraint) (xss :: [[a]]) (yss :: [[b]]). (Generics.SOP.Constraint.AllZipF (Generics.SOP.Constraint.AllZip f) xss yss, Generics.SOP.Sing.SListI xss, Generics.SOP.Sing.SListI yss, Generics.SOP.Constraint.SameShapeAs xss yss, Generics.SOP.Constraint.SameShapeAs yss xss) => Generics.SOP.Constraint.AllZip2 f xss yss
+ Generics.SOP.Constraint: instance forall k1 k2 (f :: k2 -> GHC.Types.Constraint) (g :: k1 -> k2) (x :: k1). f (g x) => Generics.SOP.Constraint.Compose f g x
+ Generics.SOP.Constraint: instance forall k1 k2 k0 (f :: k2 -> k0) (x :: k2) (g :: k1 -> k0) (y :: k1). GHC.Types.Coercible (f x) (g y) => Generics.SOP.Constraint.LiftedCoercible f g x y
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic ((Generics.SOP.BasicFunctors.:.:) f g p)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Complex.Complex a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Either.Either a b)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Fixed.Fixed a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.First a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Monoid.Last a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Ord.Down a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Proxy.Proxy t)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Semigroup.Internal.Dual a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Semigroup.Internal.Endo a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Semigroup.Internal.Product a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Data.Semigroup.Internal.Sum a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (GHC.Base.Maybe a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Generics.SOP.BasicFunctors.I a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (Generics.SOP.BasicFunctors.K a b)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (System.Console.GetOpt.ArgDescr a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (System.Console.GetOpt.ArgOrder a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (System.Console.GetOpt.OptDescr a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28, t29)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic Data.Semigroup.Internal.All
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic Data.Semigroup.Internal.Any
+ Generics.SOP.Instances: instance Generics.SOP.Universe.Generic [a]
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo ((Generics.SOP.BasicFunctors.:.:) f g p)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Complex.Complex a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Either.Either a b)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Fixed.Fixed a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.First a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Monoid.Last a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Ord.Down a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Proxy.Proxy t)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Semigroup.Internal.Dual a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Semigroup.Internal.Endo a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Semigroup.Internal.Product a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Data.Semigroup.Internal.Sum a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (GHC.Base.Maybe a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Generics.SOP.BasicFunctors.I a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (Generics.SOP.BasicFunctors.K a b)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (System.Console.GetOpt.ArgDescr a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (System.Console.GetOpt.ArgOrder a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (System.Console.GetOpt.OptDescr a)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28, t29)
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo Data.Semigroup.Internal.All
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo Data.Semigroup.Internal.Any
+ Generics.SOP.Instances: instance Generics.SOP.Universe.HasDatatypeInfo [a]
+ Generics.SOP.NP: cfoldMap_NP :: (All c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> NP f xs -> m
+ Generics.SOP.NP: cfoldMap_POP :: (All2 c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> POP f xs -> m
+ Generics.SOP.NP: ctraverse'_NP :: forall c proxy xs f f' g. (All c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> NP f xs -> g (NP f' xs)
+ Generics.SOP.NP: ctraverse'_POP :: (All2 c xss, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> POP f xss -> g (POP f' xss)
+ Generics.SOP.NP: ctraverse_NP :: (All c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> NP f xs -> g (NP I xs)
+ Generics.SOP.NP: ctraverse_POP :: (All2 c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> POP f xs -> g (POP I xs)
+ Generics.SOP.NP: ctraverse__NP :: forall c proxy xs f g. (All c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g ()) -> NP f xs -> g ()
+ Generics.SOP.NP: ctraverse__POP :: forall c proxy xss f g. (All2 c xss, Applicative g) => proxy c -> (forall a. c a => f a -> g ()) -> POP f xss -> g ()
+ Generics.SOP.NP: instance Generics.SOP.Classes.HTraverse_ Generics.SOP.NP.NP
+ Generics.SOP.NP: instance Generics.SOP.Classes.HTraverse_ Generics.SOP.NP.POP
+ Generics.SOP.NP: instance forall k (f :: k -> *) (xss :: [[k]]). Control.DeepSeq.NFData (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => Control.DeepSeq.NFData (Generics.SOP.NP.POP f xss)
+ Generics.SOP.NP: instance forall k (f :: k -> *) (xss :: [[k]]). GHC.Classes.Eq (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => GHC.Classes.Eq (Generics.SOP.NP.POP f xss)
+ Generics.SOP.NP: instance forall k (f :: k -> *) (xss :: [[k]]). GHC.Classes.Ord (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => GHC.Classes.Ord (Generics.SOP.NP.POP f xss)
+ Generics.SOP.NP: instance forall k (f :: k -> *) (xss :: [[k]]). GHC.Show.Show (Generics.SOP.NP.NP (Generics.SOP.NP.NP f) xss) => GHC.Show.Show (Generics.SOP.NP.POP f xss)
+ Generics.SOP.NP: traverse'_NP :: forall xs f f' g. (SListI xs, Applicative g) => (forall a. f a -> g (f' a)) -> NP f xs -> g (NP f' xs)
+ Generics.SOP.NP: traverse'_POP :: (SListI2 xss, Applicative g) => (forall a. f a -> g (f' a)) -> POP f xss -> g (POP f' xss)
+ Generics.SOP.NP: traverse__NP :: forall xs f g. (SListI xs, Applicative g) => (forall a. f a -> g ()) -> NP f xs -> g ()
+ Generics.SOP.NP: traverse__POP :: forall xss f g. (SListI2 xss, Applicative g) => (forall a. f a -> g ()) -> POP f xss -> g ()
+ Generics.SOP.NS: ccompare_NS :: forall c proxy r f g xs. (All c xs) => proxy c -> r -> (forall x. c x => f x -> g x -> r) -> r -> NS f xs -> NS g xs -> r
+ Generics.SOP.NS: ccompare_SOP :: forall c proxy r f g xss. (All2 c xss) => proxy c -> r -> (forall xs. All c xs => NP f xs -> NP g xs -> r) -> r -> SOP f xss -> SOP g xss -> r
+ Generics.SOP.NS: cfoldMap_NS :: forall c proxy f xs m. (All c xs) => proxy c -> (forall a. c a => f a -> m) -> NS f xs -> m
+ Generics.SOP.NS: cfoldMap_SOP :: (All2 c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> SOP f xs -> m
+ Generics.SOP.NS: compare_NS :: forall r f g xs. r -> (forall x. f x -> g x -> r) -> r -> NS f xs -> NS g xs -> r
+ Generics.SOP.NS: compare_SOP :: forall r f g xss. r -> (forall xs. NP f xs -> NP g xs -> r) -> r -> SOP f xss -> SOP g xss -> r
+ Generics.SOP.NS: ctraverse'_NS :: forall c proxy xs f f' g. (All c xs, Functor g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> NS f xs -> g (NS f' xs)
+ Generics.SOP.NS: ctraverse'_SOP :: (All2 c xss, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> SOP f xss -> g (SOP f' xss)
+ Generics.SOP.NS: ctraverse_NS :: (All c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> NP f xs -> g (NP I xs)
+ Generics.SOP.NS: ctraverse_SOP :: (All2 c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> POP f xs -> g (POP I xs)
+ Generics.SOP.NS: ctraverse__NS :: forall c proxy xs f g. (All c xs) => proxy c -> (forall a. c a => f a -> g ()) -> NS f xs -> g ()
+ Generics.SOP.NS: ctraverse__SOP :: forall c proxy xss f g. (All2 c xss, Applicative g) => proxy c -> (forall a. c a => f a -> g ()) -> SOP f xss -> g ()
+ Generics.SOP.NS: instance Generics.SOP.Classes.HTraverse_ Generics.SOP.NS.NS
+ Generics.SOP.NS: instance Generics.SOP.Classes.HTraverse_ Generics.SOP.NS.SOP
+ Generics.SOP.NS: instance forall k (f :: k -> *) (xss :: [[k]]). Control.DeepSeq.NFData (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => Control.DeepSeq.NFData (Generics.SOP.NS.SOP f xss)
+ Generics.SOP.NS: instance forall k (f :: k -> *) (xss :: [[k]]). GHC.Classes.Eq (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => GHC.Classes.Eq (Generics.SOP.NS.SOP f xss)
+ Generics.SOP.NS: instance forall k (f :: k -> *) (xss :: [[k]]). GHC.Classes.Ord (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => GHC.Classes.Ord (Generics.SOP.NS.SOP f xss)
+ Generics.SOP.NS: instance forall k (f :: k -> *) (xss :: [[k]]). GHC.Show.Show (Generics.SOP.NS.NS (Generics.SOP.NP.NP f) xss) => GHC.Show.Show (Generics.SOP.NS.SOP f xss)
+ Generics.SOP.NS: traverse'_NS :: forall xs f f' g. (SListI xs, Functor g) => (forall a. f a -> g (f' a)) -> NS f xs -> g (NS f' xs)
+ Generics.SOP.NS: traverse'_SOP :: (SListI2 xss, Applicative g) => (forall a. f a -> g (f' a)) -> SOP f xss -> g (SOP f' xss)
+ Generics.SOP.NS: traverse__NS :: forall xs f g. (SListI xs) => (forall a. f a -> g ()) -> NS f xs -> g ()
+ Generics.SOP.NS: traverse__SOP :: forall xss f g. (SListI2 xss, Applicative g) => (forall a. f a -> g ()) -> SOP f xss -> g ()
+ Generics.SOP.Type.Metadata: instance (GHC.TypeLits.KnownSymbol s, Generics.SOP.Type.Metadata.DemoteAssociativity a, GHC.TypeNats.KnownNat f) => Generics.SOP.Type.Metadata.DemoteConstructorInfo ('Generics.SOP.Type.Metadata.Infix s a f) '[y, z]
- Generics.SOP: Fn :: (f a -> g a) -> (-.->) f g a
+ Generics.SOP: Fn :: f a -> g a -> (-.->) f g a
- Generics.SOP: Proxy :: Proxy k
+ Generics.SOP: Proxy :: Proxy
- Generics.SOP: class (All SListI (Code a)) => Generic (a :: *) where type Code a :: [[*]] type Code a = GCode a from = gfrom to = gto where {
+ Generics.SOP: class (All SListI (Code a)) => Generic (a :: *) where {
- Generics.SOP: class HasDatatypeInfo a where type DatatypeInfoOf a :: DatatypeInfo type DatatypeInfoOf a = GDatatypeInfoOf a datatypeInfo = gdatatypeInfo where {
+ Generics.SOP: class HasDatatypeInfo a where {
- Generics.SOP: data Associativity :: *
+ Generics.SOP: data Associativity
- Generics.SOP: fn_2 :: (f a -> f' a -> f'' a) -> (f -.-> (f' -.-> f'')) a
+ Generics.SOP: fn_2 :: (f a -> f' a -> f'' a) -> (f -.-> f' -.-> f'') a
- Generics.SOP: fn_3 :: (f a -> f' a -> f'' a -> f''' a) -> (f -.-> (f' -.-> (f'' -.-> f'''))) a
+ Generics.SOP: fn_3 :: (f a -> f' a -> f'' a -> f''' a) -> (f -.-> f' -.-> f'' -.-> f''') a
- Generics.SOP: fn_4 :: (f a -> f' a -> f'' a -> f''' a -> f'''' a) -> (f -.-> (f' -.-> (f'' -.-> (f''' -.-> f'''')))) a
+ Generics.SOP: fn_4 :: (f a -> f' a -> f'' a -> f''' a -> f'''' a) -> (f -.-> f' -.-> f'' -.-> f''' -.-> f'''') a
- Generics.SOP: hapInjs :: (HApInjs h, SListIN h xs) => Prod h f xs -> [h f xs]
+ Generics.SOP: hapInjs :: (HApInjs h, (SListIN h xs)) => Prod h f xs -> [h f xs]
- Generics.SOP: hcexpand :: (HExpand h, AllN (Prod h) c xs) => proxy c -> (forall x. c x => f x) -> h f xs -> Prod h f xs
+ Generics.SOP: hcexpand :: (HExpand h, (AllN (Prod h) c xs)) => proxy c -> (forall x. c x => f x) -> h f xs -> Prod h f xs
- Generics.SOP: hcpure :: (HPure h, AllN h c xs) => proxy c -> (forall a. c a => f a) -> h f xs
+ Generics.SOP: hcpure :: (HPure h, (AllN h c xs)) => proxy c -> (forall a. c a => f a) -> h f xs
- Generics.SOP: hexpand :: (HExpand h, SListIN (Prod h) xs) => (forall x. f x) -> h f xs -> Prod h f xs
+ Generics.SOP: hexpand :: (HExpand h, (SListIN (Prod h) xs)) => (forall x. f x) -> h f xs -> Prod h f xs
- Generics.SOP: newtype POP (f :: k -> *) (xss :: [[k]])
+ Generics.SOP: newtype POP (f :: (k -> *)) (xss :: [[k]])
- Generics.SOP: newtype SOP (f :: k -> *) (xss :: [[k]])
+ Generics.SOP: newtype SOP (f :: (k -> *)) (xss :: [[k]])
- Generics.SOP.Classes: Fn :: (f a -> g a) -> (-.->) f g a
+ Generics.SOP.Classes: Fn :: f a -> g a -> (-.->) f g a
- Generics.SOP.Classes: fn_2 :: (f a -> f' a -> f'' a) -> (f -.-> (f' -.-> f'')) a
+ Generics.SOP.Classes: fn_2 :: (f a -> f' a -> f'' a) -> (f -.-> f' -.-> f'') a
- Generics.SOP.Classes: fn_3 :: (f a -> f' a -> f'' a -> f''' a) -> (f -.-> (f' -.-> (f'' -.-> f'''))) a
+ Generics.SOP.Classes: fn_3 :: (f a -> f' a -> f'' a -> f''' a) -> (f -.-> f' -.-> f'' -.-> f''') a
- Generics.SOP.Classes: fn_4 :: (f a -> f' a -> f'' a -> f''' a -> f'''' a) -> (f -.-> (f' -.-> (f'' -.-> (f''' -.-> f'''')))) a
+ Generics.SOP.Classes: fn_4 :: (f a -> f' a -> f'' a -> f''' a -> f'''' a) -> (f -.-> f' -.-> f'' -.-> f''' -.-> f'''') a
- Generics.SOP.Classes: hapInjs :: (HApInjs h, SListIN h xs) => Prod h f xs -> [h f xs]
+ Generics.SOP.Classes: hapInjs :: (HApInjs h, (SListIN h xs)) => Prod h f xs -> [h f xs]
- Generics.SOP.Classes: hcexpand :: (HExpand h, AllN (Prod h) c xs) => proxy c -> (forall x. c x => f x) -> h f xs -> Prod h f xs
+ Generics.SOP.Classes: hcexpand :: (HExpand h, (AllN (Prod h) c xs)) => proxy c -> (forall x. c x => f x) -> h f xs -> Prod h f xs
- Generics.SOP.Classes: hcpure :: (HPure h, AllN h c xs) => proxy c -> (forall a. c a => f a) -> h f xs
+ Generics.SOP.Classes: hcpure :: (HPure h, (AllN h c xs)) => proxy c -> (forall a. c a => f a) -> h f xs
- Generics.SOP.Classes: hexpand :: (HExpand h, SListIN (Prod h) xs) => (forall x. f x) -> h f xs -> Prod h f xs
+ Generics.SOP.Classes: hexpand :: (HExpand h, (SListIN (Prod h) xs)) => (forall x. f x) -> h f xs -> Prod h f xs
- Generics.SOP.Classes: newtype (-.->) f g a
+ Generics.SOP.Classes: newtype ( f (-.->) g ) a
- Generics.SOP.Constraint: data Constraint :: *
+ Generics.SOP.Constraint: data Constraint
- Generics.SOP.Metadata: data Associativity :: *
+ Generics.SOP.Metadata: data Associativity
- Generics.SOP.NP: newtype POP (f :: k -> *) (xss :: [[k]])
+ Generics.SOP.NP: newtype POP (f :: (k -> *)) (xss :: [[k]])
- Generics.SOP.NS: newtype SOP (f :: k -> *) (xss :: [[k]])
+ Generics.SOP.NS: newtype SOP (f :: (k -> *)) (xss :: [[k]])
- Generics.SOP.Type.Metadata: data Associativity :: *
+ Generics.SOP.Type.Metadata: data Associativity
- Generics.SOP.Universe: class (All SListI (Code a)) => Generic (a :: *) where type Code a :: [[*]] type Code a = GCode a from = gfrom to = gto where {
+ Generics.SOP.Universe: class (All SListI (Code a)) => Generic (a :: *) where {
- Generics.SOP.Universe: class HasDatatypeInfo a where type DatatypeInfoOf a :: DatatypeInfo type DatatypeInfoOf a = GDatatypeInfoOf a datatypeInfo = gdatatypeInfo where {
+ Generics.SOP.Universe: class HasDatatypeInfo a where {

Files

CHANGELOG.md view
@@ -1,6 +1,23 @@+# 0.3.2.0 (2018-01-08)++* Make TH `deriveGenericFunctions` work properly with+  parameterized types (note that the more widely used+  `deriveGeneric` was already working correctly).++* Make TH `deriveGeneric` work properly with empty+  types.++* Add `compare_NS`, `ccompare_NS`, `compare_SOP`, and+  `ccompare_SOP` to better support comparison of sum+  structures.++* Add `hctraverse_` and `hctraverse'` as well as their+  unconstrained variants and a number of derived functions,+  to support effectful traversals.+ # 0.3.1.0 (2017-06-11) -* Add AllZip, htrans, hcoerce, hfromI, htoI.+* Add `AllZip`, `htrans`, `hcoerce`, `hfromI`, `htoI`.   These functions are for converting between related   structures that do not have common signatures. 
+ doctest.sh view
@@ -0,0 +1,24 @@+#!/bin/sh++set -ex++doctest --preserve-it \+  -XCPP \+  -XScopedTypeVariables \+  -XTypeFamilies \+  -XRankNTypes \+  -XTypeOperators \+  -XGADTs \+  -XConstraintKinds \+  -XMultiParamTypeClasses \+  -XTypeSynonymInstances \+  -XFlexibleInstances \+  -XFlexibleContexts \+  -XDeriveFunctor \+  -XDeriveFoldable \+  -XDeriveTraversable \+  -XDefaultSignatures \+  -XKindSignatures \+  -XDataKinds \+  -XFunctionalDependencies \+  $(find src -name '*.hs')
generics-sop.cabal view
@@ -1,5 +1,5 @@ name:                generics-sop-version:             0.3.1.0+version:             0.3.2.0 synopsis:            Generic Programming using True Sums of Products description:   A library to support the definition of generic functions.@@ -36,8 +36,8 @@ category:            Generics build-type:          Simple cabal-version:       >=1.10-extra-source-files:  CHANGELOG.md-tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1, GHC == 8.0.2, GHC == 8.1.*+extra-source-files:  CHANGELOG.md doctest.sh+tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1, GHC == 8.0.2, GHC == 8.2.1, GHC == 8.2.2, GHC == 8.3.*  source-repository head   type:                git@@ -60,11 +60,9 @@                        Generics.SOP.Universe                        Generics.SOP.Sing   build-depends:       base                 >= 4.7  && < 5,-                       template-haskell     >= 2.8  && < 2.13,+                       template-haskell     >= 2.8  && < 2.14,                        ghc-prim             >= 0.3  && < 0.6,                        deepseq              >= 1.3  && < 1.5-  if !impl (ghc >= 7.8)-    build-depends:     tagged               >= 0.7  && < 0.9   if !impl (ghc >= 8.0)     build-depends:     transformers-compat  >= 0.3  && < 0.6,                        transformers         >= 0.3  && < 0.6@@ -90,8 +88,7 @@                        KindSignatures                        DataKinds                        FunctionalDependencies-  if impl (ghc >= 7.8)-    default-extensions:  AutoDeriveTypeable+                       AutoDeriveTypeable   other-extensions:    OverloadedStrings                        PolyKinds                        UndecidableInstances
src/Generics/SOP.hs view
@@ -145,16 +145,20 @@ -- -- @ -- grnf :: ('Generic' a, 'All2' NFData ('Code' a)) => a -> ()--- grnf = 'rnf' . 'hcollapse' . 'hcliftA' ('Proxy' :: 'Proxy' NFData) (\\ ('I' x) -> 'K' (rnf x)) . 'from'+-- grnf = 'rnf' . 'hcollapse' . 'hcmap' ('Proxy' :: 'Proxy' NFData) ('mapIK' rnf) . 'from' -- @ --+-- 'mapIK' and friends ('mapII', 'mapKI', etc.) are small helpers for working+-- with 'I' and 'K' functors, for example 'mapIK' is defined as+-- @'mapIK' f = \\ ('I' x) -> 'K' (f x)@+-- -- The following interaction should provide an idea of the individual -- transformation steps: -- -- >>> let x = G 2.5 'A' False :: B Double -- >>> from x -- SOP (S (Z (I 2.5 :* I 'A' :* I False :* Nil)))--- >>> hcliftA (Proxy :: Proxy NFData) (\ (I x) -> K (rnf x)) it+-- >>> hcmap (Proxy :: Proxy NFData) (mapIK rnf) it -- SOP (S (Z (K () :* K () :* K () :* Nil))) -- >>> hcollapse it -- [(),(),()]@@ -162,7 +166,7 @@ -- () -- -- The 'from' call converts into the structural representation.--- Via 'hcliftA', we apply 'rnf' to all the components. The result+-- Via 'hcmap', we apply 'rnf' to all the components. The result -- is a sum of products of the same shape, but the components are -- no longer heterogeneous ('I'), but homogeneous (@'K' ()@). A -- homogeneous structure can be collapsed ('hcollapse') into a@@ -179,6 +183,7 @@ -- () -- >>> grnf (G 2.5 undefined False) -- *** Exception: Prelude.undefined+-- ... -- -- Note that the type of 'grnf' requires that all components of the -- type are in the 'Control.DeepSeq.NFData' class. For a recursive@@ -291,13 +296,23 @@   , hcliftA'   , hcliftA2'   , hcliftA3'+    -- ** Comparison+  , compare_NS+  , ccompare_NS+  , compare_SOP+  , ccompare_SOP     -- ** Collapsing   , CollapseTo   , HCollapse(..)-    -- ** Sequencing+    -- ** Folding and sequencing+  , HTraverse_(..)+  , hcfoldMap+  , hcfor_   , HSequence(..)   , hsequence   , hsequenceK+  , hctraverse+  , hcfor     -- ** Expanding sums to products   , HExpand(..)     -- ** Transformation of index lists and coercions@@ -376,3 +391,15 @@ import Generics.SOP.Universe import Generics.SOP.Sing +-- $setup+--+-- >>> :set -XDeriveGeneric+-- >>> import qualified GHC.Generics as GHC+-- >>> import Generics.SOP+-- >>> import Control.DeepSeq+-- >>> data B a = F | G a Char Bool deriving (Show, GHC.Generic)+-- >>> data A   = C Bool | D A Int | E (B ()) deriving (Show, GHC.Generic)+-- >>> instance Generic A     -- empty+-- >>> instance Generic (B a) -- empty+--+-- >>> let grnf = rnf . hcollapse . hcmap (Proxy :: Proxy NFData) (\ (I x) -> K (rnf x)) . from
src/Generics/SOP/Classes.hs view
@@ -58,11 +58,16 @@     -- * Collapsing homogeneous structures   , CollapseTo   , HCollapse(..)-    -- * Sequencing effects+    -- * Folding and sequencing+  , HTraverse_(..)   , HSequence(..)     -- ** Derived functions+  , hcfoldMap+  , hcfor_   , hsequence   , hsequenceK+  , hctraverse+  , hcfor     -- * Indexing into sums   , HIndex(..)     -- * Applying all injections@@ -78,6 +83,7 @@  #if !(MIN_VERSION_base(4,8,0)) import Control.Applicative (Applicative)+import Data.Monoid (Monoid) #endif  import Generics.SOP.BasicFunctors@@ -374,6 +380,56 @@   --   hcollapse :: SListIN h xs => h (K a) xs -> CollapseTo h a +-- | A generalization of 'Data.Foldable.traverse_' or 'Data.Foldable.foldMap'.+--+-- @since 0.3.2.0+--+class HTraverse_ (h :: (k -> *) -> (l -> *)) where++  -- | Corresponds to 'Data.Foldable.traverse_'.+  --+  -- /Instances:/+  --+  -- @+  -- 'hctraverse_', 'Generics.SOP.NP.ctraverse__NP'  :: ('All'  c xs , 'Applicative' g) => proxy c -> (forall a. c a => f a -> g ()) -> 'Generics.SOP.NP.NP'  f xs  -> g ()+  -- 'hctraverse_', 'Generics.SOP.NS.ctraverse__NS'  :: ('All2' c xs , 'Applicative' g) => proxy c -> (forall a. c a => f a -> g ()) -> 'Generics.SOP.NS.NS'  f xs  -> g ()+  -- 'hctraverse_', 'Generics.SOP.NP.ctraverse__POP' :: ('All'  c xss, 'Applicative' g) => proxy c -> (forall a. c a => f a -> g ()) -> 'Generics.SOP.NP.POP' f xss -> g ()+  -- 'hctraverse_', 'Generics.SOP.NS.ctraverse__SOP' :: ('All2' c xss, 'Applicative' g) => proxy c -> (forall a. c a => f a -> g ()) -> 'Generics.SOP.NS.SOP' f xss -> g ()+  -- @+  --+  -- @since 0.3.2.0+  --+  hctraverse_ :: (AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g ()) -> h f xs -> g ()++  -- | Unconstrained version of 'hctraverse_'.+  --+  -- /Instances:/+  --+  -- @+  -- 'traverse_', 'Generics.SOP.NP.traverse__NP'  :: ('SListI'  xs , 'Applicative g') => (forall a. f a -> g ()) -> 'Generics.SOP.NP.NP'  f xs  -> g ()+  -- 'traverse_', 'Generics.SOP.NS.traverse__NS'  :: ('SListI'  xs , 'Applicative g') => (forall a. f a -> g ()) -> 'Generics.SOP.NS.NS'  f xs  -> g ()+  -- 'traverse_', 'Generics.SOP.NP.traverse__POP' :: ('SListI2' xss, 'Applicative g') => (forall a. f a -> g ()) -> 'Generics.SOP.NP.POP' f xss -> g ()+  -- 'traverse_', 'Generics.SOP.NS.traverse__SOP' :: ('SListI2' xss, 'Applicative g') => (forall a. f a -> g ()) -> 'Generics.SOP.NS.SOP' f xss -> g ()+  -- @+  --+  -- @since 0.3.2.0+  --+  htraverse_ :: (SListIN h xs, Applicative g) => (forall a. f a -> g ()) -> h f xs -> g ()++-- | Flipped version of 'hctraverse_'.+--+-- @since 0.3.2.0+--+hcfor_ :: (HTraverse_ h, AllN h c xs, Applicative g) => proxy c -> h f xs -> (forall a. c a => f a -> g ()) -> g ()+hcfor_ p xs f = hctraverse_ p f xs++-- | Special case of 'hctraverse_'.+--+-- @since 0.3.2.0+--+hcfoldMap :: (HTraverse_ h, AllN h c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> h f xs -> m+hcfoldMap p f = unK . hctraverse_ p (K . f)+ -- * Sequencing effects  -- | A generalization of 'Data.Traversable.sequenceA'.@@ -394,8 +450,53 @@   --   hsequence' :: (SListIN h xs, Applicative f) => h (f :.: g) xs -> f (h g xs) ++  -- | Corresponds to 'Data.Traversable.traverse'.+  --+  -- /Instances:/+  --+  -- @+  -- 'hctraverse'', 'Generics.SOP.NP.ctraverse'_NP'  :: ('All'  c xs , 'Applicative' g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NP.NP'  f xs  -> g ('Generics.SOP.NP.NP'  f' xs )+  -- 'hctraverse'', 'Generics.SOP.NS.ctraverse'_NS'  :: ('All2' c xs , 'Applicative' g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NS.NS'  f xs  -> g ('Generics.SOP.NS.NS'  f' xs )+  -- 'hctraverse'', 'Generics.SOP.NP.ctraverse'_POP' :: ('All'  c xss, 'Applicative' g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NP.POP' f xss -> g ('Generics.SOP.NP.POP' f' xss)+  -- 'hctraverse'', 'Generics.SOP.NS.ctraverse'_SOP' :: ('All2' c xss, 'Applicative' g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NS.SOP' f xss -> g ('Generics.SOP.NS.SOP' f' xss)+  -- @+  --+  -- @since 0.3.2.0+  --+  hctraverse' :: (AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> h f xs -> g (h f' xs)++  -- | Unconstrained variant of `htraverse'`.+  --+  -- /Instances:/+  --+  -- @+  -- 'htraverse'', 'Generics.SOP.NP.traverse'_NP'  :: ('SListI'  xs , 'Applicative' g) => (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NP.NP'  f xs  -> g ('Generics.SOP.NP.NP'  f' xs )+  -- 'htraverse'', 'Generics.SOP.NS.traverse'_NS'  :: ('SListI2' xs , 'Applicative' g) => (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NS.NS'  f xs  -> g ('Generics.SOP.NS.NS'  f' xs )+  -- 'htraverse'', 'Generics.SOP.NP.traverse'_POP' :: ('SListI'  xss, 'Applicative' g) => (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NP.POP' f xss -> g ('Generics.SOP.NP.POP' f' xss)+  -- 'htraverse'', 'Generics.SOP.NS.traverse'_SOP' :: ('SListI2' xss, 'Applicative' g) => (forall a. c a => f a -> g (f' a)) -> 'Generics.SOP.NS.SOP' f xss -> g ('Generics.SOP.NS.SOP' f' xss)+  -- @+  --+  -- @since 0.3.2.0+  --+  htraverse' :: (SListIN h xs, Applicative g) => (forall a. f a -> g (f' a)) -> h f xs -> g (h f' xs)+ -- ** Derived functions +-- | Special case of 'hctraverse'' where @f' = 'I'@.+--+-- @since 0.3.2.0+--+hctraverse :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> h f xs -> g (h I xs)+hctraverse p f = hctraverse' p (fmap I . f)++-- | Flipped version of 'hctraverse'.+--+-- @since 0.3.2.0+--+hcfor :: (HSequence h, AllN h c xs, Applicative g) => proxy c -> h f xs -> (forall a. c a => f a -> g a) -> g (h I xs)+hcfor p xs f = hctraverse p f xs+ -- | Special case of 'hsequence'' where @g = 'I'@. hsequence :: (SListIN h xs, SListIN (Prod h) xs, HSequence h) => Applicative f => h f xs -> f (h I xs) hsequence = hsequence' . hliftA (Comp . fmap I)@@ -464,12 +565,14 @@   --   -- /Examples:/   ---  -- >>> hapInjs (I 'x' :* I True :* I 2 :* Nil)-  -- [Z (I 'x'), S (Z (I True)), S (S (Z (I 2)))]+  -- >>> hapInjs (I 'x' :* I True :* I 2 :* Nil) :: [NS I '[Char, Bool, Int]]+  -- [Z (I 'x'),S (Z (I True)),S (S (Z (I 2)))]   ---  -- >>> hapInjs (POP ((I 'x' :* Nil) :* (I True :* I 2 :* Nil) :* Nil)-  -- [SOP (Z (I 'x' :* Nil)), SOP (S (Z (I True :* (I 2 :* Nil))))]+  -- >>> hapInjs (POP ((I 'x' :* Nil) :* (I True :* I 2 :* Nil) :* Nil)) :: [SOP I '[ '[Char], '[Bool, Int]]]+  -- [SOP (Z (I 'x' :* Nil)),SOP (S (Z (I True :* I 2 :* Nil)))]   --+  -- Unfortunately the type-signatures are required in GHC-7.10 and older.+  --   -- @since 0.2.4.0   --   hapInjs :: (SListIN h xs) => Prod h f xs -> [h f xs]@@ -551,9 +654,9 @@   -- /Examples:/   --   -- >>> hcoerce (I (Just LT) :* I (Just 'x') :* I (Just True) :* Nil) :: NP Maybe '[Ordering, Char, Bool]-  -- Just LT :* (Just 'x' :* (Just True :* Nil))+  -- Just LT :* Just 'x' :* Just True :* Nil   -- >>> hcoerce (SOP (Z (K True :* K False :* Nil))) :: SOP I '[ '[Bool, Bool], '[Bool] ]-  -- SOP (Z (I True :* (I False :* Nil)))+  -- SOP (Z (I True :* I False :* Nil))   --   -- @since 0.3.1.0   hcoerce ::
src/Generics/SOP/NP.hs view
@@ -54,11 +54,23 @@     -- * Collapsing   , collapse_NP   , collapse_POP-    -- * Sequencing+    -- * Folding and sequencing+  , ctraverse__NP+  , ctraverse__POP+  , traverse__NP+  , traverse__POP+  , cfoldMap_NP+  , cfoldMap_POP   , sequence'_NP   , sequence'_POP   , sequence_NP   , sequence_POP+  , ctraverse'_NP+  , ctraverse'_POP+  , traverse'_NP+  , traverse'_POP+  , ctraverse_NP+  , ctraverse_POP     -- * Catamorphism and anamorphism   , cata_NP   , ccata_NP@@ -77,6 +89,7 @@  #if !(MIN_VERSION_base(4,8,0)) import Control.Applicative+import Data.Monoid (Monoid (..)) #endif import Data.Coerce import Data.Proxy (Proxy(..))@@ -123,7 +136,15 @@  infixr 5 :* -deriving instance All (Show `Compose` f) xs => Show (NP f xs)+-- This is written manually,+-- because built-in deriving doesn't use associativity information!+instance All (Show `Compose` f) xs => Show (NP f xs) where+  showsPrec _ Nil       = showString "Nil"+  showsPrec d (f :* fs) = showParen (d > 5)+    $ showsPrec (5 + 1) f+    . showString " :* "+    . showsPrec 5 fs+ deriving instance All (Eq   `Compose` f) xs => Eq   (NP f xs) deriving instance (All (Eq `Compose` f) xs, All (Ord `Compose` f) xs) => Ord (NP f xs) @@ -476,7 +497,7 @@ -- /Example:/ -- -- >>> collapse_POP (POP ((K 'a' :* Nil) :* (K 'b' :* K 'c' :* Nil) :* Nil) :: POP (K Char) '[ '[(a :: *)], '[b, c] ])--- ["a", "bc"]+-- ["a","bc"] -- -- (The type signature is only necessary in this case to fix the kind of the type variables.) --@@ -493,22 +514,133 @@ instance HCollapse NP  where hcollapse = collapse_NP instance HCollapse POP where hcollapse = collapse_POP +-- * Folding++-- | Specialization of 'hctraverse_'.+--+-- @since 0.3.2.0+--+ctraverse__NP ::+     forall c proxy xs f g. (All c xs, Applicative g)+  => proxy c -> (forall a. c a => f a -> g ()) -> NP f xs -> g ()+ctraverse__NP _ f = go+  where+    go :: All c ys => NP f ys -> g ()+    go Nil       = pure ()+    go (x :* xs) = f x *> go xs++-- | Specialization of 'htraverse_'.+--+-- @since 0.3.2.0+--+traverse__NP ::+     forall xs f g. (SListI xs, Applicative g)+  => (forall a. f a -> g ()) -> NP f xs -> g ()+traverse__NP f = go+  where+    go :: NP f ys -> g ()+    go Nil       = pure ()+    go (x :* xs) = f x *> go xs++-- | Specialization of 'hctraverse_'.+--+-- @since 0.3.2.0+--+ctraverse__POP ::+     forall c proxy xss f g. (All2 c xss, Applicative g)+  => proxy c -> (forall a. c a => f a -> g ()) -> POP f xss -> g ()+ctraverse__POP p f = ctraverse__NP (allP p) (ctraverse__NP p f) . unPOP++-- | Specialization of 'htraverse_'.+--+-- @since 0.3.2.0+--+traverse__POP ::+     forall xss f g. (SListI2 xss, Applicative g)+  => (forall a. f a -> g ()) -> POP f xss -> g ()+traverse__POP f = ctraverse__NP sListP (traverse__NP f) . unPOP++instance HTraverse_ NP  where+  hctraverse_ = ctraverse__NP+  htraverse_  = traverse__NP++instance HTraverse_ POP where+  hctraverse_ = ctraverse__POP+  htraverse_  = traverse__POP++-- | Specialization of 'hcfoldMap'.+--+-- @since 0.3.2.0+--+cfoldMap_NP :: (All c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> NP f xs -> m+cfoldMap_NP  = hcfoldMap++-- | Specialization of 'hcfoldMap'.+--+-- @since 0.3.2.0+--+cfoldMap_POP :: (All2 c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> POP f xs -> m+cfoldMap_POP = hcfoldMap+ -- * Sequencing  -- | Specialization of 'hsequence''.-sequence'_NP  ::             Applicative f  => NP  (f :.: g) xs  -> f (NP  g xs)+sequence'_NP  ::              Applicative f  => NP  (f :.: g) xs  -> f (NP  g xs)+sequence'_NP Nil         = pure Nil+sequence'_NP (mx :* mxs) = (:*) <$> unComp mx <*> sequence'_NP mxs  -- | Specialization of 'hsequence''. sequence'_POP :: (SListI xss, Applicative f) => POP (f :.: g) xss -> f (POP g xss)+sequence'_POP = fmap POP . sequence'_NP . hliftA (Comp . sequence'_NP) . unPOP -sequence'_NP Nil         = pure Nil-sequence'_NP (mx :* mxs) = (:*) <$> unComp mx <*> sequence'_NP mxs+-- | Specialization of 'hctraverse''.+--+-- @since 0.3.2.0+--+ctraverse'_NP  ::+     forall c proxy xs f f' g. (All c xs,  Applicative g)+  => proxy c -> (forall a. c a => f a -> g (f' a)) -> NP f xs  -> g (NP f' xs)+ctraverse'_NP _ f = go where+  go :: All c ys => NP f ys -> g (NP f' ys)+  go Nil       = pure Nil+  go (x :* xs) = (:*) <$> f x <*> go xs -sequence'_POP = fmap POP . sequence'_NP . hliftA (Comp . sequence'_NP) . unPOP+-- | Specialization of 'htraverse''.+--+-- @since 0.3.2.0+--+traverse'_NP  ::+     forall xs f f' g. (SListI xs,  Applicative g)+  => (forall a. f a -> g (f' a)) -> NP f xs  -> g (NP f' xs)+traverse'_NP f = go where+  go :: NP f ys -> g (NP f' ys)+  go Nil       = pure Nil+  go (x :* xs) = (:*) <$> f x <*> go xs -instance HSequence NP  where hsequence' = sequence'_NP-instance HSequence POP where hsequence' = sequence'_POP+-- | Specialization of 'hctraverse''.+--+-- @since 0.3.2.0+--+ctraverse'_POP :: (All2 c xss, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> POP f xss -> g (POP f' xss)+ctraverse'_POP p f = fmap POP . ctraverse'_NP (allP p) (ctraverse'_NP p f) . unPOP +-- | Specialization of 'hctraverse''.+--+-- @since 0.3.2.0+--+traverse'_POP :: (SListI2 xss, Applicative g) => (forall a. f a -> g (f' a)) -> POP f xss -> g (POP f' xss)+traverse'_POP f = fmap POP . ctraverse'_NP sListP (traverse'_NP f) . unPOP++instance HSequence NP  where+  hsequence'  = sequence'_NP+  hctraverse' = ctraverse'_NP+  htraverse'  = traverse'_NP++instance HSequence POP where+  hsequence'  = sequence'_POP+  hctraverse' = ctraverse'_POP+  htraverse'  = traverse'_POP+ -- | Specialization of 'hsequence'. -- -- /Example:/@@ -523,12 +655,27 @@ -- /Example:/ -- -- >>> sequence_POP (POP ((Just 1 :* Nil) :* (Just 2 :* Just 3 :* Nil) :* Nil))--- Just (POP ((I 1 :* Nil) :* ((I 2 :* (I 3 :* Nil)) :* Nil)))+-- Just (POP ((I 1 :* Nil) :* (I 2 :* I 3 :* Nil) :* Nil)) -- sequence_POP :: (All SListI xss, Applicative f) => POP f xss -> f (POP I xss)  sequence_NP   = hsequence sequence_POP  = hsequence++-- | Specialization of 'hctraverse'.+--+-- @since 0.3.2.0+--+ctraverse_NP  :: (All  c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> NP  f xs -> g (NP  I xs)++-- | Specialization of 'hctraverse'.+--+-- @since 0.3.2.0+--+ctraverse_POP :: (All2 c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> POP f xs -> g (POP I xs)++ctraverse_NP  = hctraverse+ctraverse_POP = hctraverse  -- * Catamorphism and anamorphism 
src/Generics/SOP/NS.hs view
@@ -41,14 +41,31 @@   , cmap_SOP     -- * Dealing with @'All' c@   , cliftA2'_NS+    -- * Comparison+  , compare_NS+  , ccompare_NS+  , compare_SOP+  , ccompare_SOP     -- * Collapsing   , collapse_NS   , collapse_SOP-    -- * Sequencing+    -- * Folding and sequencing+  , ctraverse__NS+  , ctraverse__SOP+  , traverse__NS+  , traverse__SOP+  , cfoldMap_NS+  , cfoldMap_SOP   , sequence'_NS   , sequence'_SOP   , sequence_NS   , sequence_SOP+  , ctraverse'_NS+  , ctraverse'_SOP+  , traverse'_NS+  , traverse'_SOP+  , ctraverse_NS+  , ctraverse_SOP     -- * Catamorphism and anamorphism   , cata_NS   , ccata_NS@@ -72,6 +89,7 @@  #if !(MIN_VERSION_base(4,8,0)) import Control.Applicative+import Data.Monoid (Monoid) #endif import Data.Coerce import Data.Proxy@@ -208,6 +226,9 @@ unSOP :: SOP f xss -> NS (NP f) xss unSOP (SOP xss) = xss +type instance AllN NS  c = All  c+type instance AllN SOP c = All2 c+ -- | Obtain the index from an n-ary sum of products. -- -- An n-nary sum represents a choice between n different options.@@ -279,7 +300,7 @@ -- /Example:/ -- -- >>> apInjs_NP (I 'x' :* I True :* I 2 :* Nil)--- [Z (I 'x'), S (Z (I True)), S (S (Z (I 2)))]+-- [Z (I 'x'),S (Z (I True)),S (S (Z (I 2)))] -- apInjs_NP  :: SListI xs  => NP  f xs  -> [NS  f xs] apInjs_NP  = hcollapse . apInjs'_NP@@ -304,7 +325,7 @@ -- /Example:/ -- -- >>> apInjs_POP (POP ((I 'x' :* Nil) :* (I True :* I 2 :* Nil) :* Nil))--- [SOP (Z (I 'x' :* Nil)),SOP (S (Z (I True :* (I 2 :* Nil))))]+-- [SOP (Z (I 'x' :* Nil)),SOP (S (Z (I True :* I 2 :* Nil)))] -- apInjs_POP :: SListI xss => POP f xss -> [SOP f xss] apInjs_POP = map SOP . apInjs_NP . unPOP@@ -423,6 +444,95 @@  cliftA2'_NS = hcliftA2' +-- * Comparison++-- | Compare two sums with respect to the choice they+-- are making.+--+-- A value that chooses the first option+-- is considered smaller than one that chooses the second+-- option.+--+-- If the choices are different, then either the first+-- (if the first is smaller than the second)+-- or the third (if the first is larger than the second)+-- argument are called. If both choices are equal, then the+-- second argument is called, which has access to the+-- elements contained in the sums.+--+-- @since 0.3.2.0+--+compare_NS ::+     forall r f g xs .+     r                             -- ^ what to do if first is smaller+  -> (forall x . f x -> g x -> r)  -- ^ what to do if both are equal+  -> r                             -- ^ what to do if first is larger+  -> NS f xs -> NS g xs+  -> r+compare_NS lt eq gt = go+  where+    go :: forall ys . NS f ys -> NS g ys -> r+    go (Z x)  (Z y)  = eq x y+    go (Z _)  (S _)  = lt+    go (S _)  (Z _)  = gt+    go (S xs) (S ys) = go xs ys++-- | Constrained version of 'compare_NS'.+--+-- @since 0.3.2.0+--+ccompare_NS ::+     forall c proxy r f g xs .+     (All c xs)+  => proxy c+  -> r                                    -- ^ what to do if first is smaller+  -> (forall x . c x => f x -> g x -> r)  -- ^ what to do if both are equal+  -> r                                    -- ^ what to do if first is larger+  -> NS f xs -> NS g xs+  -> r+ccompare_NS _ lt eq gt = go+  where+    go :: forall ys . (All c ys) => NS f ys -> NS g ys -> r+    go (Z x)  (Z y)  = eq x y+    go (Z _)  (S _)  = lt+    go (S _)  (Z _)  = gt+    go (S xs) (S ys) = go xs ys++-- | Compare two sums of products with respect to the+-- choice in the sum they are making.+--+-- Only the sum structure is used for comparison.+-- This is a small wrapper around 'ccompare_NS' for+-- a common special case.+--+-- @since 0.3.2.0+--+compare_SOP ::+     forall r f g xss .+     r                                      -- ^ what to do if first is smaller+  -> (forall xs . NP f xs -> NP g xs -> r)  -- ^ what to do if both are equal+  -> r                                      -- ^ what to do if first is larger+  -> SOP f xss -> SOP g xss+  -> r+compare_SOP lt eq gt (SOP xs) (SOP ys) =+  compare_NS lt eq gt xs ys++-- | Constrained version of 'compare_SOP'.+--+-- @since 0.3.2.0+--+ccompare_SOP ::+     forall c proxy r f g xss .+     (All2 c xss)+  => proxy c+  -> r                                                  -- ^ what to do if first is smaller+  -> (forall xs . All c xs => NP f xs -> NP g xs -> r)  -- ^ what to do if both are equal+  -> r                                                  -- ^ what to do if first is larger+  -> SOP f xss -> SOP g xss+  -> r+ccompare_SOP p lt eq gt (SOP xs) (SOP ys) =+  ccompare_NS (allP p) lt eq gt xs ys+ -- * Collapsing  -- | Specialization of 'hcollapse'.@@ -441,22 +551,152 @@ instance HCollapse NS  where hcollapse = collapse_NS instance HCollapse SOP where hcollapse = collapse_SOP +-- * Folding++-- | Specialization of 'hctraverse_'.+--+-- /Note:/ we don't need 'Applicative' constraint.+--+-- @since 0.3.2.0+--+ctraverse__NS ::+     forall c proxy xs f g. (All c xs)+  => proxy c -> (forall a. c a => f a -> g ()) -> NS f xs -> g ()+ctraverse__NS _ f = go+  where+    go :: All c ys => NS f ys -> g ()+    go (Z x)  = f x+    go (S xs) = go xs++-- | Specialization of 'htraverse_'.+--+-- /Note:/ we don't need 'Applicative' constraint.+--+-- @since 0.3.2.0+--+traverse__NS ::+     forall xs f g. (SListI xs)+  => (forall a. f a -> g ()) -> NS f xs -> g ()+traverse__NS f = go+  where+    go :: NS f ys -> g ()+    go (Z x)  = f x+    go (S xs) = go xs++-- | Specialization of 'hctraverse_'.+--+-- @since 0.3.2.0+--+ctraverse__SOP ::+     forall c proxy xss f g. (All2 c xss, Applicative g)+  => proxy c -> (forall a. c a => f a -> g ()) -> SOP f xss -> g ()+ctraverse__SOP p f = ctraverse__NS (allP p) (ctraverse__NP p f) . unSOP++-- | Specialization of 'htraverse_'.+--+-- @since 0.3.2.0+--+traverse__SOP ::+     forall xss f g. (SListI2 xss, Applicative g)+  => (forall a. f a -> g ()) -> SOP f xss -> g ()+traverse__SOP f = ctraverse__NS sListP (traverse__NP f) . unSOP++sListP :: Proxy SListI+sListP = Proxy++instance HTraverse_ NS  where+  hctraverse_ = ctraverse__NS+  htraverse_  = traverse__NS++instance HTraverse_ SOP where+  hctraverse_ = ctraverse__SOP+  htraverse_  = traverse__SOP++-- | Specialization of 'hcfoldMap'.+--+-- /Note:/ We don't need 'Monoid' instance.+--+-- @since 0.3.2.0+--+cfoldMap_NS ::+     forall c proxy f xs m. (All c xs)+  => proxy c -> (forall a. c a => f a -> m) -> NS f xs -> m+cfoldMap_NS _ f = go+  where+    go :: All c ys => NS f ys -> m+    go (Z x)  = f x+    go (S xs) = go xs++-- | Specialization of 'hcfoldMap'.+--+-- @since 0.3.2.0+--+cfoldMap_SOP :: (All2 c xs, Monoid m) => proxy c -> (forall a. c a => f a -> m) -> SOP f xs -> m+cfoldMap_SOP = hcfoldMap+ -- * Sequencing  -- | Specialization of 'hsequence''. sequence'_NS  ::              Applicative f  => NS  (f :.: g) xs  -> f (NS  g xs)+sequence'_NS (Z mx)  = Z <$> unComp mx+sequence'_NS (S mxs) = S <$> sequence'_NS mxs  -- | Specialization of 'hsequence''. sequence'_SOP :: (SListI xss, Applicative f) => SOP (f :.: g) xss -> f (SOP g xss)+sequence'_SOP = fmap SOP . sequence'_NS . hliftA (Comp . sequence'_NP) . unSOP -sequence'_NS (Z mx)  = Z <$> unComp mx-sequence'_NS (S mxs) = S <$> sequence'_NS mxs+-- | Specialization of 'hctraverse''.+--+-- /Note:/ as 'NS' has exactly one element, the 'Functor' constraint is enough.+--+-- @since 0.3.2.0+--+ctraverse'_NS  ::+     forall c proxy xs f f' g. (All c xs,  Functor g)+  => proxy c -> (forall a. c a => f a -> g (f' a)) -> NS f xs  -> g (NS f' xs)+ctraverse'_NS _ f = go where+  go :: All c ys => NS f ys -> g (NS f' ys)+  go (Z x)  = Z <$> f x+  go (S xs) = S <$> go xs -sequence'_SOP = fmap SOP . sequence'_NS . hliftA (Comp . sequence'_NP) . unSOP+-- | Specialization of 'htraverse''.+--+-- /Note:/ as 'NS' has exactly one element, the 'Functor' constraint is enough.+--+-- @since 0.3.2.0+--+traverse'_NS  ::+     forall xs f f' g. (SListI xs,  Functor g)+  => (forall a. f a -> g (f' a)) -> NS f xs  -> g (NS f' xs)+traverse'_NS f = go where+  go :: NS f ys -> g (NS f' ys)+  go (Z x)  = Z <$> f x+  go (S xs) = S <$> go xs -instance HSequence NS  where hsequence' = sequence'_NS-instance HSequence SOP where hsequence' = sequence'_SOP+-- | Specialization of 'hctraverse''.+--+-- @since 0.3.2.0+--+ctraverse'_SOP :: (All2 c xss, Applicative g) => proxy c -> (forall a. c a => f a -> g (f' a)) -> SOP f xss -> g (SOP f' xss)+ctraverse'_SOP p f = fmap SOP . ctraverse'_NS (allP p) (ctraverse'_NP p f) . unSOP +-- | Specialization of 'htraverse''.+--+-- @since 0.3.2.0+--+traverse'_SOP :: (SListI2 xss, Applicative g) => (forall a. f a -> g (f' a)) -> SOP f xss -> g (SOP f' xss)+traverse'_SOP f = fmap SOP . ctraverse'_NS sListP (traverse'_NP f) . unSOP++instance HSequence NS  where+  hsequence'  = sequence'_NS+  hctraverse' = ctraverse'_NS+  htraverse'  = traverse'_NS++instance HSequence SOP where+  hsequence'  = sequence'_SOP+  hctraverse' = ctraverse'_SOP+  htraverse'  = traverse'_SOP+ -- | Specialization of 'hsequence'. sequence_NS  :: (SListI xs,  Applicative f) => NS  f xs  -> f (NS  I xs) @@ -465,6 +705,21 @@  sequence_NS   = hsequence sequence_SOP  = hsequence++-- | Specialization of 'hctraverse'.+--+-- @since 0.3.2.0+--+ctraverse_NS  :: (All  c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> NP  f xs -> g (NP  I xs)++-- | Specialization of 'hctraverse'.+--+-- @since 0.3.2.0+--+ctraverse_SOP :: (All2 c xs, Applicative g) => proxy c -> (forall a. c a => f a -> g a) -> POP f xs -> g (POP I xs)++ctraverse_NS = hctraverse+ctraverse_SOP = hctraverse  -- * Catamorphism and anamorphism 
src/Generics/SOP/TH.hs view
@@ -101,18 +101,19 @@ -- deriveGenericFunctions :: Name -> String -> String -> String -> Q [Dec] deriveGenericFunctions n codeName fromName toName = do-  let codeName'  = mkName codeName+  let codeName' = mkName codeName   let fromName' = mkName fromName   let toName'   = mkName toName   dec <- reifyDec n-  withDataDec dec $ \_isNewtype _cxt name _bndrs cons _derivs -> do+  withDataDec dec $ \_isNewtype _cxt name bndrs cons _derivs -> do     let codeType = codeFor cons                        -- '[ '[Int], '[Tree, Tree] ]-    let repType = [t| SOP I $(conT codeName') |]       -- SOP I TreeCode+    let origType = appTyVars name bndrs                -- Tree+    let repType  = [t| SOP I $(appTyVars codeName' bndrs) |] -- SOP I TreeCode     sequence-      [ tySynD codeName' [] codeType                    -- type TreeCode = '[ '[Int], '[Tree, Tree] ]-      , sigD fromName' [t| $(conT name) -> $repType |]  -- fromTree :: Tree -> SOP I TreeCode+      [ tySynD codeName' bndrs codeType                 -- type TreeCode = '[ '[Int], '[Tree, Tree] ]+      , sigD fromName' [t| $origType -> $repType |]     -- fromTree :: Tree -> SOP I TreeCode       , embedding fromName' cons                        -- fromTree ... =-      , sigD toName' [t| $repType -> $(conT name) |]    -- toTree :: SOP I TreeCode -> Tree+      , sigD toName' [t| $repType -> $origType |]       -- toTree :: SOP I TreeCode -> Tree       , projection toName' cons                         -- toTree ... =       ] @@ -128,7 +129,7 @@ -- > treeDatatypeInfo = ADT "Main" "Tree" -- >     (Constructor "Leaf" :* Constructor "Node" :* Nil) ----- /Note:/ CodeType need to be derived with 'deriveGenericFunctions'.+-- /Note:/ CodeType needs to be derived with 'deriveGenericFunctions'. -- -- @since 0.2 --@@ -138,7 +139,7 @@   let datatypeInfoName' = mkName datatypeInfoName   dec <- reifyDec n   withDataDec dec $ \isNewtype _cxt name _bndrs cons _derivs -> do-    sequence [ sigD datatypeInfoName' [t| SOP.DatatypeInfo $(conT codeName') |]                    -- treeDatatypeInfo :: DatatypeInfo TreeCode+    sequence [ sigD datatypeInfoName' [t| SOP.DatatypeInfo $(conT codeName') |]                -- treeDatatypeInfo :: DatatypeInfo TreeCode              , funD datatypeInfoName' [clause [] (normalB $ metadata' isNewtype name cons) []] -- treeDatatypeInfo = ...              ] {-# DEPRECATED deriveMetadataValue "Use 'deriveMetadataType' and 'demoteDatatypeInfo' instead." #-}@@ -211,8 +212,14 @@ -------------------------------------------------------------------------------}  embedding :: Name -> [Con] -> Q Dec-embedding fromName = funD fromName . go (\e -> [| Z $e |])+embedding fromName = funD fromName . go' (\e -> [| Z $e |])   where+    go' :: (Q Exp -> Q Exp) -> [Con] -> [Q Clause]+    go' _ [] = (:[]) $ do+      x <- newName "x"+      clause [varP x] (normalB (caseE (varE x) [])) []+    go' br cs = go br cs+     go :: (Q Exp -> Q Exp) -> [Con] -> [Q Clause]     go _  []     = []     go br (c:cs) = mkClause br c : go (\e -> [| S $(br e) |]) cs@@ -226,8 +233,14 @@              []  projection :: Name -> [Con] -> Q Dec-projection toName = funD toName . go (\p -> conP 'Z [p])+projection toName = funD toName . go' (\p -> conP 'Z [p])   where+    go' :: (Q Pat -> Q Pat) -> [Con] -> [Q Clause]+    go' _ [] = (:[]) $ do+      x <- newName "x"+      clause [varP x] (normalB (caseE (varE x) [])) []+    go' br cs = go br cs+     go :: (Q Pat -> Q Pat) -> [Con] -> [Q Clause]     go _ [] = [unreachable]     go br (c:cs) = mkClause br c : go (\p -> conP 'S [br p]) cs