packages feed

compdata 0.11 → 0.12

raw patch · 37 files changed

+145/−142 lines, 37 filesdep −derivedep ~QuickCheckPVP ok

version bump matches the API change (PVP)

Dependencies removed: derive

Dependency ranges changed: QuickCheck

API changes (from Hackage documentation)

- 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 Test.QuickCheck.Arbitrary.Arbitrary b0 => Data.Comp.Derive.Arbitrary.ArbitraryF ((,) b0)
- Data.Comp.Decompose: class (HasVars f v, Functor f, Foldable f) => Decompose f v where decomp t = case isVar t of { Just v -> Var v Nothing -> Fun sym args where sym = fmap (const ()) t args = arguments t }
- 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 Control.DeepSeq.NFData a0 => Data.Comp.Derive.DeepSeq.NFDataF ((,) a0)
- Data.Comp.Derive: makeArbitrary :: Name -> Q [Dec]
- Data.Comp.Derive: makeNFData :: Name -> Q [Dec]
- 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 GHC.Classes.Eq a0 => Data.Comp.Derive.Equality.EqF ((,) a0)
- Data.Comp.Multi.HFunctor: type (:=>) f a = forall i. f i -> a
- Data.Comp.Multi.Ops: type (:=:) f g = (f :<: g, g :<: f)
- Data.Comp.Multi.Projection: type (:<) f g = Proj (ComprEmb (Elem f g)) f g
- Data.Comp.Multi.Sum: type (:<:) f g = Subsume (ComprEmb (Elem f g)) f g
- 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.Ops: type (:=:) f g = (f :<: g, g :<: f)
- 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 GHC.Classes.Ord a0 => Data.Comp.Derive.Ordering.OrdF ((,) a0)
- Data.Comp.Projection: type (:<) f g = Proj (ComprEmb (Elem f g)) f g
- Data.Comp.Show: instance GHC.Show.Show a0 => Data.Comp.Derive.Show.ShowF ((,) a0)
- Data.Comp.Sum: type (:=:) f g = (f :<: g, g :<: f)
- 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.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,) b c)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,) b c d)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d, Test.QuickCheck.Arbitrary.Arbitrary e) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,) b c d e)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d, Test.QuickCheck.Arbitrary.Arbitrary e, Test.QuickCheck.Arbitrary.Arbitrary f) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,) b c d e f)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d, Test.QuickCheck.Arbitrary.Arbitrary e, Test.QuickCheck.Arbitrary.Arbitrary f, Test.QuickCheck.Arbitrary.Arbitrary g) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,) b c d e f g)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d, Test.QuickCheck.Arbitrary.Arbitrary e, Test.QuickCheck.Arbitrary.Arbitrary f, Test.QuickCheck.Arbitrary.Arbitrary g, Test.QuickCheck.Arbitrary.Arbitrary h) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,,) b c d e f g h)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d, Test.QuickCheck.Arbitrary.Arbitrary e, Test.QuickCheck.Arbitrary.Arbitrary f, Test.QuickCheck.Arbitrary.Arbitrary g, Test.QuickCheck.Arbitrary.Arbitrary h, Test.QuickCheck.Arbitrary.Arbitrary i) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,,,) b c d e f g h i)
+ Data.Comp.Arbitrary: instance (Test.QuickCheck.Arbitrary.Arbitrary b, Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary d, Test.QuickCheck.Arbitrary.Arbitrary e, Test.QuickCheck.Arbitrary.Arbitrary f, Test.QuickCheck.Arbitrary.Arbitrary g, Test.QuickCheck.Arbitrary.Arbitrary h, Test.QuickCheck.Arbitrary.Arbitrary i, Test.QuickCheck.Arbitrary.Arbitrary j) => Data.Comp.Derive.Arbitrary.ArbitraryF ((,,,,,,,,,) b c d e f g h i j)
+ Data.Comp.Arbitrary: instance Test.QuickCheck.Arbitrary.Arbitrary b => Data.Comp.Derive.Arbitrary.ArbitraryF ((,) b)
+ Data.Comp.Decompose: type Decompose f v = (HasVars f v, Functor f, Foldable f)
+ Data.Comp.DeepSeq: instance Control.DeepSeq.NFData a => Data.Comp.Derive.DeepSeq.NFDataF ((,) a)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => Data.Comp.Derive.Equality.EqF ((,,) a b)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c) => Data.Comp.Derive.Equality.EqF ((,,,) a b c)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d) => Data.Comp.Derive.Equality.EqF ((,,,,) a b c d)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e) => Data.Comp.Derive.Equality.EqF ((,,,,,) a b c d e)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f) => Data.Comp.Derive.Equality.EqF ((,,,,,,) a b c d e f)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g) => Data.Comp.Derive.Equality.EqF ((,,,,,,,) a b c d e f g)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g, GHC.Classes.Eq h) => Data.Comp.Derive.Equality.EqF ((,,,,,,,,) a b c d e f g h)
+ Data.Comp.Equality: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g, GHC.Classes.Eq h, GHC.Classes.Eq i) => Data.Comp.Derive.Equality.EqF ((,,,,,,,,,) a b c d e f g h i)
+ Data.Comp.Equality: instance GHC.Classes.Eq a => Data.Comp.Derive.Equality.EqF ((,) a)
+ Data.Comp.Multi.HFunctor: type f :=> a = forall i. f i -> a
+ Data.Comp.Multi.Ops: type f :<: g = (Subsume (ComprEmb (Elem f g)) f g)
+ Data.Comp.Multi.Projection: type f :< g = (Proj (ComprEmb (Elem f g)) f g)
+ Data.Comp.Multi.Sum: type f :<: g = (Subsume (ComprEmb (Elem f g)) f g)
+ Data.Comp.Multi.Variables: infix 1 |->
+ Data.Comp.Multi.Variables: infixr 0 &
+ Data.Comp.Multi.Variables: instance (Data.Comp.Multi.Variables.HasVars f v, Data.Comp.Multi.Variables.HasVars g v) => Data.Comp.Multi.Variables.HasVars (f Data.Comp.Multi.Ops.:+: g) v
+ Data.Comp.Ops: type f :=: g = (f :<: g, g :<: f)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => Data.Comp.Derive.Ordering.OrdF ((,,) a b)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c) => Data.Comp.Derive.Ordering.OrdF ((,,,) a b c)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d) => Data.Comp.Derive.Ordering.OrdF ((,,,,) a b c d)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e) => Data.Comp.Derive.Ordering.OrdF ((,,,,,) a b c d e)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,) a b c d e f)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,,) a b c d e f g)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g, GHC.Classes.Ord h) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,,,) a b c d e f g h)
+ Data.Comp.Ordering: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g, GHC.Classes.Ord h, GHC.Classes.Ord i) => Data.Comp.Derive.Ordering.OrdF ((,,,,,,,,,) a b c d e f g h i)
+ Data.Comp.Ordering: instance GHC.Classes.Ord a => Data.Comp.Derive.Ordering.OrdF ((,) a)
+ Data.Comp.Projection: type f :< g = (Proj (ComprEmb (Elem f g)) f g)
+ Data.Comp.Show: instance GHC.Show.Show a => Data.Comp.Derive.Show.ShowF ((,) a)
+ Data.Comp.Sum: type f :=: g = (f :<: g, g :<: f)
+ Data.Comp.Variables: infix 1 |->
+ Data.Comp.Variables: infixr 0 &
+ Data.Comp.Variables: instance (Data.Comp.Variables.HasVars f v, Data.Comp.Variables.HasVars g v) => Data.Comp.Variables.HasVars (f Data.Comp.Ops.:+: g) v
- Data.Comp.Annotation: data (:*:) f g a
+ Data.Comp.Annotation: data ( f (:*:) g ) a
- Data.Comp.Arbitrary: class ArbitraryF f where arbitraryF' = [(1, arbitraryF)] arbitraryF = frequency arbitraryF' shrinkF _ = []
+ Data.Comp.Arbitrary: class ArbitraryF f
- 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.Derive: class ArbitraryF f where arbitraryF' = [(1, arbitraryF)] arbitraryF = frequency arbitraryF' shrinkF _ = []
+ Data.Comp.Derive: class ArbitraryF f
- Data.Comp.Derive: haskellStrict :: (Monad m, HaskellStrict f, f :<: (m :+: g)) => f (TermT m g) -> TermT m g
+ Data.Comp.Derive: haskellStrict :: (Monad m, HaskellStrict f, f :<: m :+: g) => f (TermT m g) -> TermT m g
- Data.Comp.Derive: haskellStrict' :: (Monad m, HaskellStrict f, f :<: (m :+: g)) => f (TermT m g) -> TermT m g
+ Data.Comp.Derive: haskellStrict' :: (Monad m, HaskellStrict f, f :<: m :+: g) => f (TermT m g) -> TermT m g
- Data.Comp.Derive.Utils: DataInfo :: Cxt -> Name -> [TyVarBndr] -> [Con] -> Cxt -> DataInfo
+ Data.Comp.Derive.Utils: DataInfo :: Cxt -> Name -> [TyVarBndr] -> [Con] -> [DerivClause] -> DataInfo
- Data.Comp.Desugar: class (Functor f, Functor g) => Desugar f g where desugHom = desugHom' . fmap Hole desugHom' x = appCxt (desugHom x)
+ Data.Comp.Desugar: class (Functor f, Functor g) => Desugar f g
- Data.Comp.Multi.Annotation: data (:&:) f a (g :: * -> *) e
+ Data.Comp.Multi.Annotation: data ( f (:&:) a ) (g :: * -> *) e
- Data.Comp.Multi.Derive: class HFunctor h => HFoldable h where hfold = hfoldMap unK hfoldMap f = hfoldr (mappend . f) mempty hfoldr f z t = appEndo (hfoldMap (Endo . f) t) z hfoldl f z t = appEndo (getDual (hfoldMap (Dual . Endo . flip f) t)) z hfoldr1 f xs = fromMaybe (error "hfoldr1: empty structure") (hfoldr mf Nothing xs) where mf :: K a :=> (Maybe a -> Maybe a) mf (K x) Nothing = Just x mf (K x) (Just y) = Just (f x y) hfoldl1 f xs = fromMaybe (error "hfoldl1: empty structure") (hfoldl mf Nothing xs) where mf :: Maybe a -> K a :=> Maybe a mf Nothing (K y) = Just y mf (Just x) (K y) = Just (f x y)
+ Data.Comp.Multi.Derive: class HFunctor h => HFoldable h
- Data.Comp.Multi.Derive: class ShowHF f where showHF = K . showHF' showHF' = unK . showHF
+ Data.Comp.Multi.Derive: class ShowHF f
- Data.Comp.Multi.Desugar: class (HFunctor f, HFunctor g) => Desugar f g where desugHom = desugHom' . hfmap Hole desugHom' x = appCxt (desugHom x)
+ Data.Comp.Multi.Desugar: class (HFunctor f, HFunctor g) => Desugar f g
- Data.Comp.Multi.HFoldable: class HFunctor h => HFoldable h where hfold = hfoldMap unK hfoldMap f = hfoldr (mappend . f) mempty hfoldr f z t = appEndo (hfoldMap (Endo . f) t) z hfoldl f z t = appEndo (getDual (hfoldMap (Dual . Endo . flip f) t)) z hfoldr1 f xs = fromMaybe (error "hfoldr1: empty structure") (hfoldr mf Nothing xs) where mf :: K a :=> (Maybe a -> Maybe a) mf (K x) Nothing = Just x mf (K x) (Just y) = Just (f x y) hfoldl1 f xs = fromMaybe (error "hfoldl1: empty structure") (hfoldl mf Nothing xs) where mf :: Maybe a -> K a :=> Maybe a mf Nothing (K y) = Just y mf (Just x) (K y) = Just (f x y)
+ Data.Comp.Multi.HFoldable: class HFunctor h => HFoldable h
- Data.Comp.Multi.HFunctor: A :: (forall i. f i) -> A f
+ Data.Comp.Multi.HFunctor: A :: forall i. f i -> A f
- Data.Comp.Multi.HTraversable: hmapM :: (HTraversable t, Monad m) => NatM m a b -> NatM m (t a) (t b)
+ Data.Comp.Multi.HTraversable: hmapM :: (HTraversable t, (Monad m)) => NatM m a b -> NatM m (t a) (t b)
- Data.Comp.Multi.HTraversable: htraverse :: (HTraversable t, Applicative f) => NatM f a b -> NatM f (t a) (t b)
+ Data.Comp.Multi.HTraversable: htraverse :: (HTraversable t, (Applicative f)) => NatM f a b -> NatM f (t a) (t b)
- Data.Comp.Multi.Ops: data (:*:) f g a
+ Data.Comp.Multi.Ops: data ( f (:*:) g ) 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: data (:*:) f g a
+ Data.Comp.Multi.Projection: data ( f (:*:) g ) a
- Data.Comp.Multi.Show: class ShowHF f where showHF = K . showHF' showHF' = unK . showHF
+ Data.Comp.Multi.Show: class ShowHF f
- Data.Comp.Multi.Sum: data (:+:) f g (h :: * -> *) e
+ Data.Comp.Multi.Sum: data ( f (:+:) g ) (h :: * -> *) e
- 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.Variables: class HasVars (f :: (* -> *) -> * -> *) v where isVar _ = Nothing bindsVars _ = empty
+ Data.Comp.Multi.Variables: class HasVars (f :: (* -> *) -> * -> *) v
- Data.Comp.Ops: data (:&:) f a e
+ Data.Comp.Ops: data ( f (:&:) a ) e
- 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.Render: class (Functor f, Foldable f, ShowConstr f) => Render f where stringTreeAlg f = Node (showConstr f) $ toList f
+ Data.Comp.Render: class (Functor f, Foldable f, ShowConstr f) => Render f
- Data.Comp.Sum: data (:+:) f g e
+ Data.Comp.Sum: data ( f (:+:) g ) e
- 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.Variables: class HasVars f v where isVar _ = Nothing bindsVars _ = empty
+ Data.Comp.Variables: class HasVars f v

