compdata 0.10 → 0.10.1
raw patch · 24 files changed
+154/−94 lines, 24 filesdep ~basedep ~template-haskellPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, template-haskell
API changes (from Hackage documentation)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0) => ArbitraryF ((,,) b0 c0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0) => ArbitraryF ((,,,) b0 c0 d0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0, Arbitrary e0) => ArbitraryF ((,,,,) b0 c0 d0 e0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0, Arbitrary e0, Arbitrary f0) => ArbitraryF ((,,,,,) b0 c0 d0 e0 f0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0, Arbitrary e0, Arbitrary f0, Arbitrary g0) => ArbitraryF ((,,,,,,) b0 c0 d0 e0 f0 g0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0, Arbitrary e0, Arbitrary f0, Arbitrary g0, Arbitrary h0) => ArbitraryF ((,,,,,,,) b0 c0 d0 e0 f0 g0 h0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0, Arbitrary e0, Arbitrary f0, Arbitrary g0, Arbitrary h0, Arbitrary i0) => ArbitraryF ((,,,,,,,,) b0 c0 d0 e0 f0 g0 h0 i0)
- Data.Comp.Arbitrary: instance (Arbitrary b0, Arbitrary c0, Arbitrary d0, Arbitrary e0, Arbitrary f0, Arbitrary g0, Arbitrary h0, Arbitrary i0, Arbitrary j0) => ArbitraryF ((,,,,,,,,,) b0 c0 d0 e0 f0 g0 h0 i0 j0)
- Data.Comp.Arbitrary: instance (ArbitraryF f, Arbitrary a) => Arbitrary (Context f a)
- Data.Comp.Arbitrary: instance (ArbitraryF f, Arbitrary p) => ArbitraryF (f :&: p)
- Data.Comp.Arbitrary: instance (ArbitraryF f, ArbitraryF g) => ArbitraryF (f :+: g)
- Data.Comp.Arbitrary: instance Arbitrary b0 => ArbitraryF ((,) b0)
- Data.Comp.Arbitrary: instance ArbitraryF Maybe
- Data.Comp.Arbitrary: instance ArbitraryF []
- Data.Comp.Arbitrary: instance ArbitraryF f => Arbitrary (Term f)
- Data.Comp.Arbitrary: instance ArbitraryF f => ArbitraryF (Context f)
- Data.Comp.Decompose: instance (HasVars f v, Functor f, Foldable f) => Decompose f v
- Data.Comp.DeepSeq: instance (NFDataF f, NFData a) => NFData (Cxt h f a)
- Data.Comp.DeepSeq: instance (NFDataF f, NFData a) => NFDataF (f :&: a)
- Data.Comp.DeepSeq: instance (NFDataF f, NFDataF g) => NFDataF (f :+: g)
- Data.Comp.DeepSeq: instance NFData a0 => NFDataF ((,) a0)
- Data.Comp.DeepSeq: instance NFDataF Maybe
- Data.Comp.DeepSeq: instance NFDataF []
- Data.Comp.Desugar: instance [overlap ok] (Desugar f h, Desugar g h) => Desugar (f :+: g) h
- Data.Comp.Desugar: instance [overlap ok] (Functor f, Functor g, f :<: g) => Desugar f g
- Data.Comp.Equality: instance (Eq a0, Eq b0) => EqF ((,,) a0 b0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0) => EqF ((,,,) a0 b0 c0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0, Eq d0) => EqF ((,,,,) a0 b0 c0 d0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0, Eq d0, Eq e0) => EqF ((,,,,,) a0 b0 c0 d0 e0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0, Eq d0, Eq e0, Eq f0) => EqF ((,,,,,,) a0 b0 c0 d0 e0 f0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0, Eq d0, Eq e0, Eq f0, Eq g0) => EqF ((,,,,,,,) a0 b0 c0 d0 e0 f0 g0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0, Eq d0, Eq e0, Eq f0, Eq g0, Eq h0) => EqF ((,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0)
- Data.Comp.Equality: instance (Eq a0, Eq b0, Eq c0, Eq d0, Eq e0, Eq f0, Eq g0, Eq h0, Eq i0) => EqF ((,,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0 i0)
- Data.Comp.Equality: instance (EqF f, Eq a) => Eq (Cxt h f a)
- Data.Comp.Equality: instance (EqF f, EqF g) => EqF (f :+: g)
- Data.Comp.Equality: instance Eq a0 => EqF ((,) a0)
- Data.Comp.Equality: instance EqF Maybe
- Data.Comp.Equality: instance EqF []
- Data.Comp.Equality: instance EqF f => EqF (Cxt h f)
- Data.Comp.Mapping: instance Foldable (NumMap k)
- Data.Comp.Mapping: instance Functor (NumMap k)
- Data.Comp.Mapping: instance Mapping (NumMap k) (Numbered k)
- Data.Comp.Mapping: instance Traversable (NumMap k)
- Data.Comp.Multi.Desugar: instance [overlap ok] (Desugar f h, Desugar g h) => Desugar (f :+: g) h
- Data.Comp.Multi.Desugar: instance [overlap ok] (HFunctor f, HFunctor g, f :<: g) => Desugar f g
- Data.Comp.Multi.Equality: instance (EqHF f, EqHF g) => EqHF (f :+: g)
- Data.Comp.Multi.Equality: instance (EqHF f, KEq a) => Eq (Cxt h f a i)
- Data.Comp.Multi.Equality: instance (EqHF f, KEq a) => KEq (Cxt h f a)
- Data.Comp.Multi.Equality: instance Eq a => KEq (K a)
- Data.Comp.Multi.Equality: instance EqHF f => EqHF (Cxt h f)
- Data.Comp.Multi.Equality: instance KEq a => Eq (E a)
- Data.Comp.Multi.HFunctor: instance [incoherent] Eq a => Eq (K a i)
- Data.Comp.Multi.HFunctor: instance [incoherent] Foldable (K a)
- Data.Comp.Multi.HFunctor: instance [incoherent] Foldable I
- Data.Comp.Multi.HFunctor: instance [incoherent] Functor (K a)
- Data.Comp.Multi.HFunctor: instance [incoherent] Functor I
- Data.Comp.Multi.HFunctor: instance [incoherent] Functor f => HFunctor (Compose f)
- Data.Comp.Multi.HFunctor: instance [incoherent] Ord a => Ord (K a i)
- Data.Comp.Multi.HFunctor: instance [incoherent] Traversable (K a)
- Data.Comp.Multi.HFunctor: instance [incoherent] Traversable I
- Data.Comp.Multi.HFunctor: unA :: A f -> forall i. f i
- Data.Comp.Multi.HFunctor: unE :: E f -> f i
- Data.Comp.Multi.HFunctor: unI :: I a -> a
- Data.Comp.Multi.HFunctor: unK :: K a i -> a
- Data.Comp.Multi.Mapping: instance Functor (NumMap k)
- Data.Comp.Multi.Mapping: instance Mapping (NumMap k) (Numbered k)
- Data.Comp.Multi.Ops: instance (HFoldable f, HFoldable g) => HFoldable (f :+: g)
- Data.Comp.Multi.Ops: instance (HFunctor f, HFunctor g) => HFunctor (f :+: g)
- Data.Comp.Multi.Ops: instance (HTraversable f, HTraversable g) => HTraversable (f :+: g)
- Data.Comp.Multi.Ops: instance (Subsume ('Found p1) f1 g, Subsume ('Found p2) f2 g) => Subsume ('Found ('Sum p1 p2)) (f1 :+: f2) g
- Data.Comp.Multi.Ops: instance DistAnn f p (f :&: p)
- Data.Comp.Multi.Ops: instance DistAnn s p s' => DistAnn (f :+: s) p ((f :&: p) :+: s')
- Data.Comp.Multi.Ops: instance HFoldable f => HFoldable (f :&: a)
- Data.Comp.Multi.Ops: instance HFunctor f => HFunctor (f :&: a)
- Data.Comp.Multi.Ops: instance HTraversable f => HTraversable (f :&: a)
- Data.Comp.Multi.Ops: instance RemA (f :&: p) f
- Data.Comp.Multi.Ops: instance RemA s s' => RemA ((f :&: p) :+: s) (f :+: s')
- Data.Comp.Multi.Ops: instance Subsume ('Found 'Here) f f
- Data.Comp.Multi.Ops: instance Subsume ('Found p) f g => Subsume ('Found ('Le p)) f (g :+: g')
- Data.Comp.Multi.Ops: instance Subsume ('Found p) f g => Subsume ('Found ('Ri p)) f (g' :+: g)
- Data.Comp.Multi.Ordering: instance (HFunctor f, OrdHF f) => OrdHF (Cxt h f)
- Data.Comp.Multi.Ordering: instance (HFunctor f, OrdHF f, KOrd a) => KOrd (Cxt h f a)
- Data.Comp.Multi.Ordering: instance (HFunctor f, OrdHF f, KOrd a) => Ord (Cxt h f a i)
- Data.Comp.Multi.Ordering: instance (OrdHF f, OrdHF g) => OrdHF (f :+: g)
- Data.Comp.Multi.Ordering: instance KOrd f => Ord (E f)
- Data.Comp.Multi.Ordering: instance Ord a => KOrd (K a)
- Data.Comp.Multi.Projection: instance (Proj ('Found p1) f1 g, Proj ('Found p2) f2 g) => Proj ('Found ('Sum p1 p2)) (f1 :*: f2) g
- Data.Comp.Multi.Projection: instance Proj ('Found 'Here) f f
- Data.Comp.Multi.Projection: instance Proj ('Found p) f g => Proj ('Found ('Le p)) f (g :*: g')
- Data.Comp.Multi.Projection: instance Proj ('Found p) f g => Proj ('Found ('Ri p)) f (g' :*: g)
- Data.Comp.Multi.Show: instance (ShowHF f, HFunctor f) => ShowHF (Cxt h f)
- Data.Comp.Multi.Show: instance (ShowHF f, HFunctor f, KShow a) => KShow (Cxt h f a)
- Data.Comp.Multi.Show: instance (ShowHF f, Show p) => ShowHF (f :&: p)
- Data.Comp.Multi.Show: instance (ShowHF f, ShowHF g) => ShowHF (f :+: g)
- Data.Comp.Multi.Show: instance KShow (Cxt h f a) => Show (Cxt h f a i)
- Data.Comp.Multi.Show: instance KShow (K ())
- Data.Comp.Multi.Show: instance KShow (K String)
- Data.Comp.Multi.Term: instance HFoldable f => HFoldable (Cxt h f)
- Data.Comp.Multi.Term: instance HFunctor f => HFunctor (Cxt h f)
- Data.Comp.Multi.Term: instance HTraversable f => HTraversable (Cxt h f)
- Data.Comp.Multi.Variables: instance [overlap ok] (HasVars f v0, HasVars g v0) => HasVars (f :+: g) v0
- Data.Comp.Multi.Variables: instance [overlap ok] (Ord v, HasVars f v, HTraversable f) => SubstVars v (Cxt h f a) (Cxt h f a)
- Data.Comp.Multi.Variables: instance [overlap ok] (SubstVars v t a, HFunctor f) => SubstVars v t (f a)
- Data.Comp.Ops: instance (Foldable f, Foldable g) => Foldable (f :*: g)
- Data.Comp.Ops: instance (Foldable f, Foldable g) => Foldable (f :+: g)
- Data.Comp.Ops: instance (Functor f, Functor g) => Functor (f :*: g)
- Data.Comp.Ops: instance (Functor f, Functor g) => Functor (f :+: g)
- Data.Comp.Ops: instance (Subsume ('Found p1) f1 g, Subsume ('Found p2) f2 g) => Subsume ('Found ('Sum p1 p2)) (f1 :+: f2) g
- Data.Comp.Ops: instance (Traversable f, Traversable g) => Traversable (f :*: g)
- Data.Comp.Ops: instance (Traversable f, Traversable g) => Traversable (f :+: g)
- Data.Comp.Ops: instance DistAnn f p (f :&: p)
- Data.Comp.Ops: instance DistAnn s p s' => DistAnn (f :+: s) p ((f :&: p) :+: s')
- Data.Comp.Ops: instance Foldable f => Foldable (f :&: a)
- Data.Comp.Ops: instance Functor f => Functor (f :&: a)
- Data.Comp.Ops: instance RemA (f :&: p) f
- Data.Comp.Ops: instance RemA s s' => RemA ((f :&: p) :+: s) (f :+: s')
- Data.Comp.Ops: instance Subsume ('Found 'Here) f f
- Data.Comp.Ops: instance Subsume ('Found p) f g => Subsume ('Found ('Le p)) f (g :+: g')
- Data.Comp.Ops: instance Subsume ('Found p) f g => Subsume ('Found ('Ri p)) f (g' :+: g)
- Data.Comp.Ops: instance Traversable f => Traversable (f :&: a)
- Data.Comp.Ordering: instance (Ord a0, Ord b0) => OrdF ((,,) a0 b0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0) => OrdF ((,,,) a0 b0 c0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0, Ord d0) => OrdF ((,,,,) a0 b0 c0 d0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0, Ord d0, Ord e0) => OrdF ((,,,,,) a0 b0 c0 d0 e0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0, Ord d0, Ord e0, Ord f0) => OrdF ((,,,,,,) a0 b0 c0 d0 e0 f0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0, Ord d0, Ord e0, Ord f0, Ord g0) => OrdF ((,,,,,,,) a0 b0 c0 d0 e0 f0 g0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0, Ord d0, Ord e0, Ord f0, Ord g0, Ord h0) => OrdF ((,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0)
- Data.Comp.Ordering: instance (Ord a0, Ord b0, Ord c0, Ord d0, Ord e0, Ord f0, Ord g0, Ord h0, Ord i0) => OrdF ((,,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0 i0)
- Data.Comp.Ordering: instance (OrdF f, Ord a) => Ord (Cxt h f a)
- Data.Comp.Ordering: instance (OrdF f, OrdF g) => OrdF (f :+: g)
- Data.Comp.Ordering: instance Ord a0 => OrdF ((,) a0)
- Data.Comp.Ordering: instance OrdF Maybe
- Data.Comp.Ordering: instance OrdF []
- Data.Comp.Ordering: instance OrdF f => OrdF (Cxt h f)
- Data.Comp.Projection: instance (Proj ('Found p1) f1 g, Proj ('Found p2) f2 g) => Proj ('Found ('Sum p1 p2)) (f1, f2) g
- Data.Comp.Projection: instance Proj ('Found 'Here) f f
- Data.Comp.Projection: instance Proj ('Found p) f g => Proj ('Found ('Le p)) f (g, g')
- Data.Comp.Projection: instance Proj ('Found p) f g => Proj ('Found ('Ri p)) f (g', g)
- Data.Comp.Render: instance (Render f, Render g) => Render (f :+: g)
- Data.Comp.Show: instance (Functor f, ShowF f) => ShowF (Cxt h f)
- Data.Comp.Show: instance (Functor f, ShowF f, Show a) => Show (Cxt h f a)
- Data.Comp.Show: instance (ShowConstr f, Show p) => ShowConstr (f :&: p)
- Data.Comp.Show: instance (ShowConstr f, ShowConstr g) => ShowConstr (f :+: g)
- Data.Comp.Show: instance (ShowF f, Show p) => ShowF (f :&: p)
- Data.Comp.Show: instance (ShowF f, ShowF g) => ShowF (f :+: g)
- Data.Comp.Show: instance Show a0 => ShowF ((,) a0)
- Data.Comp.Show: instance ShowF Maybe
- Data.Comp.Show: instance ShowF []
- Data.Comp.Sum: instance (Eq (f a), Eq (g a)) => Eq ((:+:) f g a)
- Data.Comp.Sum: instance (Ord (f a), Ord (g a)) => Ord ((:+:) f g a)
- Data.Comp.Sum: instance (Show (f a), Show (g a)) => Show ((:+:) f g a)
- Data.Comp.Term: instance Foldable f => Foldable (Cxt h f)
- Data.Comp.Term: instance Functor f => Applicative (Context f)
- Data.Comp.Term: instance Functor f => Functor (Cxt h f)
- Data.Comp.Term: instance Functor f => Monad (Context f)
- Data.Comp.Term: instance Traversable f => Traversable (Cxt h f)
- Data.Comp.Unification: usEqs :: UnifyState f v -> Equations f
- Data.Comp.Unification: usSubst :: UnifyState f v -> Subst f v
- Data.Comp.Variables: instance [overlap ok] (HasVars f v0, HasVars g v0) => HasVars (f :+: g) v0
- Data.Comp.Variables: instance [overlap ok] (Ord v, HasVars f v, Traversable f) => SubstVars v (Cxt h f a) (Cxt h f a)
- Data.Comp.Variables: instance [overlap ok] (SubstVars v t a, Functor f) => SubstVars v t (f a)
- Data.Comp.Variables: instance [overlap ok] HasVars f v => HasVars (f :&: a) v
+ Data.Comp.Arbitrary: instance (Data.Comp.Derive.Arbitrary.ArbitraryF f, Data.Comp.Derive.Arbitrary.ArbitraryF g) => Data.Comp.Derive.Arbitrary.ArbitraryF (f Data.Comp.Ops.:+: g)
+ Data.Comp.Arbitrary: instance (Data.Comp.Derive.Arbitrary.ArbitraryF f, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (Data.Comp.Term.Context f a)
+ Data.Comp.Arbitrary: instance (Data.Comp.Derive.Arbitrary.ArbitraryF f, Test.QuickCheck.Arbitrary.Arbitrary p) => Data.Comp.Derive.Arbitrary.ArbitraryF (f Data.Comp.Ops.:&: p)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,) b0 c0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,) b0 c0 d0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0, Test.QuickCheck.Arbitrary.Arbitrary e0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,) b0 c0 d0 e0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0, Test.QuickCheck.Arbitrary.Arbitrary e0, Test.QuickCheck.Arbitrary.Arbitrary f0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,) b0 c0 d0 e0 f0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0, Test.QuickCheck.Arbitrary.Arbitrary e0, Test.QuickCheck.Arbitrary.Arbitrary f0, Test.QuickCheck.Arbitrary.Arbitrary g0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,) b0 c0 d0 e0 f0 g0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0, Test.QuickCheck.Arbitrary.Arbitrary e0, Test.QuickCheck.Arbitrary.Arbitrary f0, Test.QuickCheck.Arbitrary.Arbitrary g0, Test.QuickCheck.Arbitrary.Arbitrary h0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,,) b0 c0 d0 e0 f0 g0 h0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0, Test.QuickCheck.Arbitrary.Arbitrary e0, Test.QuickCheck.Arbitrary.Arbitrary f0, Test.QuickCheck.Arbitrary.Arbitrary g0, Test.QuickCheck.Arbitrary.Arbitrary h0, Test.QuickCheck.Arbitrary.Arbitrary i0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,,,) b0 c0 d0 e0 f0 g0 h0 i0)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b0, Test.QuickCheck.Arbitrary.Arbitrary c0, Test.QuickCheck.Arbitrary.Arbitrary d0, Test.QuickCheck.Arbitrary.Arbitrary e0, Test.QuickCheck.Arbitrary.Arbitrary f0, Test.QuickCheck.Arbitrary.Arbitrary g0, Test.QuickCheck.Arbitrary.Arbitrary h0, Test.QuickCheck.Arbitrary.Arbitrary i0, Test.QuickCheck.Arbitrary.Arbitrary j0) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,,,,) b0 c0 d0 e0 f0 g0 h0 i0 j0)
+ Data.Comp.Arbitrary: instance Data.Comp.Derive.Arbitrary.ArbitraryF GHC.Base.Maybe
+ Data.Comp.Arbitrary: instance Data.Comp.Derive.Arbitrary.ArbitraryF []
+ Data.Comp.Arbitrary: instance Data.Comp.Derive.Arbitrary.ArbitraryF f => Data.Comp.Derive.Arbitrary.ArbitraryF (Data.Comp.Term.Context f)
+ Data.Comp.Arbitrary: instance Data.Comp.Derive.Arbitrary.ArbitraryF f => Test.QuickCheck.Arbitrary.Arbitrary (Data.Comp.Term.Term f)
+ Data.Comp.Arbitrary: instance Test.QuickCheck.Arbitrary.Arbitrary b0 => Data.Comp.Derive.Arbitrary.ArbitraryF ((,) b0)
+ Data.Comp.Decompose: instance (Data.Comp.Variables.HasVars f v, GHC.Base.Functor f, Data.Foldable.Foldable f) => Data.Comp.Decompose.Decompose f v
+ Data.Comp.DeepSeq: instance (Data.Comp.Derive.DeepSeq.NFDataF f, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Data.Comp.Term.Cxt h f a)
+ Data.Comp.DeepSeq: instance (Data.Comp.Derive.DeepSeq.NFDataF f, Control.DeepSeq.NFData a) => Data.Comp.Derive.DeepSeq.NFDataF (f Data.Comp.Ops.:&: a)
+ Data.Comp.DeepSeq: instance (Data.Comp.Derive.DeepSeq.NFDataF f, Data.Comp.Derive.DeepSeq.NFDataF g) => Data.Comp.Derive.DeepSeq.NFDataF (f Data.Comp.Ops.:+: g)
+ Data.Comp.DeepSeq: instance Control.DeepSeq.NFData a0 => Data.Comp.Derive.DeepSeq.NFDataF ((,) a0)
+ Data.Comp.DeepSeq: instance Data.Comp.Derive.DeepSeq.NFDataF GHC.Base.Maybe
+ Data.Comp.DeepSeq: instance Data.Comp.Derive.DeepSeq.NFDataF []
+ Data.Comp.Derive.Utils: DataInfo :: Cxt -> Name -> [TyVarBndr] -> [Con] -> [Name] -> DataInfo
+ Data.Comp.Derive.Utils: data DataInfo
+ Data.Comp.Derive.Utils: getBinaryFArg :: Type -> Maybe Type -> Type
+ Data.Comp.Derive.Utils: getUnaryFArg :: Type -> Maybe Type -> Type
+ Data.Comp.Derive.Utils: mkInstanceD :: Cxt -> Type -> [Dec] -> Dec
+ Data.Comp.Desugar: instance (Data.Comp.Desugar.Desugar f h, Data.Comp.Desugar.Desugar g h) => Data.Comp.Desugar.Desugar (f Data.Comp.Ops.:+: g) h
+ Data.Comp.Desugar: instance (GHC.Base.Functor f, GHC.Base.Functor g, f Data.Comp.Ops.:<: g) => Data.Comp.Desugar.Desugar f g
+ Data.Comp.Equality: instance (Data.Comp.Derive.Equality.EqF f, Data.Comp.Derive.Equality.EqF g) => Data.Comp.Derive.Equality.EqF (f Data.Comp.Ops.:+: g)
+ Data.Comp.Equality: instance (Data.Comp.Derive.Equality.EqF f, GHC.Classes.Eq a) => GHC.Classes.Eq (Data.Comp.Term.Cxt h f a)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0) => Data.Comp.Derive.Equality.EqF ((,,) a0 b0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0) => Data.Comp.Derive.Equality.EqF ((,,,) a0 b0 c0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0, GHC.Classes.Eq d0) => Data.Comp.Derive.Equality.EqF ((,,,,) a0 b0 c0 d0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0, GHC.Classes.Eq d0, GHC.Classes.Eq e0) => Data.Comp.Derive.Equality.EqF ((,,,,,) a0 b0 c0 d0 e0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0, GHC.Classes.Eq d0, GHC.Classes.Eq e0, GHC.Classes.Eq f0) => Data.Comp.Derive.Equality.EqF ((,,,,,,) a0 b0 c0 d0 e0 f0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0, GHC.Classes.Eq d0, GHC.Classes.Eq e0, GHC.Classes.Eq f0, GHC.Classes.Eq g0) => Data.Comp.Derive.Equality.EqF ((,,,,,,,) a0 b0 c0 d0 e0 f0 g0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0, GHC.Classes.Eq d0, GHC.Classes.Eq e0, GHC.Classes.Eq f0, GHC.Classes.Eq g0, GHC.Classes.Eq h0) => Data.Comp.Derive.Equality.EqF ((,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a0, GHC.Classes.Eq b0, GHC.Classes.Eq c0, GHC.Classes.Eq d0, GHC.Classes.Eq e0, GHC.Classes.Eq f0, GHC.Classes.Eq g0, GHC.Classes.Eq h0, GHC.Classes.Eq i0) => Data.Comp.Derive.Equality.EqF ((,,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0 i0)
+ Data.Comp.Equality: instance Data.Comp.Derive.Equality.EqF GHC.Base.Maybe
+ Data.Comp.Equality: instance Data.Comp.Derive.Equality.EqF []
+ Data.Comp.Equality: instance Data.Comp.Derive.Equality.EqF f => Data.Comp.Derive.Equality.EqF (Data.Comp.Term.Cxt h f)
+ Data.Comp.Equality: instance GHC.Classes.Eq a0 => Data.Comp.Derive.Equality.EqF ((,) a0)
+ Data.Comp.Mapping: instance Data.Comp.Mapping.Mapping (Data.Comp.Mapping.NumMap k) (Data.Comp.Mapping.Numbered k)
+ Data.Comp.Mapping: instance Data.Foldable.Foldable (Data.Comp.Mapping.NumMap k)
+ Data.Comp.Mapping: instance Data.Traversable.Traversable (Data.Comp.Mapping.NumMap k)
+ Data.Comp.Mapping: instance GHC.Base.Functor (Data.Comp.Mapping.NumMap k)
+ Data.Comp.Multi.Desugar: instance (Data.Comp.Multi.Desugar.Desugar f h, Data.Comp.Multi.Desugar.Desugar g h) => Data.Comp.Multi.Desugar.Desugar (f Data.Comp.Multi.Ops.:+: g) h
+ Data.Comp.Multi.Desugar: instance (Data.Comp.Multi.HFunctor.HFunctor f, Data.Comp.Multi.HFunctor.HFunctor g, f Data.Comp.Multi.Ops.:<: g) => Data.Comp.Multi.Desugar.Desugar f g
+ Data.Comp.Multi.Equality: instance (Data.Comp.Multi.Equality.EqHF f, Data.Comp.Multi.Equality.EqHF g) => Data.Comp.Multi.Equality.EqHF (f Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Equality: instance (Data.Comp.Multi.Equality.EqHF f, Data.Comp.Multi.Equality.KEq a) => Data.Comp.Multi.Equality.KEq (Data.Comp.Multi.Term.Cxt h f a)
+ Data.Comp.Multi.Equality: instance (Data.Comp.Multi.Equality.EqHF f, Data.Comp.Multi.Equality.KEq a) => GHC.Classes.Eq (Data.Comp.Multi.Term.Cxt h f a i)
+ Data.Comp.Multi.Equality: instance Data.Comp.Multi.Equality.EqHF f => Data.Comp.Multi.Equality.EqHF (Data.Comp.Multi.Term.Cxt h f)
+ Data.Comp.Multi.Equality: instance Data.Comp.Multi.Equality.KEq a => GHC.Classes.Eq (Data.Comp.Multi.HFunctor.E a)
+ Data.Comp.Multi.Equality: instance GHC.Classes.Eq a => Data.Comp.Multi.Equality.KEq (Data.Comp.Multi.HFunctor.K a)
+ Data.Comp.Multi.HFunctor: [unA] :: A f -> forall i. f i
+ Data.Comp.Multi.HFunctor: [unE] :: E f -> f i
+ Data.Comp.Multi.HFunctor: [unI] :: I a -> a
+ Data.Comp.Multi.HFunctor: [unK] :: K a i -> a
+ Data.Comp.Multi.HFunctor: instance Data.Foldable.Foldable (Data.Comp.Multi.HFunctor.K a)
+ Data.Comp.Multi.HFunctor: instance Data.Foldable.Foldable Data.Comp.Multi.HFunctor.I
+ Data.Comp.Multi.HFunctor: instance Data.Traversable.Traversable (Data.Comp.Multi.HFunctor.K a)
+ Data.Comp.Multi.HFunctor: instance Data.Traversable.Traversable Data.Comp.Multi.HFunctor.I
+ Data.Comp.Multi.HFunctor: instance GHC.Base.Functor (Data.Comp.Multi.HFunctor.K a)
+ Data.Comp.Multi.HFunctor: instance GHC.Base.Functor Data.Comp.Multi.HFunctor.I
+ Data.Comp.Multi.HFunctor: instance GHC.Base.Functor f => Data.Comp.Multi.HFunctor.HFunctor (Data.Functor.Compose.Compose f)
+ Data.Comp.Multi.HFunctor: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Comp.Multi.HFunctor.K a i)
+ Data.Comp.Multi.HFunctor: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Comp.Multi.HFunctor.K a i)
+ Data.Comp.Multi.Mapping: instance Data.Comp.Multi.Mapping.Mapping (Data.Comp.Multi.Mapping.NumMap k) (Data.Comp.Multi.Mapping.Numbered k)
+ Data.Comp.Multi.Mapping: instance GHC.Base.Functor (Data.Comp.Multi.Mapping.NumMap k)
+ Data.Comp.Multi.Ops: instance (Data.Comp.Multi.HFoldable.HFoldable f, Data.Comp.Multi.HFoldable.HFoldable g) => Data.Comp.Multi.HFoldable.HFoldable (f Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Ops: instance (Data.Comp.Multi.HFunctor.HFunctor f, Data.Comp.Multi.HFunctor.HFunctor g) => Data.Comp.Multi.HFunctor.HFunctor (f Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Ops: instance (Data.Comp.Multi.HTraversable.HTraversable f, Data.Comp.Multi.HTraversable.HTraversable g) => Data.Comp.Multi.HTraversable.HTraversable (f Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Ops: instance (Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p1) f1 g, Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p2) f2 g) => Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Sum p1 p2)) (f1 Data.Comp.Multi.Ops.:+: f2) g
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.HFoldable.HFoldable f => Data.Comp.Multi.HFoldable.HFoldable (f Data.Comp.Multi.Ops.:&: a)
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.HFunctor.HFunctor f => Data.Comp.Multi.HFunctor.HFunctor (f Data.Comp.Multi.Ops.:&: a)
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.HTraversable.HTraversable f => Data.Comp.Multi.HTraversable.HTraversable (f Data.Comp.Multi.Ops.:&: a)
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.DistAnn f p (f Data.Comp.Multi.Ops.:&: p)
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.DistAnn s p s' => Data.Comp.Multi.Ops.DistAnn (f Data.Comp.Multi.Ops.:+: s) p ((f Data.Comp.Multi.Ops.:&: p) Data.Comp.Multi.Ops.:+: s')
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.RemA (f Data.Comp.Multi.Ops.:&: p) f
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.RemA s s' => Data.Comp.Multi.Ops.RemA ((f Data.Comp.Multi.Ops.:&: p) Data.Comp.Multi.Ops.:+: s) (f Data.Comp.Multi.Ops.:+: s')
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found 'Data.Comp.SubsumeCommon.Here) f f
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Le p)) f (g Data.Comp.Multi.Ops.:+: g')
+ Data.Comp.Multi.Ops: instance Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Multi.Ops.Subsume ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Ri p)) f (g' Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Ordering: instance (Data.Comp.Multi.HFunctor.HFunctor f, Data.Comp.Multi.Ordering.OrdHF f) => Data.Comp.Multi.Ordering.OrdHF (Data.Comp.Multi.Term.Cxt h f)
+ Data.Comp.Multi.Ordering: instance (Data.Comp.Multi.HFunctor.HFunctor f, Data.Comp.Multi.Ordering.OrdHF f, Data.Comp.Multi.Ordering.KOrd a) => Data.Comp.Multi.Ordering.KOrd (Data.Comp.Multi.Term.Cxt h f a)
+ Data.Comp.Multi.Ordering: instance (Data.Comp.Multi.HFunctor.HFunctor f, Data.Comp.Multi.Ordering.OrdHF f, Data.Comp.Multi.Ordering.KOrd a) => GHC.Classes.Ord (Data.Comp.Multi.Term.Cxt h f a i)
+ Data.Comp.Multi.Ordering: instance (Data.Comp.Multi.Ordering.OrdHF f, Data.Comp.Multi.Ordering.OrdHF g) => Data.Comp.Multi.Ordering.OrdHF (f Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Ordering: instance Data.Comp.Multi.Ordering.KOrd f => GHC.Classes.Ord (Data.Comp.Multi.HFunctor.E f)
+ Data.Comp.Multi.Ordering: instance GHC.Classes.Ord a => Data.Comp.Multi.Ordering.KOrd (Data.Comp.Multi.HFunctor.K a)
+ Data.Comp.Multi.Projection: instance (Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found p1) f1 g, Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found p2) f2 g) => Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Sum p1 p2)) (f1 Data.Comp.Ops.:*: f2) g
+ Data.Comp.Multi.Projection: instance Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found 'Data.Comp.SubsumeCommon.Here) f f
+ Data.Comp.Multi.Projection: instance Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Le p)) f (g Data.Comp.Ops.:*: g')
+ Data.Comp.Multi.Projection: instance Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Multi.Projection.Proj ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Ri p)) f (g' Data.Comp.Ops.:*: g)
+ Data.Comp.Multi.Show: instance (Data.Comp.Multi.Derive.Show.ShowHF f, Data.Comp.Multi.Derive.Show.ShowHF g) => Data.Comp.Multi.Derive.Show.ShowHF (f Data.Comp.Multi.Ops.:+: g)
+ Data.Comp.Multi.Show: instance (Data.Comp.Multi.Derive.Show.ShowHF f, Data.Comp.Multi.HFunctor.HFunctor f) => Data.Comp.Multi.Derive.Show.ShowHF (Data.Comp.Multi.Term.Cxt h f)
+ Data.Comp.Multi.Show: instance (Data.Comp.Multi.Derive.Show.ShowHF f, Data.Comp.Multi.HFunctor.HFunctor f, Data.Comp.Multi.Derive.Show.KShow a) => Data.Comp.Multi.Derive.Show.KShow (Data.Comp.Multi.Term.Cxt h f a)
+ Data.Comp.Multi.Show: instance (Data.Comp.Multi.Derive.Show.ShowHF f, GHC.Show.Show p) => Data.Comp.Multi.Derive.Show.ShowHF (f Data.Comp.Multi.Ops.:&: p)
+ Data.Comp.Multi.Show: instance Data.Comp.Multi.Derive.Show.KShow (Data.Comp.Multi.HFunctor.K ())
+ Data.Comp.Multi.Show: instance Data.Comp.Multi.Derive.Show.KShow (Data.Comp.Multi.HFunctor.K GHC.Base.String)
+ Data.Comp.Multi.Show: instance Data.Comp.Multi.Derive.Show.KShow (Data.Comp.Multi.Term.Cxt h f a) => GHC.Show.Show (Data.Comp.Multi.Term.Cxt h f a i)
+ Data.Comp.Multi.Term: instance Data.Comp.Multi.HFoldable.HFoldable f => Data.Comp.Multi.HFoldable.HFoldable (Data.Comp.Multi.Term.Cxt h f)
+ Data.Comp.Multi.Term: instance Data.Comp.Multi.HFunctor.HFunctor f => Data.Comp.Multi.HFunctor.HFunctor (Data.Comp.Multi.Term.Cxt h f)
+ Data.Comp.Multi.Term: instance Data.Comp.Multi.HTraversable.HTraversable f => Data.Comp.Multi.HTraversable.HTraversable (Data.Comp.Multi.Term.Cxt h f)
+ Data.Comp.Multi.Variables: instance (Data.Comp.Multi.Variables.HasVars f v0, Data.Comp.Multi.Variables.HasVars g v0) => Data.Comp.Multi.Variables.HasVars (f Data.Comp.Multi.Ops.:+: g) v0
+ Data.Comp.Multi.Variables: instance (Data.Comp.Multi.Variables.SubstVars v t a, Data.Comp.Multi.HFunctor.HFunctor f) => Data.Comp.Multi.Variables.SubstVars v t (f a)
+ Data.Comp.Multi.Variables: instance (GHC.Classes.Ord v, Data.Comp.Multi.Variables.HasVars f v, Data.Comp.Multi.HTraversable.HTraversable f) => Data.Comp.Multi.Variables.SubstVars v (Data.Comp.Multi.Term.Cxt h f a) (Data.Comp.Multi.Term.Cxt h f a)
+ Data.Comp.Ops: instance (Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p1) f1 g, Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p2) f2 g) => Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Sum p1 p2)) (f1 Data.Comp.Ops.:+: f2) g
+ Data.Comp.Ops: instance (Data.Foldable.Foldable f, Data.Foldable.Foldable g) => Data.Foldable.Foldable (f Data.Comp.Ops.:*: g)
+ Data.Comp.Ops: instance (Data.Foldable.Foldable f, Data.Foldable.Foldable g) => Data.Foldable.Foldable (f Data.Comp.Ops.:+: g)
+ Data.Comp.Ops: instance (Data.Traversable.Traversable f, Data.Traversable.Traversable g) => Data.Traversable.Traversable (f Data.Comp.Ops.:*: g)
+ Data.Comp.Ops: instance (Data.Traversable.Traversable f, Data.Traversable.Traversable g) => Data.Traversable.Traversable (f Data.Comp.Ops.:+: g)
+ Data.Comp.Ops: instance (GHC.Base.Functor f, GHC.Base.Functor g) => GHC.Base.Functor (f Data.Comp.Ops.:*: g)
+ Data.Comp.Ops: instance (GHC.Base.Functor f, GHC.Base.Functor g) => GHC.Base.Functor (f Data.Comp.Ops.:+: g)
+ Data.Comp.Ops: instance Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found 'Data.Comp.SubsumeCommon.Here) f f
+ Data.Comp.Ops: instance Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Le p)) f (g Data.Comp.Ops.:+: g')
+ Data.Comp.Ops: instance Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Ops.Subsume ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Ri p)) f (g' Data.Comp.Ops.:+: g)
+ Data.Comp.Ops: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (f Data.Comp.Ops.:&: a)
+ Data.Comp.Ops: instance Data.Traversable.Traversable f => Data.Traversable.Traversable (f Data.Comp.Ops.:&: a)
+ Data.Comp.Ops: instance GHC.Base.Functor f => GHC.Base.Functor (f Data.Comp.Ops.:&: a)
+ Data.Comp.Ops: instance forall (k :: BOX) (f :: k -> *) (s :: k -> *) p (s' :: k -> *). Data.Comp.Ops.DistAnn s p s' => Data.Comp.Ops.DistAnn (f Data.Comp.Ops.:+: s) p ((f Data.Comp.Ops.:&: p) Data.Comp.Ops.:+: s')
+ Data.Comp.Ops: instance forall (k :: BOX) (f :: k -> *) p (s :: k -> *) (s' :: k -> *). Data.Comp.Ops.RemA s s' => Data.Comp.Ops.RemA ((f Data.Comp.Ops.:&: p) Data.Comp.Ops.:+: s) (f Data.Comp.Ops.:+: s')
+ Data.Comp.Ops: instance forall (k :: BOX) (f :: k -> *) p. Data.Comp.Ops.DistAnn f p (f Data.Comp.Ops.:&: p)
+ Data.Comp.Ops: instance forall (k :: BOX) (f :: k -> *) p. Data.Comp.Ops.RemA (f Data.Comp.Ops.:&: p) f
+ Data.Comp.Ordering: instance (Data.Comp.Derive.Ordering.OrdF f, Data.Comp.Derive.Ordering.OrdF g) => Data.Comp.Derive.Ordering.OrdF (f Data.Comp.Ops.:+: g)
+ Data.Comp.Ordering: instance (Data.Comp.Derive.Ordering.OrdF f, GHC.Classes.Ord a) => GHC.Classes.Ord (Data.Comp.Term.Cxt h f a)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0) => Data.Comp.Derive.Ordering.OrdF ((,,) a0 b0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0) => Data.Comp.Derive.Ordering.OrdF ((,,,) a0 b0 c0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0, GHC.Classes.Ord d0) => Data.Comp.Derive.Ordering.OrdF ((,,,,) a0 b0 c0 d0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0, GHC.Classes.Ord d0, GHC.Classes.Ord e0) => Data.Comp.Derive.Ordering.OrdF ((,,,,,) a0 b0 c0 d0 e0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0, GHC.Classes.Ord d0, GHC.Classes.Ord e0, GHC.Classes.Ord f0) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,) a0 b0 c0 d0 e0 f0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0, GHC.Classes.Ord d0, GHC.Classes.Ord e0, GHC.Classes.Ord f0, GHC.Classes.Ord g0) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,,) a0 b0 c0 d0 e0 f0 g0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0, GHC.Classes.Ord d0, GHC.Classes.Ord e0, GHC.Classes.Ord f0, GHC.Classes.Ord g0, GHC.Classes.Ord h0) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a0, GHC.Classes.Ord b0, GHC.Classes.Ord c0, GHC.Classes.Ord d0, GHC.Classes.Ord e0, GHC.Classes.Ord f0, GHC.Classes.Ord g0, GHC.Classes.Ord h0, GHC.Classes.Ord i0) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,,,,) a0 b0 c0 d0 e0 f0 g0 h0 i0)
+ Data.Comp.Ordering: instance Data.Comp.Derive.Ordering.OrdF GHC.Base.Maybe
+ Data.Comp.Ordering: instance Data.Comp.Derive.Ordering.OrdF []
+ Data.Comp.Ordering: instance Data.Comp.Derive.Ordering.OrdF f => Data.Comp.Derive.Ordering.OrdF (Data.Comp.Term.Cxt h f)
+ Data.Comp.Ordering: instance GHC.Classes.Ord a0 => Data.Comp.Derive.Ordering.OrdF ((,) a0)
+ Data.Comp.Projection: instance (Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found p1) f1 g, Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found p2) f2 g) => Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Sum p1 p2)) (f1, f2) g
+ Data.Comp.Projection: instance Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found 'Data.Comp.SubsumeCommon.Here) f f
+ Data.Comp.Projection: instance Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Le p)) f (g, g')
+ Data.Comp.Projection: instance Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found p) f g => Data.Comp.Projection.Proj ('Data.Comp.SubsumeCommon.Found ('Data.Comp.SubsumeCommon.Ri p)) f (g', g)
+ Data.Comp.Render: instance (Data.Comp.Render.Render f, Data.Comp.Render.Render g) => Data.Comp.Render.Render (f Data.Comp.Ops.:+: g)
+ Data.Comp.Show: instance (Data.Comp.Derive.Show.ShowConstr f, Data.Comp.Derive.Show.ShowConstr g) => Data.Comp.Derive.Show.ShowConstr (f Data.Comp.Ops.:+: g)
+ Data.Comp.Show: instance (Data.Comp.Derive.Show.ShowConstr f, GHC.Show.Show p) => Data.Comp.Derive.Show.ShowConstr (f Data.Comp.Ops.:&: p)
+ Data.Comp.Show: instance (Data.Comp.Derive.Show.ShowF f, Data.Comp.Derive.Show.ShowF g) => Data.Comp.Derive.Show.ShowF (f Data.Comp.Ops.:+: g)
+ Data.Comp.Show: instance (Data.Comp.Derive.Show.ShowF f, GHC.Show.Show p) => Data.Comp.Derive.Show.ShowF (f Data.Comp.Ops.:&: p)
+ Data.Comp.Show: instance (GHC.Base.Functor f, Data.Comp.Derive.Show.ShowF f) => Data.Comp.Derive.Show.ShowF (Data.Comp.Term.Cxt h f)
+ Data.Comp.Show: instance (GHC.Base.Functor f, Data.Comp.Derive.Show.ShowF f, GHC.Show.Show a) => GHC.Show.Show (Data.Comp.Term.Cxt h f a)
+ Data.Comp.Show: instance Data.Comp.Derive.Show.ShowF GHC.Base.Maybe
+ Data.Comp.Show: instance Data.Comp.Derive.Show.ShowF []
+ Data.Comp.Show: instance GHC.Show.Show a0 => Data.Comp.Derive.Show.ShowF ((,) a0)
+ Data.Comp.Sum: instance (GHC.Classes.Eq (f a), GHC.Classes.Eq (g a)) => GHC.Classes.Eq ((Data.Comp.Ops.:+:) f g a)
+ Data.Comp.Sum: instance (GHC.Classes.Ord (f a), GHC.Classes.Ord (g a)) => GHC.Classes.Ord ((Data.Comp.Ops.:+:) f g a)
+ Data.Comp.Sum: instance (GHC.Show.Show (f a), GHC.Show.Show (g a)) => GHC.Show.Show ((Data.Comp.Ops.:+:) f g a)
+ Data.Comp.Term: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (Data.Comp.Term.Cxt h f)
+ Data.Comp.Term: instance Data.Traversable.Traversable f => Data.Traversable.Traversable (Data.Comp.Term.Cxt h f)
+ Data.Comp.Term: instance GHC.Base.Functor f => GHC.Base.Applicative (Data.Comp.Term.Context f)
+ Data.Comp.Term: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Comp.Term.Cxt h f)
+ Data.Comp.Term: instance GHC.Base.Functor f => GHC.Base.Monad (Data.Comp.Term.Context f)
+ Data.Comp.Unification: [usEqs] :: UnifyState f v -> Equations f
+ Data.Comp.Unification: [usSubst] :: UnifyState f v -> Subst f v
+ Data.Comp.Variables: instance (Data.Comp.Variables.HasVars f v0, Data.Comp.Variables.HasVars g v0) => Data.Comp.Variables.HasVars (f Data.Comp.Ops.:+: g) v0
+ Data.Comp.Variables: instance (Data.Comp.Variables.SubstVars v t a, GHC.Base.Functor f) => Data.Comp.Variables.SubstVars v t (f a)
+ Data.Comp.Variables: instance (GHC.Classes.Ord v, Data.Comp.Variables.HasVars f v, Data.Traversable.Traversable f) => Data.Comp.Variables.SubstVars v (Data.Comp.Term.Cxt h f a) (Data.Comp.Term.Cxt h f a)
+ Data.Comp.Variables: instance Data.Comp.Variables.HasVars f v => Data.Comp.Variables.HasVars (f Data.Comp.Ops.:&: a) v
- Data.Comp.Algebra: apo :: Functor f => RCoalg f a -> a -> Term f
+ Data.Comp.Algebra: apo :: (Functor f) => RCoalg f a -> a -> Term f
- Data.Comp.Algebra: appCxt :: Functor f => Context f (Cxt h f a) -> Cxt h f a
+ Data.Comp.Algebra: appCxt :: (Functor f) => Context f (Cxt h f a) -> Cxt h f a
- Data.Comp.Algebra: appHom' :: Functor g => Hom f g -> CxtFun f g
+ Data.Comp.Algebra: appHom' :: (Functor g) => Hom f g -> CxtFun f g
- Data.Comp.Algebra: appSigFun :: Functor f => SigFun f g -> CxtFun f g
+ Data.Comp.Algebra: appSigFun :: (Functor f) => SigFun f g -> CxtFun f g
- Data.Comp.Algebra: appSigFun' :: Functor g => SigFun f g -> CxtFun f g
+ Data.Comp.Algebra: appSigFun' :: (Functor g) => SigFun f g -> CxtFun f g
- Data.Comp.Algebra: cata :: Functor f => Alg f a -> Term f -> a
+ Data.Comp.Algebra: cata :: (Functor f) => Alg f a -> Term f -> a
- Data.Comp.Algebra: cata' :: Functor f => Alg f a -> Cxt h f a -> a
+ Data.Comp.Algebra: cata' :: (Functor f) => Alg f a -> Cxt h f a -> a
- Data.Comp.Algebra: compAlg :: Functor g => Alg g a -> Hom f g -> Alg f a
+ Data.Comp.Algebra: compAlg :: (Functor g) => Alg g a -> Hom f g -> Alg f a
- Data.Comp.Algebra: compAlgSigFunM :: Monad m => AlgM m g a -> SigFunM m f g -> AlgM m f a
+ Data.Comp.Algebra: compAlgSigFunM :: (Monad m) => AlgM m g a -> SigFunM m f g -> AlgM m f a
- Data.Comp.Algebra: compHomSigFunM :: Monad m => HomM m g h -> SigFunM m f g -> HomM m f h
+ Data.Comp.Algebra: compHomSigFunM :: (Monad m) => HomM m g h -> SigFunM m f g -> HomM m f h
- Data.Comp.Algebra: compSigFunHom :: Functor g => SigFun g h -> Hom f g -> Hom f h
+ Data.Comp.Algebra: compSigFunHom :: (Functor g) => SigFun g h -> Hom f g -> Hom f h
- Data.Comp.Algebra: compSigFunM :: Monad m => SigFunM m g h -> SigFunM m f g -> SigFunM m f h
+ Data.Comp.Algebra: compSigFunM :: (Monad m) => SigFunM m g h -> SigFunM m f g -> SigFunM m f h
- Data.Comp.Algebra: free :: Functor f => Alg f b -> (a -> b) -> Cxt h f a -> b
+ Data.Comp.Algebra: free :: (Functor f) => Alg f b -> (a -> b) -> Cxt h f a -> b
- Data.Comp.Algebra: hom :: Functor g => SigFun f g -> Hom f g
+ Data.Comp.Algebra: hom :: (Functor g) => SigFun f g -> Hom f g
- Data.Comp.Algebra: para :: Functor f => RAlg f a -> Term f -> a
+ Data.Comp.Algebra: para :: (Functor f) => RAlg f a -> Term f -> a
- Data.Comp.Algebra: sigFunM :: Monad m => SigFun f g -> SigFunM m f g
+ Data.Comp.Algebra: sigFunM :: (Monad m) => SigFun f g -> SigFunM m f g
- Data.Comp.Annotation: liftA :: RemA s s' => (s' a -> t) -> s a -> t
+ Data.Comp.Annotation: liftA :: (RemA s s') => (s' a -> t) -> s a -> t
- Data.Comp.Decompose: arguments :: Foldable f => f a -> [a]
+ Data.Comp.Decompose: arguments :: (Foldable f) => f a -> [a]
- Data.Comp.Decompose: decompose :: Decompose f v => Term f -> DecompTerm f v
+ Data.Comp.Decompose: decompose :: (Decompose f v) => Term f -> DecompTerm f v
- Data.Comp.Decompose: structure :: Functor f => f a -> Const f
+ Data.Comp.Decompose: structure :: (Functor f) => f a -> Const f
- Data.Comp.Derive.Utils: abstractNewtype :: Info -> Info
+ Data.Comp.Derive.Utils: abstractNewtype :: Info -> Maybe DataInfo
- Data.Comp.Derive.Utils: abstractNewtypeQ :: Q Info -> Q Info
+ Data.Comp.Derive.Utils: abstractNewtypeQ :: Q Info -> Q (Maybe DataInfo)
- Data.Comp.Derive.Utils: isEqualP :: Pred -> Maybe (Type, Type)
+ Data.Comp.Derive.Utils: isEqualP :: Type -> Maybe (Type, Type)
- Data.Comp.Derive.Utils: mkClassP :: Name -> [Type] -> Pred
+ Data.Comp.Derive.Utils: mkClassP :: Name -> [Type] -> Type
- Data.Comp.Derive.Utils: normalCon :: Con -> (Name, [StrictType])
+ Data.Comp.Derive.Utils: normalCon :: Con -> (Name, [StrictType], Maybe Type)
- Data.Comp.Derive.Utils: normalCon' :: Con -> (Name, [Type])
+ Data.Comp.Derive.Utils: normalCon' :: Con -> (Name, [Type], Maybe Type)
- Data.Comp.Derive.Utils: normalConExp :: Con -> Q (Name, [Type])
+ Data.Comp.Derive.Utils: normalConExp :: Con -> Q (Name, [Type], Maybe Type)
- Data.Comp.Derive.Utils: normalConStrExp :: Con -> Q (Name, [StrictType])
+ Data.Comp.Derive.Utils: normalConStrExp :: Con -> Q (Name, [StrictType], Maybe Type)
- Data.Comp.Generic: transform :: Functor f => (Term f -> Term f) -> Term f -> Term f
+ Data.Comp.Generic: transform :: (Functor f) => (Term f -> Term f) -> Term f -> Term f
- Data.Comp.Generic: transform' :: Functor f => (Term f -> Maybe (Term f)) -> Term f -> Term f
+ Data.Comp.Generic: transform' :: (Functor f) => (Term f -> Maybe (Term f)) -> Term f -> Term f
- Data.Comp.Multi.Algebra: apo :: HFunctor f => RCoalg f a -> a :-> Term f
+ Data.Comp.Multi.Algebra: apo :: (HFunctor f) => RCoalg f a -> a :-> Term f
- Data.Comp.Multi.Algebra: appHom' :: HFunctor g => Hom f g -> CxtFun f g
+ Data.Comp.Multi.Algebra: appHom' :: (HFunctor g) => Hom f g -> CxtFun f g
- Data.Comp.Multi.Algebra: appSigFun :: HFunctor f => SigFun f g -> CxtFun f g
+ Data.Comp.Multi.Algebra: appSigFun :: (HFunctor f) => SigFun f g -> CxtFun f g
- Data.Comp.Multi.Algebra: appSigFun' :: HFunctor g => SigFun f g -> CxtFun f g
+ Data.Comp.Multi.Algebra: appSigFun' :: (HFunctor g) => SigFun f g -> CxtFun f g
- Data.Comp.Multi.Algebra: compAlg :: HFunctor g => Alg g a -> Hom f g -> Alg f a
+ Data.Comp.Multi.Algebra: compAlg :: (HFunctor g) => Alg g a -> Hom f g -> Alg f a
- Data.Comp.Multi.Algebra: compSigFunM :: Monad m => SigFunM m g h -> SigFunM m f g -> SigFunM m f h
+ Data.Comp.Multi.Algebra: compSigFunM :: (Monad m) => SigFunM m g h -> SigFunM m f g -> SigFunM m f h
- Data.Comp.Multi.Algebra: free :: HFunctor f => Alg f b -> (a :-> b) -> Cxt h f a :-> b
+ Data.Comp.Multi.Algebra: free :: (HFunctor f) => Alg f b -> (a :-> b) -> Cxt h f a :-> b
- Data.Comp.Multi.Algebra: hom :: HFunctor g => SigFun f g -> Hom f g
+ Data.Comp.Multi.Algebra: hom :: (HFunctor g) => SigFun f g -> Hom f g
- Data.Comp.Multi.Algebra: para :: HFunctor f => RAlg f a -> Term f :-> a
+ Data.Comp.Multi.Algebra: para :: (HFunctor f) => RAlg f a -> Term f :-> a
- Data.Comp.Multi.Algebra: sigFunM :: Monad m => SigFun f g -> SigFunM m f g
+ Data.Comp.Multi.Algebra: sigFunM :: (Monad m) => SigFun f g -> SigFunM m f g
- Data.Comp.Multi.Annotation: liftA :: RemA s s' => (s' a :-> t) -> s a :-> t
+ Data.Comp.Multi.Annotation: liftA :: (RemA s s') => (s' a :-> t) -> s a :-> t
- Data.Comp.Multi.Generic: transform :: HFunctor f => (Term f :-> Term f) -> Term f :-> Term f
+ Data.Comp.Multi.Generic: transform :: (HFunctor f) => (Term f :-> Term f) -> Term f :-> Term f
- Data.Comp.Multi.HFoldable: htoList :: HFoldable f => f a :=> [E a]
+ Data.Comp.Multi.HFoldable: htoList :: (HFoldable f) => f a :=> [E a]
- Data.Comp.Multi.HFoldable: kfoldl :: HFoldable f => (b -> a -> b) -> b -> f (K a) :=> b
+ Data.Comp.Multi.HFoldable: kfoldl :: (HFoldable f) => (b -> a -> b) -> b -> f (K a) :=> b
- Data.Comp.Multi.HFoldable: kfoldr :: HFoldable f => (a -> b -> b) -> b -> f (K a) :=> b
+ Data.Comp.Multi.HFoldable: kfoldr :: (HFoldable f) => (a -> b -> b) -> b -> f (K a) :=> b
- Data.Comp.Multi.Ops: inj :: f :<: g => f a :-> g a
+ Data.Comp.Multi.Ops: inj :: (f :<: g) => f a :-> g a
- Data.Comp.Multi.Ops: proj :: f :<: g => NatM Maybe (g a) (f a)
+ Data.Comp.Multi.Ops: proj :: (f :<: g) => NatM Maybe (g a) (f a)
- Data.Comp.Multi.Ops: spl :: f :=: (f1 :+: f2) => (f1 a :-> b) -> (f2 a :-> b) -> f a :-> b
+ Data.Comp.Multi.Ops: spl :: (f :=: (f1 :+: f2)) => (f1 a :-> b) -> (f2 a :-> b) -> f a :-> b
- Data.Comp.Multi.Projection: pr :: p :< q => q a -> p a
+ Data.Comp.Multi.Projection: pr :: (p :< q) => q a -> p a
- Data.Comp.Multi.Sum: inj :: f :<: g => f a :-> g a
+ Data.Comp.Multi.Sum: inj :: (f :<: g) => f a :-> g a
- Data.Comp.Multi.Sum: inject :: g :<: f => g (Cxt h f a) :-> Cxt h f a
+ Data.Comp.Multi.Sum: inject :: (g :<: f) => g (Cxt h f a) :-> Cxt h f a
- Data.Comp.Multi.Sum: proj :: f :<: g => NatM Maybe (g a) (f a)
+ Data.Comp.Multi.Sum: proj :: (f :<: g) => NatM Maybe (g a) (f a)
- Data.Comp.Multi.Sum: project :: g :<: f => NatM Maybe (Cxt h f a) (g (Cxt h f a))
+ Data.Comp.Multi.Sum: project :: (g :<: f) => NatM Maybe (Cxt h f a) (g (Cxt h f a))
- Data.Comp.Multi.Sum: split :: f :=: (f1 :+: f2) => (f1 (Term f) :-> a) -> (f2 (Term f) :-> a) -> Term f :-> a
+ Data.Comp.Multi.Sum: split :: (f :=: (f1 :+: f2)) => (f1 (Term f) :-> a) -> (f2 (Term f) :-> a) -> Term f :-> a
- Data.Comp.Multi.Term: constTerm :: HFunctor f => Const f :-> Term f
+ Data.Comp.Multi.Term: constTerm :: (HFunctor f) => Const f :-> Term f
- Data.Comp.Multi.Term: simpCxt :: HFunctor f => f a i -> Context f a i
+ Data.Comp.Multi.Term: simpCxt :: (HFunctor f) => f a i -> Context f a i
- Data.Comp.Multi.Term: toCxt :: HFunctor f => Term f :-> Context f a
+ Data.Comp.Multi.Term: toCxt :: (HFunctor f) => Term f :-> Context f a
- Data.Comp.Ops: inj :: f :<: g => f a -> g a
+ Data.Comp.Ops: inj :: (f :<: g) => f a -> g a
- Data.Comp.Ops: proj :: f :<: g => g a -> Maybe (f a)
+ Data.Comp.Ops: proj :: (f :<: g) => g a -> Maybe (f a)
- Data.Comp.Ops: spl :: f :=: (f1 :+: f2) => (f1 a -> b) -> (f2 a -> b) -> f a -> b
+ Data.Comp.Ops: spl :: (f :=: (f1 :+: f2)) => (f1 a -> b) -> (f2 a -> b) -> f a -> b
- Data.Comp.Projection: pr :: p :< q => q -> p
+ Data.Comp.Projection: pr :: (p :< q) => q -> p
- Data.Comp.Sum: deepInject_ :: Functor g => SigFun g f -> CxtFun g f
+ Data.Comp.Sum: deepInject_ :: (Functor g) => SigFun g f -> CxtFun g f
- Data.Comp.Sum: deepProject_ :: Traversable g => (SigFunM Maybe f g) -> CxtFunM Maybe f g
+ Data.Comp.Sum: deepProject_ :: (Traversable g) => (SigFunM Maybe f g) -> CxtFunM Maybe f g
- Data.Comp.Sum: inj :: f :<: g => f a -> g a
+ Data.Comp.Sum: inj :: (f :<: g) => f a -> g a
- Data.Comp.Sum: inject :: g :<: f => g (Cxt h f a) -> Cxt h f a
+ Data.Comp.Sum: inject :: (g :<: f) => g (Cxt h f a) -> Cxt h f a
- Data.Comp.Sum: proj :: f :<: g => g a -> Maybe (f a)
+ Data.Comp.Sum: proj :: (f :<: g) => g a -> Maybe (f a)
- Data.Comp.Sum: project :: g :<: f => Cxt h f a -> Maybe (g (Cxt h f a))
+ Data.Comp.Sum: project :: (g :<: f) => Cxt h f a -> Maybe (g (Cxt h f a))
- Data.Comp.Sum: split :: f :=: (f1 :+: f2) => (f1 (Term f) -> a) -> (f2 (Term f) -> a) -> Term f -> a
+ Data.Comp.Sum: split :: (f :=: (f1 :+: f2)) => (f1 (Term f) -> a) -> (f2 (Term f) -> a) -> Term f -> a
- Data.Comp.Term: constTerm :: Functor f => Const f -> Term f
+ Data.Comp.Term: constTerm :: (Functor f) => Const f -> Term f
- Data.Comp.Unification: failedOccursCheck :: MonadError (UnifError f v) m => v -> Term f -> m a
+ Data.Comp.Unification: failedOccursCheck :: (MonadError (UnifError f v) m) => v -> Term f -> m a
- Data.Comp.Unification: headSymbolMismatch :: MonadError (UnifError f v) m => Term f -> Term f -> m a
+ Data.Comp.Unification: headSymbolMismatch :: (MonadError (UnifError f v) m) => Term f -> Term f -> m a
Files
- compdata.cabal +4/−4
- src/Data/Comp/Algebra.hs +2/−2
- src/Data/Comp/Derive/Arbitrary.hs +2/−2
- src/Data/Comp/Derive/DeepSeq.hs +3/−3
- src/Data/Comp/Derive/Equality.hs +2/−2
- src/Data/Comp/Derive/Foldable.hs +3/−3
- src/Data/Comp/Derive/HaskellStrict.hs +11/−6
- src/Data/Comp/Derive/Ordering.hs +2/−2
- src/Data/Comp/Derive/Show.hs +8/−8
- src/Data/Comp/Derive/SmartAConstructors.hs +1/−1
- src/Data/Comp/Derive/SmartConstructors.hs +1/−1
- src/Data/Comp/Derive/Traversable.hs +3/−3
- src/Data/Comp/Derive/Utils.hs +74/−19
- src/Data/Comp/Multi/Derive/Equality.hs +4/−4
- src/Data/Comp/Multi/Derive/HFoldable.hs +3/−3
- src/Data/Comp/Multi/Derive/HFunctor.hs +3/−3
- src/Data/Comp/Multi/Derive/HTraversable.hs +3/−3
- src/Data/Comp/Multi/Derive/Ordering.hs +13/−13
- src/Data/Comp/Multi/Derive/Show.hs +4/−4
- src/Data/Comp/Multi/Derive/SmartAConstructors.hs +1/−1
- src/Data/Comp/Multi/Derive/SmartConstructors.hs +1/−1
- src/Data/Comp/Multi/Generic.hs +2/−2
- src/Data/Comp/Multi/HFoldable.hs +2/−2
- src/Data/Comp/Multi/Term.hs +2/−2
compdata.cabal view
@@ -1,5 +1,5 @@ Name: compdata-Version: 0.10+Version: 0.10.1 Synopsis: Compositional Data Types Description: @@ -187,7 +187,7 @@ Data.Comp.Multi.Derive.SmartConstructors Data.Comp.Multi.Derive.SmartAConstructors - Build-Depends: base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1, QuickCheck >= 2 && < 2.8, derive,+ Build-Depends: base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1, QuickCheck >= 2 && < 2.9, derive, deepseq, th-expand-syns, transformers, tree-view Extensions: FlexibleContexts hs-source-dirs: src@@ -198,7 +198,7 @@ Type: exitcode-stdio-1.0 Main-is: Data_Test.hs hs-source-dirs: testsuite/tests examples src- Build-Depends: base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1, QuickCheck >= 2 && < 2.8, + Build-Depends: base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1, QuickCheck >= 2 && < 2.9, HUnit, test-framework, test-framework-hunit, test-framework-quickcheck2 >= 0.3, derive, th-expand-syns, deepseq, transformers @@ -209,7 +209,7 @@ ghc-options: -W -O2 -- Disable short-cut fusion rules in order to compare optimised and unoptimised code. cpp-options: -DNO_RULES- Build-Depends: base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1, QuickCheck >= 2 && < 2.8, derive, deepseq, criterion, random, uniplate, th-expand-syns, transformers+ Build-Depends: base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1, QuickCheck >= 2 && < 2.9, derive, deepseq, criterion, random, uniplate, th-expand-syns, transformers source-repository head
src/Data/Comp/Algebra.hs view
@@ -454,12 +454,12 @@ -- | Shortcut fusion variant of 'ana'. ana' :: forall a f . Functor f => Coalg f a -> a -> Term f-ana' f t = build $ run t+ana' f t = build (run t) where run :: forall b . a -> Alg f b -> b run t con = run' t where run' :: a -> b run' t = con $ fmap run' (f t)-+{-# INLINE [2] ana' #-} build :: (forall a. Alg f a -> a) -> Term f {-# INLINE [1] build #-} build g = g Term
src/Data/Comp/Derive/Arbitrary.hs view
@@ -46,14 +46,14 @@ instances of 'Arbitrary'. -} makeArbitraryF :: Name -> Q [Dec] makeArbitraryF dt = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify dt+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify dt let argNames = map (VarT . tyVarBndrName) (tail args) complType = foldl AppT (ConT name) argNames preCond = map (mkClassP ''Arbitrary . (: [])) argNames classType = AppT (ConT ''ArbitraryF) complType arbitraryDecl <- generateArbitraryFDecl constrs shrinkDecl <- generateShrinkFDecl constrs- return [InstanceD preCond classType [arbitraryDecl, shrinkDecl]]+ return [mkInstanceD preCond classType [arbitraryDecl, shrinkDecl]] {-| This function generates a declaration of the method 'arbitrary' for the given
src/Data/Comp/Derive/DeepSeq.hs view
@@ -32,16 +32,16 @@ kind taking at least one argument. -} makeNFDataF :: Name -> Q [Dec] makeNFDataF fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames preCond = map (mkClassP ''NFData . (: [])) argNames classType = AppT (ConT ''NFDataF) complType constrs' <- mapM normalConExp constrs rnfFDecl <- funD 'rnfF (rnfFClauses constrs')- return [InstanceD preCond classType [rnfFDecl]]+ return [mkInstanceD preCond classType [rnfFDecl]] where rnfFClauses = map genRnfFClause- genRnfFClause (constr, args) = do+ genRnfFClause (constr, args,_) = do let n = length args varNs <- newNames n "x" let pat = ConP constr $ map VarP varNs
src/Data/Comp/Derive/Equality.hs view
@@ -31,13 +31,13 @@ taking at least one argument. -} makeEqF :: Name -> Q [Dec] makeEqF fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames preCond = map (mkClassP ''Eq . (: [])) argNames classType = AppT (ConT ''EqF) complType eqFDecl <- funD 'eqF (eqFClauses constrs)- return [InstanceD preCond classType [eqFDecl]]+ return [mkInstanceD preCond classType [eqFDecl]] where eqFClauses constrs = map (genEqClause.abstractConType) constrs ++ defEqClause constrs defEqClause constrs
src/Data/Comp/Derive/Foldable.hs view
@@ -39,7 +39,7 @@ kind taking at least one argument. -} makeFoldable :: Name -> Q [Dec] makeFoldable fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let fArg = VarT . tyVarBndrName $ last args argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames@@ -51,8 +51,8 @@ foldrDecl <- funD 'foldr (map foldrClause constrs') foldl1Decl <- funD 'foldl1 (map foldl1Clause constrs') foldr1Decl <- funD 'foldr1 (map foldr1Clause constrs')- return [InstanceD [] classType [foldDecl,foldMapDecl,foldlDecl,foldrDecl,foldl1Decl,foldr1Decl]]- where isFarg fArg (constr, args) = (constr, map (`containsType'` fArg) args)+ return [mkInstanceD [] classType [foldDecl,foldMapDecl,foldlDecl,foldrDecl,foldl1Decl,foldr1Decl]]+ where isFarg fArg (constr, args, gadtTy) = (constr, map (`containsType'` (getUnaryFArg fArg gadtTy)) args) filterVar [] _ = Nothing filterVar [d] x =Just (d, varE x) filterVar _ _ = error "functor variable occurring twice in argument type"
src/Data/Comp/Derive/HaskellStrict.hs view
@@ -57,7 +57,7 @@ first-order kind taking at least one argument. -} makeHaskellStrict :: Name -> Q [Dec] makeHaskellStrict fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let fArg = VarT . tyVarBndrName $ last args argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames@@ -68,7 +68,7 @@ sequenceDecl <- valD (varP 'thunkSequence) (normalB [|return|]) [] injectDecl <- valD (varP 'thunkSequenceInject) (normalB [|inject|]) [] injectDecl' <- valD (varP 'thunkSequenceInject') (normalB [|inject|]) []- return [InstanceD [] classType [sequenceDecl, injectDecl, injectDecl']]+ return [mkInstanceD [] classType [sequenceDecl, injectDecl, injectDecl']] else do (sc',matchPat,ic') <- liftM unzip3 $ P.mapM mkClauses constrs_ xn <- newName "x"@@ -76,13 +76,18 @@ let sequenceDecl = FunD 'thunkSequence sc' injectDecl = FunD 'thunkSequenceInject [Clause [VarP xn] (NormalB (doThunk `AppE` CaseE (VarE xn) matchPat)) []] injectDecl' = FunD 'thunkSequenceInject' ic'- return [InstanceD [] classType [sequenceDecl, injectDecl, injectDecl']]- where isFarg fArg (constr, args) = (constr, map (containsStr fArg) args)- containsStr _ (NotStrict,_) = []+ return [mkInstanceD [] classType [sequenceDecl, injectDecl, injectDecl']]+ where isFarg fArg (constr, args, gadtTy) = (constr, map (containsStr (getUnaryFArg fArg gadtTy)) args)+ +#if __GLASGOW_HASKELL__ < 800 containsStr fArg (IsStrict,ty) = ty `containsType'` fArg-#if __GLASGOW_HASKELL__ > 702 containsStr fArg (Unpacked,ty) = ty `containsType'` fArg+#else+ containsStr fArg (Bang _ SourceStrict,ty) = ty `containsType'` fArg+ containsStr fArg (Bang SourceUnpack _,ty) = ty `containsType'` fArg #endif+ containsStr _ _ = []+ filterVar _ nonFarg [] x = nonFarg x filterVar farg _ [depth] x = farg depth x filterVar _ _ _ _ = error "functor variable occurring twice in argument type"
src/Data/Comp/Derive/Ordering.hs view
@@ -37,13 +37,13 @@ taking at least one argument. -} makeOrdF :: Name -> Q [Dec] makeOrdF fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames preCond = map (mkClassP ''Ord . (: [])) argNames classType = AppT (ConT ''OrdF) complType eqAlgDecl <- funD 'compareF (compareFClauses constrs)- return [InstanceD preCond classType [eqAlgDecl]]+ return [mkInstanceD preCond classType [eqAlgDecl]] where compareFClauses [] = [] compareFClauses constrs = let constrs' = map abstractConType constrs `zip` [1..]
src/Data/Comp/Derive/Show.hs view
@@ -36,7 +36,7 @@ taking at least one argument. -} makeShowF :: Name -> Q [Dec] makeShowF fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let fArg = VarT . tyVarBndrName $ last args argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames@@ -44,18 +44,18 @@ classType = AppT (ConT ''ShowF) complType constrs' <- mapM normalConExp constrs showFDecl <- funD 'showF (showFClauses fArg constrs')- return [InstanceD preCond classType [showFDecl]]+ return [mkInstanceD preCond classType [showFDecl]] where showFClauses fArg = map (genShowFClause fArg) filterFarg fArg ty x = (fArg == ty, varE x) mkShow :: (Bool, ExpQ) -> ExpQ mkShow (isFArg, var) | isFArg = var | otherwise = [| show $var |]- genShowFClause fArg (constr, args) = do+ genShowFClause fArg (constr, args, gadtTy) = do let n = length args varNs <- newNames n "x" let pat = ConP constr $ map VarP varNs- allVars = zipWith (filterFarg fArg) args varNs+ allVars = zipWith (filterFarg (getUnaryFArg fArg gadtTy)) args varNs shows = listE $ map mkShow allVars conName = nameBase constr body <- [|showCon conName $shows|]@@ -72,7 +72,7 @@ taking at least one argument. -} makeShowConstr :: Name -> Q [Dec] makeShowConstr fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let fArg = VarT . tyVarBndrName $ last args argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames@@ -80,18 +80,18 @@ classType = AppT (ConT ''ShowConstr) complType constrs' <- mapM normalConExp constrs showConstrDecl <- funD 'showConstr (showConstrClauses fArg constrs')- return [InstanceD preCond classType [showConstrDecl]]+ return [mkInstanceD preCond classType [showConstrDecl]] where showConstrClauses fArg = map (genShowConstrClause fArg) filterFarg fArg ty x = (fArg == ty, varE x) mkShow :: (Bool, ExpQ) -> ExpQ mkShow (isFArg, var) | isFArg = [| "" |] | otherwise = [| show $var |]- genShowConstrClause fArg (constr, args) = do+ genShowConstrClause fArg (constr, args, gadtTy) = do let n = length args varNs <- newNames n "x" let pat = ConP constr $ map VarP varNs- allVars = zipWith (filterFarg fArg) args varNs+ allVars = zipWith (filterFarg (getUnaryFArg fArg gadtTy)) args varNs shows = listE $ map mkShow allVars conName = nameBase constr body <- [|showCon' conName $shows|]
src/Data/Comp/Derive/SmartAConstructors.hs view
@@ -30,7 +30,7 @@ inserted. -} smartAConstructors :: Name -> Q [Dec] smartAConstructors fname = do- TyConI (DataD _cxt _tname _targs constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt _tname _targs constrs _deriving) <- abstractNewtypeQ $ reify fname let cons = map abstractConType constrs liftM concat $ mapM genSmartConstr cons where genSmartConstr (name, args) = do
src/Data/Comp/Derive/SmartConstructors.hs view
@@ -28,7 +28,7 @@ ordinary constructors, but an 'inject' is automatically inserted. -} smartConstructors :: Name -> Q [Dec] smartConstructors fname = do- TyConI (DataD _cxt tname targs constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt tname targs constrs _deriving) <- abstractNewtypeQ $ reify fname let cons = map abstractConType constrs liftM concat $ mapM (genSmartConstr (map tyVarBndrName targs) tname) cons where genSmartConstr targs tname (name, args) = do
src/Data/Comp/Derive/Traversable.hs view
@@ -39,7 +39,7 @@ first-order kind taking at least one argument. -} makeTraversable :: Name -> Q [Dec] makeTraversable fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let fArg = VarT . tyVarBndrName $ last args argNames = map (VarT . tyVarBndrName) (init args) complType = foldl AppT (ConT name) argNames@@ -49,8 +49,8 @@ sequenceADecl <- funD 'sequenceA (map sequenceAClause constrs') mapMDecl <- funD 'mapM (map mapMClause constrs') sequenceDecl <- funD 'sequence (map sequenceClause constrs')- return [InstanceD [] classType [traverseDecl, sequenceADecl, mapMDecl,sequenceDecl]]- where isFarg fArg (constr, args) = (constr, map (`containsType'` fArg) args)+ return [mkInstanceD [] classType [traverseDecl, sequenceADecl, mapMDecl,sequenceDecl]]+ where isFarg fArg (constr, args, gadtTy) = (constr, map (`containsType'` (getUnaryFArg fArg gadtTy)) args) filterVar _ nonFarg [] x = nonFarg x filterVar farg _ [depth] x = farg depth x filterVar _ _ _ _ = error "functor variable occurring twice in argument type"
src/Data/Comp/Derive/Utils.hs view
@@ -26,50 +26,94 @@ reportError = report True #endif +#if __GLASGOW_HASKELL__ < 800+data DataInfo = DataInfo Cxt Name [TyVarBndr] [Con] [Name]+#else+data DataInfo = DataInfo Cxt Name [TyVarBndr] [Con] Cxt+#endif+ {-| This is the @Q@-lifted version of 'abstractNewtype. -}-abstractNewtypeQ :: Q Info -> Q Info+abstractNewtypeQ :: Q Info -> Q (Maybe DataInfo) abstractNewtypeQ = liftM abstractNewtype {-| This function abstracts away @newtype@ declaration, it turns them into @data@ declarations. -}-abstractNewtype :: Info -> Info+abstractNewtype :: Info -> Maybe DataInfo+#if __GLASGOW_HASKELL__ < 800 abstractNewtype (TyConI (NewtypeD cxt name args constr derive))- = TyConI (DataD cxt name args [constr] derive)-abstractNewtype owise = owise+ = Just (DataInfo cxt name args [constr] derive)+abstractNewtype (TyConI (DataD cxt name args constrs derive))+ = Just (DataInfo cxt name args constrs derive)+#else+abstractNewtype (TyConI (NewtypeD cxt name args _ constr derive))+ = Just (DataInfo cxt name args [constr] derive)+abstractNewtype (TyConI (DataD cxt name args _ constrs derive))+ = Just (DataInfo cxt name args constrs derive)+#endif+abstractNewtype _ = Nothing -{-|- This function provides the name and the arity of the given data constructor.+{-| This function provides the name and the arity of the given data+constructor, and if it is a GADT also its type. -}-normalCon :: Con -> (Name,[StrictType])-normalCon (NormalC constr args) = (constr, args)-normalCon (RecC constr args) = (constr, map (\(_,s,t) -> (s,t)) args)-normalCon (InfixC a constr b) = (constr, [a,b])+normalCon :: Con -> (Name,[StrictType], Maybe Type)+normalCon (NormalC constr args) = (constr, args, Nothing)+normalCon (RecC constr args) = (constr, map (\(_,s,t) -> (s,t)) args, Nothing)+normalCon (InfixC a constr b) = (constr, [a,b], Nothing) normalCon (ForallC _ _ constr) = normalCon constr+#if __GLASGOW_HASKELL__ >= 800+normalCon (GadtC (constr:constrs) args typ) = (constr,args,Just typ)+#endif +normalCon' :: Con -> (Name,[Type], Maybe Type)+normalCon' con = (n, map snd ts, t)+ where (n, ts, t) = normalCon con+ -normalCon' :: Con -> (Name,[Type])-normalCon' = fmap (map snd) . normalCon+-- -- | Same as normalCon' but expands type synonyms.+-- normalConExp :: Con -> Q (Name,[Type])+-- normalConExp c = do+-- let (n,ts,t) = normalCon' c+-- ts' <- mapM expandSyns ts+-- return (n, ts') -- | Same as normalCon' but expands type synonyms.-normalConExp :: Con -> Q (Name,[Type])+normalConExp :: Con -> Q (Name,[Type], Maybe Type) normalConExp c = do- let (n,ts) = normalCon' c+ let (n,ts,t) = normalCon' c ts' <- mapM expandSyns ts- return (n, ts')+ return (n, ts',t) -- | Same as normalConExp' but retains strictness annotations.-normalConStrExp :: Con -> Q (Name,[StrictType])+normalConStrExp :: Con -> Q (Name,[StrictType], Maybe Type) normalConStrExp c = do- let (n,ts) = normalCon c+ let (n,ts,t) = normalCon c ts' <- mapM (\ (st,ty) -> do ty' <- expandSyns ty; return (st,ty')) ts- return (n, ts')+ return (n, ts',t) +-- | Auxiliary function to extract the first argument of a binary type+-- application (the second argument of this function). If the second+-- argument is @Nothing@ or not of the right shape, the first argument+-- is returned as a default. +getBinaryFArg :: Type -> Maybe Type -> Type+getBinaryFArg _ (Just (AppT (AppT _ t) _)) = t+getBinaryFArg def _ = def++-- | Auxiliary function to extract the first argument of a type+-- application (the second argument of this function). If the second+-- argument is @Nothing@ or not of the right shape, the first argument+-- is returned as a default.+getUnaryFArg :: Type -> Maybe Type -> Type+getUnaryFArg _ (Just (AppT _ t)) = t+getUnaryFArg def _ = def+++ {-| This function provides the name and the arity of the given data constructor. -}@@ -78,6 +122,9 @@ abstractConType (RecC constr args) = (constr, length args) abstractConType (InfixC _ constr _) = (constr, 2) abstractConType (ForallC _ _ constr) = abstractConType constr+#if __GLASGOW_HASKELL__ >= 800+abstractConType (GadtC (constr:_) args typ) = (constr,length args) -- Only first Name+#endif {-| This function returns the name of a bound type variable@@ -151,7 +198,15 @@ isEqualP _ = Nothing #endif +mkInstanceD :: Cxt -> Type -> [Dec] -> Dec+#if __GLASGOW_HASKELL__ < 800+mkInstanceD cxt ty decs = InstanceD cxt ty decs+#else+mkInstanceD cxt ty decs = InstanceD Nothing cxt ty decs+#endif ++ -- | This function lifts type class instances over sums -- ofsignatures. To this end it assumes that it contains only methods -- with types of the form @f t1 .. tn -> t@ where @f@ is the signature@@ -186,7 +241,7 @@ let tp = ((ConT sumName `AppT` f) `AppT` g) let complType = foldl AppT (foldl AppT (ConT name) ts1 `AppT` tp) ts2 decs' <- sequence $ concatMap decl decs- return [InstanceD cxt complType decs']+ return [mkInstanceD cxt complType decs'] where decl :: Dec -> [DecQ] decl (SigD f _) = [funD f [clause f]] decl _ = []
src/Data/Comp/Multi/Derive/Equality.hs view
@@ -27,7 +27,7 @@ kind taking at least two arguments. -} makeEqHF :: Name -> Q [Dec] makeEqHF fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let args' = init args argNames = map (VarT . tyVarBndrName) (init args') ftyp = VarT . tyVarBndrName $ last args'@@ -36,13 +36,13 @@ classType = AppT (ConT ''EqHF) complType constrs' <- mapM normalConExp constrs eqFDecl <- funD 'eqHF (eqFClauses ftyp constrs constrs')- return [InstanceD preCond classType [eqFDecl]]+ return [mkInstanceD preCond classType [eqFDecl]] where eqFClauses ftyp constrs constrs' = map (genEqClause ftyp) constrs' ++ defEqClause constrs defEqClause constrs | length constrs < 2 = [] | otherwise = [clause [wildP,wildP] (normalB [|False|]) []]- genEqClause ftyp (constr, argts) = do+ genEqClause ftyp (constr, argts, gadtTy) = do let n = length argts varNs <- newNames n "x" varNs' <- newNames n "y"@@ -51,7 +51,7 @@ vars = map VarE varNs vars' = map VarE varNs' mkEq ty x y = let (x',y') = (return x,return y)- in if containsType ty ftyp+ in if containsType ty (getBinaryFArg ftyp gadtTy) then [| $x' `keq` $y'|] else [| $x' == $y'|] eqs = listE $ zipWith3 mkEq argts vars vars'
src/Data/Comp/Multi/Derive/HFoldable.hs view
@@ -46,7 +46,7 @@ kind taking at least two arguments. -} makeHFoldable :: Name -> Q [Dec] makeHFoldable fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let args' = init args fArg = VarT . tyVarBndrName $ last args' argNames = map (VarT . tyVarBndrName) (init args')@@ -57,8 +57,8 @@ foldMapDecl <- funD 'hfoldMap (map foldMapClause constrs') foldlDecl <- funD 'hfoldl (map foldlClause constrs') foldrDecl <- funD 'hfoldr (map foldrClause constrs')- return [InstanceD [] classType [foldDecl,foldMapDecl,foldlDecl,foldrDecl]]- where isFarg fArg (constr, args) = (constr, map (`containsType'` fArg) args)+ return [mkInstanceD [] classType [foldDecl,foldMapDecl,foldlDecl,foldrDecl]]+ where isFarg fArg (constr, args, gadtTy) = (constr, map (`containsType'` (getBinaryFArg fArg gadtTy)) args) filterVar [] _ = Nothing filterVar [d] x =Just (d, varE x) filterVar _ _ = error "functor variable occurring twice in argument type"
src/Data/Comp/Multi/Derive/HFunctor.hs view
@@ -33,7 +33,7 @@ kind taking at least two arguments. -} makeHFunctor :: Name -> Q [Dec] makeHFunctor fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let args' = init args fArg = VarT . tyVarBndrName $ last args' argNames = map (VarT . tyVarBndrName) (init args')@@ -41,8 +41,8 @@ classType = AppT (ConT ''HFunctor) complType constrs' <- P.mapM (mkPatAndVars . isFarg fArg <=< normalConExp) constrs hfmapDecl <- funD 'hfmap (map hfmapClause constrs')- return [InstanceD [] classType [hfmapDecl]]- where isFarg fArg (constr, args) = (constr, map (`containsType'` fArg) args)+ return [mkInstanceD [] classType [hfmapDecl]]+ where isFarg fArg (constr, args, ty) = (constr, map (`containsType'` getBinaryFArg fArg ty) args) filterVar _ nonFarg [] x = nonFarg x filterVar farg _ [depth] x = farg depth x filterVar _ _ _ _ = error "functor variable occurring twice in argument type"
src/Data/Comp/Multi/Derive/HTraversable.hs view
@@ -37,7 +37,7 @@ higher-order kind taking at least two arguments. -} makeHTraversable :: Name -> Q [Dec] makeHTraversable fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let args' = init args fArg = VarT . tyVarBndrName $ last args' argNames = map (VarT . tyVarBndrName) (init args')@@ -46,8 +46,8 @@ constrs' <- P.mapM (mkPatAndVars . isFarg fArg <=< normalConExp) constrs traverseDecl <- funD 'htraverse (map traverseClause constrs') mapMDecl <- funD 'hmapM (map mapMClause constrs')- return [InstanceD [] classType [traverseDecl, mapMDecl]]- where isFarg fArg (constr, args) = (constr, map (`containsType'` fArg) args)+ return [mkInstanceD [] classType [traverseDecl, mapMDecl]]+ where isFarg fArg (constr, args, gadtTy) = (constr, map (`containsType'` (getBinaryFArg fArg gadtTy)) args) filterVar _ nonFarg [] x = nonFarg x filterVar farg _ [depth] x = farg depth x filterVar _ _ _ _ = error "functor variable occurring twice in argument type"
src/Data/Comp/Multi/Derive/Ordering.hs view
@@ -32,17 +32,17 @@ kind taking at least three arguments. -} makeOrdHF :: Name -> Q [Dec] makeOrdHF fname = do- TyConI (DataD _ name args constrs _) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _ name args constrs _) <- abstractNewtypeQ $ reify fname let args' = init args -- covariant argument- let coArg :: Name = tyVarBndrName $ last args'+ let coArg :: Type = VarT $ tyVarBndrName $ last args' let argNames = map (VarT . tyVarBndrName) (init args') let complType = foldl AppT (ConT name) argNames let classType = AppT (ConT ''OrdHF) complType- constrs' :: [(Name,[Type])] <- mapM normalConExp constrs+ constrs' :: [(Name,[Type],Maybe Type)] <- mapM normalConExp constrs compareHFDecl <- funD 'compareHF (compareHFClauses coArg constrs')- return [InstanceD [] classType [compareHFDecl]]- where compareHFClauses :: Name -> [(Name,[Type])] -> [ClauseQ]+ return [mkInstanceD [] classType [compareHFDecl]]+ where compareHFClauses :: Type -> [(Name,[Type],Maybe Type)] -> [ClauseQ] compareHFClauses _ [] = [] compareHFClauses coArg constrs = let constrs' = constrs `zip` [1..]@@ -52,24 +52,24 @@ | n == m = genEqClause coArg c | n < m = genLtClause c d | otherwise = genGtClause c d- genEqClause :: Name -> (Name,[Type]) -> ClauseQ- genEqClause coArg (constr, args) = do+ genEqClause :: Type -> (Name,[Type],Maybe Type) -> ClauseQ+ genEqClause coArg (constr, args,gadtTy) = do varXs <- newNames (length args) "x" varYs <- newNames (length args) "y" let patX = ConP constr $ map VarP varXs let patY = ConP constr $ map VarP varYs- body <- eqDBody coArg (zip3 varXs varYs args)+ body <- eqDBody (getBinaryFArg coArg gadtTy) (zip3 varXs varYs args) return $ Clause [patX, patY] (NormalB body) []- eqDBody :: Name -> [(Name, Name, Type)] -> ExpQ+ eqDBody :: Type -> [(Name, Name, Type)] -> ExpQ eqDBody coArg x = [|compList $(listE $ map (eqDB coArg) x)|]- eqDB :: Name -> (Name, Name, Type) -> ExpQ+ eqDB :: Type -> (Name, Name, Type) -> ExpQ eqDB coArg (x, y, tp)- | not (containsType tp (VarT coArg)) =+ | not (containsType tp coArg) = [| compare $(varE x) $(varE y) |] | otherwise = [| kcompare $(varE x) $(varE y) |]- genLtClause (c, _) (d, _) =+ genLtClause (c, _, _) (d, _, _) = clause [recP c [], recP d []] (normalB [| LT |]) []- genGtClause (c, _) (d, _) =+ genGtClause (c, _, _) (d, _, _) = clause [recP c [], recP d []] (normalB [| GT |]) []
src/Data/Comp/Multi/Derive/Show.hs view
@@ -44,7 +44,7 @@ kind taking at least two arguments. -} makeShowHF :: Name -> Q [Dec] makeShowHF fname = do- TyConI (DataD _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt name args constrs _deriving) <- abstractNewtypeQ $ reify fname let args' = init args fArg = VarT . tyVarBndrName $ last args' argNames = map (VarT . tyVarBndrName) (init args')@@ -53,17 +53,17 @@ classType = AppT (ConT ''ShowHF) complType constrs' <- mapM normalConExp constrs showFDecl <- funD 'showHF (showFClauses fArg constrs')- return [InstanceD preCond classType [showFDecl]]+ return [mkInstanceD preCond classType [showFDecl]] where showFClauses fArg = map (genShowFClause fArg) filterFarg fArg ty x = (containsType ty fArg, varE x) mkShow (isFArg, var) | isFArg = [|unK $var|] | otherwise = [| show $var |]- genShowFClause fArg (constr, args) = do+ genShowFClause fArg (constr, args, ty) = do let n = length args varNs <- newNames n "x" let pat = ConP constr $ map VarP varNs- allVars = zipWith (filterFarg fArg) args varNs+ allVars = zipWith (filterFarg (getBinaryFArg fArg ty)) args varNs shows = listE $ map mkShow allVars conName = nameBase constr body <- [|K $ showConstr conName $shows|]
src/Data/Comp/Multi/Derive/SmartAConstructors.hs view
@@ -30,7 +30,7 @@ inserted. -} smartAConstructors :: Name -> Q [Dec] smartAConstructors fname = do- TyConI (DataD _cxt _tname _targs constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt _tname _targs constrs _deriving) <- abstractNewtypeQ $ reify fname let cons = map abstractConType constrs liftM concat $ mapM genSmartConstr cons where genSmartConstr (name, args) = do
src/Data/Comp/Multi/Derive/SmartConstructors.hs view
@@ -29,7 +29,7 @@ ordinary constructors, but an 'inject' is automatically inserted. -} smartConstructors :: Name -> Q [Dec] smartConstructors fname = do- TyConI (DataD _cxt tname targs constrs _deriving) <- abstractNewtypeQ $ reify fname+ Just (DataInfo _cxt tname targs constrs _deriving) <- abstractNewtypeQ $ reify fname let iVar = tyVarBndrName $ last targs let cons = map (abstractConType &&& iTp iVar) constrs liftM concat $ mapM (genSmartConstr (map tyVarBndrName targs) tname) cons
src/Data/Comp/Multi/Generic.hs view
@@ -38,14 +38,14 @@ -- term. This function is similar to Uniplate's @universe@ function. subterms :: forall f . HFoldable f => Term f :=> [E (Term f)] subterms t = build (f t)- where f :: Term f :=> (E (Term f) -> b -> b) -> b -> b+ where f :: forall i b. Term f i -> (E (Term f) -> b -> b) -> b -> b f t cons nil = E t `cons` hfoldl (\u s -> f s cons u) nil (unTerm t) -- | This function returns a list of all subterms of the given term -- that are constructed from a particular functor. subterms' :: forall f g . (HFoldable f, g :<: f) => Term f :=> [E (g (Term f))] subterms' (Term t) = build (f t)- where f :: f (Term f) :=> (E (g (Term f)) -> b -> b) -> b -> b+ where f :: forall i b. f (Term f) i -> (E (g (Term f)) -> b -> b) -> b -> b f t cons nil = let rest = hfoldl (\u (Term s) -> f s cons u) nil t in case proj t of Just t' -> E t' `cons` rest
src/Data/Comp/Multi/HFoldable.hs view
@@ -41,7 +41,7 @@ hfoldMap :: Monoid m => (a :=> m) -> h a :=> m hfoldMap f = hfoldr (mappend . f) mempty - hfoldr :: (a :=> b -> b) -> b -> h a :=> b+ hfoldr :: (a :=> (b->b) ) -> b -> h a :=> b hfoldr f z t = appEndo (hfoldMap (Endo . f) t) z hfoldl :: (b -> a :=> b) -> b -> h a :=> b@@ -51,7 +51,7 @@ hfoldr1 :: forall a. (a -> a -> a) -> h (K a) :=> a hfoldr1 f xs = fromMaybe (error "hfoldr1: empty structure") (hfoldr mf Nothing xs)- where mf :: K a :=> Maybe a -> Maybe a+ where mf :: K a :=> (Maybe a -> Maybe a) mf (K x) Nothing = Just x mf (K x) (Just y) = Just (f x y)
src/Data/Comp/Multi/Term.hs view
@@ -83,9 +83,9 @@ instance (HFoldable f) => HFoldable (Cxt h f) where hfoldr = hfoldr' where- hfoldr' :: forall a b. (a :=> b -> b) -> b -> Cxt h f a :=> b+ hfoldr' :: forall a b. (a :=> (b -> b)) -> b -> Cxt h f a :=> b hfoldr' op c a = run a c where- run :: (Cxt h f) a :=> b -> b+ run :: (Cxt h f) a :=> (b -> b) run (Hole a) e = a `op` e run (Term t) e = hfoldr run e t