Files

benchmark/Benchmark.hs view
@@ -12,8 +12,8 @@ import Test.QuickCheck.Arbitrary import Test.QuickCheck.Gen import Test.QuickCheck.Random-import System.Random + aExpr :: SugarExpr aExpr = iIf ((iVInt 1 `iGt` (iVInt 2 `iMinus` iVInt 1))             `iOr` ((iVInt 1 `iGt` (iVInt 2 `iMinus` iVInt 1))))@@ -42,8 +42,8 @@     where depth = 15  standardBenchmarks :: (PExpr, SugarExpr, String) -> Benchmark-standardBenchmarks  (sExpr,aExpr,n) = rnf aExpr `seq` rnf sExpr `seq` getBench (sExpr, aExpr,n)-    where getBench (sExpr, aExpr,n) = bgroup n paperBenchmarks+standardBenchmarks  (sExpr,aExpr,n) = rnf aExpr `seq` rnf sExpr `seq` getBench n+    where getBench n = bgroup n paperBenchmarks           -- these are the benchmarks for evaluation           evalBenchmarks = [                  bench "evalDesug" (nf A.desugEval2 aExpr),
benchmark/DataTypes.hs view
@@ -1,14 +1,11 @@-{-# LANGUAGE TypeSynonymInstances, CPP #-}+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}  module DataTypes where +import Control.Monad.Fail++ type Err = Either String -#if __GLASGOW_HASKELL__ < 700-instance Monad Err where-    return = Right-    e >>= f = case e of -                Left m -> Left m-                Right x -> f x+instance MonadFail Err where     fail  = Left-#endif
benchmark/DataTypes/Comp.hs view
@@ -8,7 +8,8 @@   ScopedTypeVariables,   TypeSynonymInstances,   DeriveFunctor,-  ConstraintKinds #-}+  ConstraintKinds,+  DeriveGeneric, DeriveAnyClass #-}  module DataTypes.Comp      ( module DataTypes.Comp,@@ -28,6 +29,8 @@ import Control.Monad hiding (sequence_,mapM) import Prelude hiding (sequence_,mapM) +import GHC.Generics (Generic)+ -- base values  type ValueSig = Value@@ -39,6 +42,8 @@ type BaseTypeSig = ValueT type BaseType = Term BaseTypeSig ++ data ValueT e = TInt               | TBool               | TPair e e@@ -50,7 +55,7 @@                deriving (Eq, Functor)  data Proj = ProjLeft | ProjRight-            deriving (Eq)+            deriving (Eq, Generic, NFData)  data Op e = Plus e e           | Mult e e@@ -69,7 +74,9 @@              | Impl e e                deriving (Eq, Functor) -$(derive [makeNFData, makeArbitrary] [''Proj])++instance Arbitrary Proj where+  arbitrary = elements [ProjLeft,ProjRight]  $(derive   [makeFoldable, makeTraversable,
benchmark/DataTypes/Standard.hs view
@@ -1,12 +1,13 @@-{-# LANGUAGE TypeSynonymInstances, TemplateHaskell, DeriveDataTypeable #-}+{-# LANGUAGE TypeSynonymInstances, TemplateHaskell, DeriveDataTypeable,+DeriveGeneric, DeriveAnyClass #-} module DataTypes.Standard      ( module DataTypes.Standard,       module DataTypes      ) where +import GHC.Generics (Generic)+ import DataTypes-import Data.Derive.NFData-import Data.DeriveTH import Data.Data import Control.DeepSeq @@ -15,15 +16,15 @@ data VType = VTInt            | VTBool            | VTPair VType VType-             deriving (Eq,Typeable,Data)+             deriving (Eq,Typeable,Data, Generic, NFData)  data SExpr = SInt Int            | SBool Bool            | SPair SExpr SExpr-             deriving (Eq,Typeable,Data)+             deriving (Eq,Typeable,Data, Generic, NFData)  data SProj = SProjLeft | SProjRight-             deriving (Eq,Typeable,Data)+             deriving (Eq,Typeable,Data, Generic, NFData)  data OExpr = OInt Int            | OBool Bool@@ -36,7 +37,7 @@            | OAnd OExpr OExpr            | ONot OExpr            | OProj SProj OExpr-             deriving (Eq,Typeable,Data)+             deriving (Eq,Typeable,Data, Generic, NFData)  data PExpr = PInt Int            | PBool Bool@@ -54,13 +55,13 @@            | PGt PExpr PExpr            | POr PExpr PExpr            | PImpl PExpr PExpr-             deriving (Eq,Typeable,Data)+             deriving (Eq,Typeable,Data, Generic, NFData)  data VHType = VHTInt             | VHTBool             | VHTPair VType VType             | VHTFun VType VType-              deriving (Eq,Typeable,Data)+              deriving (Eq,Typeable,Data, Generic, NFData)  showBinOp :: String -> String -> String -> String showBinOp op x y = "("++ x ++ op ++ y ++ ")"@@ -88,5 +89,3 @@     show VTInt = "Int"     show VTBool = "Bool"     show (VTPair x y) = "(" ++ show x ++ "," ++ show y ++ ")"--$(derives [makeNFData] [''SProj,''SExpr,''OExpr,''PExpr,''VType])
benchmark/Functions/Comp/Eval.hs view
@@ -16,8 +16,12 @@ import Data.Comp import Data.Comp.Thunk hiding (eval, eval2) import Data.Comp.Derive-import Control.Monad +import Control.Monad.Fail+import Prelude hiding (fail)+import Control.Monad hiding (fail)++ -- evaluation with thunks  class (Monad m, Traversable v) => EvalT e v m where@@ -31,7 +35,7 @@ instance (Monad m, Traversable v, Value :<: m :+: v) => EvalT Value v m where     evalTAlg = inject -instance (Value :<: (m :+: v), Value :<: v, Traversable v, EqF v, Monad m) => EvalT Op v m where+instance (Value :<: (m :+: v), Value :<: v, Traversable v, EqF v, MonadFail m) => EvalT Op v m where     evalTAlg (Plus x y) = thunk $ do                            VInt i <- whnfPr x                            VInt j <- whnfPr y@@ -64,7 +68,7 @@                               ProjLeft -> x                               ProjRight -> y -instance (Value :<: (m :+: v), Value :<: v, Traversable v, Monad m) => EvalT Sugar v m where+instance (Value :<: (m :+: v), Value :<: v, Traversable v, MonadFail m) => EvalT Sugar v m where     evalTAlg (Neg x) = thunk $ do                          VInt i <- whnfPr x                          return $ iVInt (-i)@@ -101,22 +105,22 @@ instance (Value :<: v, Monad m) => Eval Value v m where     evalAlg = return . inject -coerceInt :: (Value :<: v, Monad m) => Term v -> m Int+coerceInt :: (Value :<: v, MonadFail m) => Term v -> m Int coerceInt t = case project t of                 Just (VInt i) -> return i                 _ -> fail "" -coerceBool :: (Value :<: v, Monad m) => Term v -> m Bool+coerceBool :: (Value :<: v, MonadFail m) => Term v -> m Bool coerceBool t = case project t of                 Just (VBool b) -> return b                 _ -> fail "" -coercePair :: (Value :<: v, Monad m) => Term v -> m (Term v, Term v)+coercePair :: (Value :<: v, MonadFail m) => Term v -> m (Term v, Term v) coercePair t = case project t of                 Just (VPair x y) -> return (x,y)                 _ -> fail "" -instance (Value :<: v, EqF v, Monad m) => Eval Op v m where+instance (Value :<: v, EqF v, MonadFail m) => Eval Op v m where     evalAlg (Plus x y) = liftM2 (\ i j -> iVInt (i + j)) (coerceInt x) (coerceInt y)     evalAlg (Mult x y) = liftM2 (\ i j -> iVInt (i * j)) (coerceInt x) (coerceInt y)     evalAlg (If b x y) = liftM select (coerceBool b)@@ -130,7 +134,7 @@                                ProjLeft -> x                                ProjRight -> y -instance (Value :<: v, Monad m) => Eval Sugar v m where+instance (Value :<: v, MonadFail m) => Eval Sugar v m where     evalAlg (Neg x) = liftM (iVInt . negate) (coerceInt x)     evalAlg (Minus x y) = liftM2 (\ i j -> iVInt (i - j)) (coerceInt x) (coerceInt y)     evalAlg (Gt x y) = liftM2 (\ i j -> iVBool (i > j)) (coerceInt x) (coerceInt y)@@ -140,18 +144,18 @@  -- direct evaluation -class Monad m => EvalDir e m where+class MonadFail m => EvalDir e m where     evalDir :: (Traversable f, EvalDir f m) => e (Term f) -> m ValueExpr  evalDirect :: (Traversable e, EvalDir e m) => Term e -> m ValueExpr-evalDirect = evalDir . unTerm+evalDirect (Term x) = evalDir x  evalDirectE :: SugarExpr -> Err ValueExpr evalDirectE = evalDirect  $(derive [liftSum] [''EvalDir]) -instance (Monad m) => EvalDir Value m where+instance (MonadFail m) => EvalDir Value m where     evalDir (VInt i) = return $ iVInt i     evalDir (VBool i) = return $ iVBool i     evalDir (VPair x y) = liftM2 iVPair (evalDirect x) (evalDirect y)@@ -178,7 +182,7 @@     Just (VPair x y) -> return (x,y)     _ -> fail "" -instance (Monad m) => EvalDir Op m where+instance (MonadFail m) => EvalDir Op m where     evalDir (Plus x y) = liftM2 (\ i j -> iVInt (i + j)) (evalInt x) (evalInt y)     evalDir (Mult x y) = liftM2 (\ i j -> iVInt (i * j)) (evalInt x) (evalInt y)     evalDir (If b x y) = do @@ -193,7 +197,7 @@                                ProjLeft -> x                                ProjRight -> y -instance (Monad m) => EvalDir Sugar m where+instance (MonadFail m) => EvalDir Sugar m where     evalDir (Neg x) = liftM (iVInt . negate) (evalInt x)     evalDir (Minus x y) = liftM2 (\ i j -> iVInt (i - j)) (evalInt x) (evalInt y)     evalDir (Gt x y) = liftM2 (\ i j -> iVBool (i > j)) (evalInt x) (evalInt y)@@ -258,7 +262,7 @@     evalDir2 :: (EvalDir2 f) => e (Term f) -> ValueExpr  evalDirect2 :: (EvalDir2 e) => Term e -> ValueExpr-evalDirect2 = evalDir2 . unTerm+evalDirect2 (Term x) = evalDir2 x  evalDirectE2 :: SugarExpr -> ValueExpr evalDirectE2 = evalDirect2
benchmark/Functions/Standard/FreeVars.hs view
@@ -1,7 +1,7 @@ module Functions.Standard.FreeVars where  import DataTypes.Standard-import Data.Generics.PlateDirect+import Data.Generics.Uniplate.Direct  instance Uniplate PExpr where     uniplate (PInt x) = plate PInt |- x
benchmark/Functions/Standard/Inference.hs view
@@ -1,17 +1,20 @@ module Functions.Standard.Inference where ++import Control.Monad.Fail import DataTypes.Standard-import Control.Monad+import Prelude hiding (fail)+import Control.Monad hiding (fail) import Functions.Standard.Desugar -checkOp :: (Monad m) => [VType] -> VType -> [OExpr] -> m VType+checkOp :: (MonadFail m) => [VType] -> VType -> [OExpr] -> m VType checkOp tys rety args = do    argsty <- mapM inferType args   if tys == argsty      then return rety      else fail "" -inferType :: (Monad m) => OExpr -> m VType+inferType :: (MonadFail m) => OExpr -> m VType inferType (OInt _) = return VTInt inferType (OBool _) = return VTBool inferType (OPair x y) = liftM2 VTPair (inferType x) (inferType y)
compdata.cabal view
@@ -1,5 +1,5 @@ Name:			compdata-Version:		0.11+Version:		0.12 Synopsis:            	Compositional Data Types Description: @@ -96,7 +96,7 @@ License:                BSD3 License-file:           LICENSE Author:                 Patrick Bahr, Tom Hvitved-Maintainer:             paba@diku.dk+Maintainer:             paba@itu.dk Build-Type:             Simple Cabal-Version:          >=1.9.2 bug-reports:            https://github.com/pa-ba/compdata/issues@@ -187,8 +187,12 @@                         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.9, derive,-                        deepseq, th-expand-syns, transformers, tree-view >= 0.5++++  Build-Depends:	base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1,+                        QuickCheck >= 2, deepseq, transformers, th-expand-syns,+                        tree-view >= 0.5   Extensions:           FlexibleContexts   hs-source-dirs:	src   ghc-options:          -W@@ -198,10 +202,12 @@   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.9, -                        HUnit, test-framework, test-framework-hunit, test-framework-quickcheck2 >= 0.3, derive,-                        th-expand-syns, deepseq, transformers+  Build-Depends:        base >= 4.7, base < 5, template-haskell, containers, mtl >= 2.2.1,+                        QuickCheck >= 2, HUnit, test-framework, test-framework-hunit,+                        test-framework-quickcheck2 >= 0.3, deepseq, transformers, th-expand-syns +  ghc-options:          -W -Wno-incomplete-patterns+                         Benchmark algebra   Type:                 exitcode-stdio-1.0   Main-is:		Benchmark.hs@@ -209,7 +215,9 @@   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.9, 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, deepseq, criterion, random, uniplate, transformers,+                        th-expand-syns   source-repository head
examples/Examples/Desugar.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, TypeOperators, MultiParamTypeClasses,   FlexibleInstances, FlexibleContexts, UndecidableInstances,-  OverlappingInstances, ConstraintKinds #-}+  ConstraintKinds #-} {-# LANGUAGE DeriveFunctor #-} -------------------------------------------------------------------------------- -- |
examples/Examples/Eval.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, TypeOperators, MultiParamTypeClasses,   FlexibleInstances, FlexibleContexts, UndecidableInstances,-  OverlappingInstances, ConstraintKinds #-}+  ConstraintKinds #-} -------------------------------------------------------------------------------- -- | -- Module      :  Examples.Eval@@ -35,10 +35,10 @@ eval :: (Functor f, Eval f v) => Term f -> Term v eval = cata evalAlg -instance (f :<: v) => Eval f v where+instance {-# OVERLAPPABLE #-} (f :<: v) => Eval f v where   evalAlg = inject -- default instance -instance (Value :<: v) => Eval Op v where+instance {-# OVERLAPPABLE #-} (Value :<: v) => Eval Op v where   evalAlg (Add x y)  = iConst $ projC x + projC y   evalAlg (Mult x y) = iConst $ projC x * projC y   evalAlg (Fst x)    = fst $ projP x
examples/Examples/EvalM.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, TypeOperators, MultiParamTypeClasses,   FlexibleInstances, FlexibleContexts, UndecidableInstances,-  OverlappingInstances, ConstraintKinds #-}+  ConstraintKinds #-} -------------------------------------------------------------------------------- -- | -- Module      :  Examples.EvalM@@ -35,10 +35,10 @@ evalM :: (Traversable f, EvalM f v) => Term f -> Maybe (Term v) evalM = cataM evalAlgM -instance (f :<: v) => EvalM f v where+instance {-# OVERLAPPABLE #-} (f :<: v) => EvalM f v where   evalAlgM = return . inject -- default instance -instance (Value :<: v) => EvalM Op v where+instance {-# OVERLAPPABLE #-} (Value :<: v) => EvalM Op v where   evalAlgM (Add x y)  = do n1 <- projC x                            n2 <- projC y                            return $ iConst $ n1 + n2
examples/Examples/Multi/Eval.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, TypeOperators, MultiParamTypeClasses,   FlexibleInstances, FlexibleContexts, UndecidableInstances, GADTs,-  OverlappingInstances, ConstraintKinds #-}+  ConstraintKinds #-} -------------------------------------------------------------------------------- -- | -- Module      :  Examples.Multi.Eval@@ -34,10 +34,10 @@ eval :: (HFunctor f, Eval f v) => Term f :-> Term v eval = cata evalAlg -instance (f :<: v) => Eval f v where+instance  {-# OVERLAPPABLE #-} (f :<: v) => Eval f v where   evalAlg = inject -- default instance -instance (Value :<: v) => Eval Op v where+instance {-# OVERLAPPABLE #-} (Value :<: v) => Eval Op v where   evalAlg (Add x y)  = iConst $ projC x + projC y   evalAlg (Mult x y) = iConst $ projC x * projC y   evalAlg (Fst x)    = fst $ projP x
examples/Examples/Multi/EvalM.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, TypeOperators, MultiParamTypeClasses,   FlexibleInstances, FlexibleContexts, UndecidableInstances, GADTs,-  OverlappingInstances, ConstraintKinds #-}+  ConstraintKinds #-} -------------------------------------------------------------------------------- -- | -- Module      :  Examples.Multi.EvalM@@ -34,10 +34,10 @@ evalM :: (HTraversable f, EvalM f v) => Term f i -> Maybe (Term v i) evalM = cataM evalAlgM -instance (f :<: v) => EvalM f v where+instance {-# OVERLAPPABLE #-} (f :<: v) => EvalM f v where   evalAlgM = return . inject -- default instance -instance (Value :<: v) => EvalM Op v where+instance {-# OVERLAPPABLE #-} (Value :<: v) => EvalM Op v where   evalAlgM (Add x y)  = do n1 <- projC x                            n2 <- projC y                            return $ iConst $ n1 + n2
+ examples/Examples/Simple.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE MultiParamTypeClasses #-}+module Examples.Simple where++import Data.Comp++data Lambda t a = App a a | Abs (Maybe (Term t)) +data Arith a = Const Int+++data LambdaType a = Fun a a++data IntType a = IntType++type Type = LambdaType :+: IntType++type Sig t = Lambda t :+: Arith++
src/Data/Comp/Algebra.hs view
@@ -399,11 +399,6 @@                 => HomM m g h -> HomM m f g -> HomM m f h compHomM' f g = appHomM' f <=< g -{-| Compose two monadic term homomorphisms. -}-compHomM_ :: (Functor h, Functor g, Monad m)-                => Hom g h -> HomM m f g -> HomM m f h-compHomM_ f g = liftM (appHom f) . g- {-| Compose a monadic algebra with a monadic term homomorphism to get a new   monadic algebra. -} compAlgM :: (Traversable g, Monad m) => AlgM m g a -> HomM m f g -> AlgM m f a@@ -923,10 +918,7 @@    "appSigFunM'/appSigFun'" forall (a :: SigFunM m g h) (h :: SigFun f g) x.      appSigFunM' a (appSigFun' h x) = appSigFunM' (compSigFunM a (sigFunM h)) x;---  "appHom/appHomM" forall (a :: Hom g h) (h :: HomM m f g) x.-     appHomM h x >>= (return . appHom a) = appHomM (compHomM_ a h) x; #-}+#-}  {-# RULES   "cata/build"  forall alg (g :: forall a . Alg f a -> a) .
src/Data/Comp/Arbitrary.hs view
@@ -21,7 +21,6 @@     ( ArbitraryF(..)     )where -import Control.Applicative import Data.Comp.Derive import Data.Comp.Derive.Utils import Data.Comp.Ops
src/Data/Comp/Decompose.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances  #-}+{-# LANGUAGE ConstraintKinds  #-}  -------------------------------------------------------------------------------- -- |@@ -18,7 +19,8 @@ module Data.Comp.Decompose (   Decomp (..),   DecompTerm,-  Decompose (..),+  Decompose,+  decomp,   structure,   arguments,   decompose@@ -49,20 +51,17 @@  {-| This class specifies the decomposability of a functorial value. -} -class (HasVars f v, Functor f, Foldable f) => Decompose f v where-    {-| This function decomposes a functorial value. -}--    decomp :: f a -> Decomp f v a-    decomp t = case isVar t of-                 Just v -> Var v-                 Nothing -> Fun sym args-                     where sym = fmap (const ()) t-                           args = arguments t+type Decompose f v = (HasVars f v, Functor f, Foldable f) -instance (HasVars f v, Functor f, Foldable f) => Decompose f v where+decomp :: Decompose f v => f a -> Decomp f v a+decomp t = case isVar t of+             Just v -> Var v+             Nothing -> Fun sym args+               where sym = fmap (const ()) t+                     args = arguments t   {-| This function decomposes a term. -} -decompose :: (Decompose f v) => Term f -> DecompTerm f v+decompose :: Decompose f v => Term f -> DecompTerm f v decompose (Term t) = decomp t
src/Data/Comp/Derive.hs view
@@ -34,7 +34,6 @@      -- ** Arbitrary      module Data.Comp.Derive.Arbitrary,      NFData(..),-     makeNFData,      -- ** DeepSeq      module Data.Comp.Derive.DeepSeq,      -- ** Smart Constructors@@ -61,12 +60,8 @@  import Language.Haskell.TH -import qualified Data.Derive.All as A-import qualified Data.DeriveTH as D -{-| Derive an instance of 'NFData' for a type constructor. -}-makeNFData :: Name -> Q [Dec]-makeNFData = D.derive A.makeNFData+  {-| Given the name of a type class, where the first parameter is a functor,   lift it to sums of functors. Example: @class ShowF f where ...@ is lifted
src/Data/Comp/Derive/Arbitrary.hs view
@@ -17,18 +17,12 @@     (      ArbitraryF(..),      makeArbitraryF,-     Arbitrary(..),-     makeArbitrary+     Arbitrary(..)     )where  import Data.Comp.Derive.Utils hiding (derive)-import qualified Data.DeriveTH as D import Language.Haskell.TH import Test.QuickCheck--{-| Derive an instance of 'Arbitrary' for a type constructor. -}-makeArbitrary :: Name -> Q [Dec]-makeArbitrary = D.derive D.makeArbitrary  {-| Signature arbitration. An instance @ArbitraryF f@ gives rise to an instance   @Arbitrary (Term f)@. -}
src/Data/Comp/Derive/SmartConstructors.hs view
@@ -52,7 +52,7 @@                     h = varT hvar                     a = varT avar                     ftype = foldl appT (conT tname) (map varT targs')-                    constr = classP ''(:<:) [ftype, f]+                    constr = (conT ''(:<:) `appT` ftype) `appT` f                     typ = foldl appT (conT ''Cxt) [h, f, a]                     typeSig = forallT (map PlainTV vars) (sequence [constr]) typ                 sigD sname typeSig
src/Data/Comp/Derive/Utils.hs view
@@ -17,8 +17,8 @@  import Control.Monad import Language.Haskell.TH-import Language.Haskell.TH.ExpandSyns import Language.Haskell.TH.Syntax+import Language.Haskell.TH.ExpandSyns  -- reportError is introduced only from version 7.6 of GHC #if __GLASGOW_HASKELL__ < 706@@ -29,8 +29,12 @@ #if __GLASGOW_HASKELL__ < 800 data DataInfo = DataInfo Cxt Name [TyVarBndr] [Con] [Name] #else+#if __GLASGOW_HASKELL__ < 802 data DataInfo = DataInfo Cxt Name [TyVarBndr] [Con] Cxt+#else+data DataInfo = DataInfo Cxt Name [TyVarBndr] [Con] [DerivClause]  #endif+#endif  {-|   This is the @Q@-lifted version of 'abstractNewtype.@@ -65,8 +69,9 @@ 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)+normalCon (GadtC (constr:_) args typ) = (constr,args,Just typ) #endif+normalCon _ = error "missing case for 'normalCon'"  normalCon' :: Con -> (Name,[Type], Maybe Type) normalCon' con = (n, map snd ts, t)@@ -84,8 +89,7 @@ normalConExp :: Con -> Q (Name,[Type], Maybe Type) normalConExp c = do   let (n,ts,t) = normalCon' c-  ts' <- mapM expandSyns ts-  return (n, ts',t)+  return (n, ts,t)   -- | Same as normalConExp' but retains strictness annotations.@@ -123,8 +127,9 @@ 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+abstractConType (GadtC (constr:_) args _typ) = (constr,length args) -- Only first Name #endif+abstractConType _ = error "missing case for 'abstractConType'"  {-|   This function returns the name of a bound type variable
src/Data/Comp/Desugar.hs view
@@ -1,7 +1,6 @@ {-# LANGUAGE ConstraintKinds       #-} {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverlappingInstances  #-} {-# LANGUAGE TypeOperators         #-} {-# LANGUAGE UndecidableInstances  #-} --------------------------------------------------------------------------------@@ -30,7 +29,7 @@  -- We make the lifting to sums explicit in order to make the Desugar -- class work with the default instance declaration further below.-instance (Desugar f h, Desugar g h) => Desugar (f :+: g) h where+instance {-# OVERLAPPABLE #-} (Desugar f h, Desugar g h) => Desugar (f :+: g) h where     desugHom = caseF desugHom desugHom  -- |Desugar a term.@@ -44,5 +43,5 @@ desugarA = appHom (propAnn desugHom)  -- |Default desugaring instance.-instance (Functor f, Functor g, f :<: g) => Desugar f g where+instance {-# OVERLAPPABLE #-} (Functor f, Functor g, f :<: g) => Desugar f g where     desugHom = simpCxt . inj
src/Data/Comp/Multi/Derive/SmartConstructors.hs view
@@ -62,7 +62,7 @@                     a = varT avar                     i = varT ivar                     ftype = foldl appT (conT tname) (map varT targs')-                    constr = classP ''(:<:) [ftype, f]+                    constr = (conT ''(:<:) `appT` ftype) `appT` f                     typ = foldl appT (conT ''Cxt) [h, f, a, maybe i return miTp]                     typeSig = forallT (map PlainTV vars) (sequence [constr]) typ                 sigD sname typeSig
src/Data/Comp/Multi/Desugar.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverlappingInstances  #-} {-# LANGUAGE TypeOperators         #-} {-# LANGUAGE UndecidableInstances  #-} --------------------------------------------------------------------------------@@ -31,7 +30,7 @@  -- We make the lifting to sums explicit in order to make the Desugar -- class work with the default instance declaration further below.-instance (Desugar f h, Desugar g h) => Desugar (f :+: g) h where+instance {-# OVERLAPPABLE #-} (Desugar f h, Desugar g h) => Desugar (f :+: g) h where     desugHom = caseH desugHom desugHom  -- |Desugar a term.@@ -44,5 +43,5 @@ desugarA = appHom (propAnn desugHom)  -- |Default desugaring instance.-instance (HFunctor f, HFunctor g, f :<: g) => Desugar f g where+instance {-# OVERLAPPABLE #-} (HFunctor f, HFunctor g, f :<: g) => Desugar f g where     desugHom = simpCxt . inj
src/Data/Comp/Multi/HFunctor.hs view
@@ -39,8 +39,6 @@      (:.:)(..)      ) where -import Data.Traversable-import Data.Foldable import Data.Functor.Compose  -- | The identity Functor.
src/Data/Comp/Multi/HTraversable.hs view
@@ -24,7 +24,7 @@      HTraversable (..)     ) where -import Control.Applicative+ import Data.Comp.Multi.HFoldable import Data.Comp.Multi.HFunctor 
src/Data/Comp/Multi/Ops.hs view
@@ -35,7 +35,7 @@     , O.fsnd     ) where -import Control.Applicative+ import Control.Monad import Data.Comp.Multi.HFoldable import Data.Comp.Multi.HFunctor
src/Data/Comp/Multi/Term.hs view
@@ -35,9 +35,9 @@ import Data.Comp.Multi.HFoldable import Data.Comp.Multi.HFunctor import Data.Comp.Multi.HTraversable-import Data.Monoid -import Control.Applicative hiding (Const)++ import Control.Monad  import Unsafe.Coerce
src/Data/Comp/Multi/Variables.hs view
@@ -3,7 +3,6 @@ {-# LANGUAGE GADTs                 #-} {-# LANGUAGE KindSignatures        #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverlappingInstances  #-} {-# LANGUAGE RankNTypes            #-} {-# LANGUAGE ScopedTypeVariables   #-} {-# LANGUAGE TemplateHaskell       #-}@@ -210,7 +209,8 @@ appSubst :: (Ord v, SubstVars v t a) => GSubst v t -> a :-> a appSubst subst = substVars (substFun subst) -instance (Ord v, HasVars f v, HTraversable f) => SubstVars v (Cxt h f a) (Cxt h f a) where+instance {-# OVERLAPPABLE #-} (Ord v, HasVars f v, HTraversable f)+       => SubstVars v (Cxt h f a) (Cxt h f a) where     -- have to use explicit GADT pattern matching!!     substVars subst = doSubst Set.empty       where doSubst :: Set v -> Cxt h f a :-> Cxt h f a@@ -221,7 +221,7 @@                 where run :: Set v -> Cxt h f a :-> Cxt h f a                       run vars = doSubst (b `Set.union` vars) -instance (SubstVars v t a, HFunctor f) => SubstVars v t (f a) where+instance {-# OVERLAPPABLE #-} (SubstVars v t a, HFunctor f) => SubstVars v t (f a) where     substVars subst = hfmap (substVars subst)  {-| This function composes two substitutions @s1@ and @s2@. That is,
src/Data/Comp/Sum.hs view
@@ -62,7 +62,6 @@ import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe-import Data.Traversable   -- |Project the outermost layer of a term to a sub signature. If the signature
src/Data/Comp/Unification.hs view
@@ -23,8 +23,6 @@ import Control.Monad.Except import Control.Monad.State -import Data.Traversable- import qualified Data.Map as Map  {-| This type represents equations between terms over a specific
src/Data/Comp/Variables.hs view
@@ -1,7 +1,6 @@ {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE GADTs                 #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverlappingInstances  #-} {-# LANGUAGE TemplateHaskell       #-} {-# LANGUAGE TypeOperators         #-} @@ -191,7 +190,7 @@ appSubst subst = substVars f     where f v = Map.lookup v subst -instance (Ord v, HasVars f v, Traversable f)+instance  {-# OVERLAPPABLE #-} (Ord v, HasVars f v, Traversable f)     => SubstVars v (Cxt h f a) (Cxt h f a) where         -- have to use explicit GADT pattern matching!!         -- subst f = free (substAlg f) Hole@@ -202,7 +201,7 @@             Nothing  -> Term $ fmapBoundVars run t               where run vars = doSubst (b `Set.union` vars) -instance (SubstVars v t a, Functor f) => SubstVars v t (f a) where+instance  {-# OVERLAPPABLE #-} (SubstVars v t a, Functor f) => SubstVars v t (f a) where     substVars f = fmap (substVars f)  {-| This function composes two substitutions @s1@ and @s2@. That is,
testsuite/tests/Data/Comp/Equality_Test.hs view
@@ -2,13 +2,12 @@   import Data.Comp-import Data.Comp.Equality-import Data.Comp.Arbitrary-import Data.Comp.Show+import Data.Comp.Equality ()+import Data.Comp.Arbitrary ()+import Data.Comp.Show ()  import Test.Framework import Test.Framework.Providers.QuickCheck2-import Test.QuickCheck import Test.Utils  @@ -34,4 +33,4 @@                    Nothing -> False                    Just list -> all (uncurry (==)) $ map (\(x,y)->(f x,y)) list     where cxt' = fmap f cxt -          with = (cxt :: Context SigP Int, f :: Int -> Int)+          _with = (cxt :: Context SigP Int, f :: Int -> Int)
testsuite/tests/Data/Comp/Examples/Comp.hs view
@@ -11,10 +11,6 @@ import Test.Framework import Test.Framework.Providers.HUnit import Test.HUnit-import Test.Utils hiding (iPair)---   --------------------------------------------------------------------------------
testsuite/tests/Data/Comp/Examples/Multi.hs view
@@ -12,7 +12,6 @@ import Test.Framework import Test.Framework.Providers.HUnit import Test.HUnit-import Test.Utils hiding (iPair)  -------------------------------------------------------------------------------- -- Test Suits
testsuite/tests/Data/Comp/Examples_Test.hs view
@@ -5,9 +5,6 @@ import qualified Data.Comp.Examples.Multi as M  import Test.Framework-import Test.Framework.Providers.QuickCheck2-import Test.QuickCheck-import Test.Utils  tests = testGroup "Examples" [          C.tests,
testsuite/tests/Test/Utils.hs view
@@ -6,8 +6,6 @@ import Data.Comp import Data.Comp.Derive -import Data.Foldable-  data Tree l e = Leaf l               | UnNode l e