packages feed

folds 0.6.3 → 0.7

raw patch · 13 files changed

+593/−26 lines, 13 filesdep +adjunctionsdep +bifunctorsdep +constraintsdep ~mtldep ~profunctorsdep ~semigroupsPVP ok

version bump matches the API change (PVP)

Dependencies added: adjunctions, bifunctors, constraints, data-reify, distributive, unordered-containers

Dependency ranges changed: mtl, profunctors, semigroups, vector

API changes (from Hackage documentation)

- Data.Fold: instance AsL' L
- Data.Fold: instance AsL' L'
- Data.Fold: instance AsL1' L
- Data.Fold: instance AsL1' L'
- Data.Fold: instance AsL1' L1
- Data.Fold: instance AsL1' L1'
- Data.Fold: instance AsRM L
- Data.Fold: instance AsRM L'
- Data.Fold: instance AsRM M
- Data.Fold: instance AsRM R
- Data.Fold: instance AsRM1 L
- Data.Fold: instance AsRM1 L'
- Data.Fold: instance AsRM1 L1
- Data.Fold: instance AsRM1 L1'
- Data.Fold: instance AsRM1 M
- Data.Fold: instance AsRM1 M1
- Data.Fold: instance AsRM1 R
- Data.Fold: instance AsRM1 R1
- Data.Fold.Internal: instance (Data a, Data b) => Data (Pair' a b)
- Data.Fold.Internal: instance (Data a, Data s) => Data (N a s)
- Data.Fold.Internal: instance (Eq a, Eq b) => Eq (Pair' a b)
- Data.Fold.Internal: instance (Monoid a, Monoid b) => Monoid (Pair' a b)
- Data.Fold.Internal: instance (Ord a, Ord b) => Ord (Pair' a b)
- Data.Fold.Internal: instance (Read a, Read b) => Read (Pair' a b)
- Data.Fold.Internal: instance (Show a, Show b) => Show (Pair' a b)
- Data.Fold.Internal: instance Data a => Data (An a)
- Data.Fold.Internal: instance Data a => Data (Box a)
- Data.Fold.Internal: instance Data a => Data (Maybe' a)
- Data.Fold.Internal: instance Data a => Data (SnocList a)
- Data.Fold.Internal: instance Data a => Data (SnocList1 a)
- Data.Fold.Internal: instance Data a => Data (Tree a)
- Data.Fold.Internal: instance Eq a => Eq (An a)
- Data.Fold.Internal: instance Eq a => Eq (Box a)
- Data.Fold.Internal: instance Eq a => Eq (Maybe' a)
- Data.Fold.Internal: instance Eq a => Eq (N a s)
- Data.Fold.Internal: instance Eq a => Eq (SnocList a)
- Data.Fold.Internal: instance Eq a => Eq (SnocList1 a)
- Data.Fold.Internal: instance Eq a => Eq (Tree a)
- Data.Fold.Internal: instance Foldable An
- Data.Fold.Internal: instance Foldable Box
- Data.Fold.Internal: instance Foldable List1
- Data.Fold.Internal: instance Foldable Maybe'
- Data.Fold.Internal: instance Foldable SnocList
- Data.Fold.Internal: instance Foldable SnocList1
- Data.Fold.Internal: instance Foldable Tree
- Data.Fold.Internal: instance Foldable Tree1
- Data.Fold.Internal: instance Functor An
- Data.Fold.Internal: instance Functor Box
- Data.Fold.Internal: instance Functor List1
- Data.Fold.Internal: instance Functor SnocList
- Data.Fold.Internal: instance Functor SnocList1
- Data.Fold.Internal: instance Functor Tree
- Data.Fold.Internal: instance Functor Tree1
- Data.Fold.Internal: instance Ord a => Ord (An a)
- Data.Fold.Internal: instance Ord a => Ord (Box a)
- Data.Fold.Internal: instance Ord a => Ord (Maybe' a)
- Data.Fold.Internal: instance Ord a => Ord (N a s)
- Data.Fold.Internal: instance Ord a => Ord (SnocList a)
- Data.Fold.Internal: instance Ord a => Ord (SnocList1 a)
- Data.Fold.Internal: instance Ord a => Ord (Tree a)
- Data.Fold.Internal: instance Read a => Read (An a)
- Data.Fold.Internal: instance Read a => Read (Box a)
- Data.Fold.Internal: instance Read a => Read (Maybe' a)
- Data.Fold.Internal: instance Read a => Read (N a s)
- Data.Fold.Internal: instance Read a => Read (SnocList a)
- Data.Fold.Internal: instance Read a => Read (SnocList1 a)
- Data.Fold.Internal: instance Read a => Read (Tree a)
- Data.Fold.Internal: instance Reifies s (a -> a -> a, a) => Monoid (N a s)
- Data.Fold.Internal: instance Show a => Show (An a)
- Data.Fold.Internal: instance Show a => Show (Box a)
- Data.Fold.Internal: instance Show a => Show (Maybe' a)
- Data.Fold.Internal: instance Show a => Show (N a s)
- Data.Fold.Internal: instance Show a => Show (SnocList a)
- Data.Fold.Internal: instance Show a => Show (SnocList1 a)
- Data.Fold.Internal: instance Show a => Show (Tree a)
- Data.Fold.Internal: instance Traversable An
- Data.Fold.Internal: instance Traversable Box
- Data.Fold.Internal: instance Traversable List1
- Data.Fold.Internal: instance Traversable SnocList
- Data.Fold.Internal: instance Traversable SnocList1
- Data.Fold.Internal: instance Traversable Tree
- Data.Fold.Internal: instance Traversable Tree1
- Data.Fold.Internal: instance Typeable An
- Data.Fold.Internal: instance Typeable Box
- Data.Fold.Internal: instance Typeable Maybe'
- Data.Fold.Internal: instance Typeable N
- Data.Fold.Internal: instance Typeable Pair'
- Data.Fold.Internal: instance Typeable SnocList
- Data.Fold.Internal: instance Typeable SnocList1
- Data.Fold.Internal: instance Typeable Tree
- Data.Fold.Internal: runN :: N a s -> a
- Data.Fold.L: instance Applicative (L a)
- Data.Fold.L: instance Apply (L a)
- Data.Fold.L: instance Bind (L a)
- Data.Fold.L: instance Choice L
- Data.Fold.L: instance Comonad (L a)
- Data.Fold.L: instance ComonadApply (L a)
- Data.Fold.L: instance Extend (L a)
- Data.Fold.L: instance Folding L
- Data.Fold.L: instance Functor (L a)
- Data.Fold.L: instance Monad (L a)
- Data.Fold.L: instance MonadZip (L a)
- Data.Fold.L: instance Profunctor L
- Data.Fold.L: instance Scan L
- Data.Fold.L': instance Applicative (L' a)
- Data.Fold.L': instance Apply (L' a)
- Data.Fold.L': instance Bind (L' a)
- Data.Fold.L': instance Choice L'
- Data.Fold.L': instance Comonad (L' a)
- Data.Fold.L': instance ComonadApply (L' a)
- Data.Fold.L': instance Extend (L' a)
- Data.Fold.L': instance Folding L'
- Data.Fold.L': instance Functor (L' a)
- Data.Fold.L': instance Monad (L' a)
- Data.Fold.L': instance MonadZip (L' a)
- Data.Fold.L': instance Profunctor L'
- Data.Fold.L': instance Scan L'
- Data.Fold.L1: instance Applicative (L1 a)
- Data.Fold.L1: instance Apply (L1 a)
- Data.Fold.L1: instance Arrow L1
- Data.Fold.L1: instance ArrowChoice L1
- Data.Fold.L1: instance Category L1
- Data.Fold.L1: instance Choice L1
- Data.Fold.L1: instance Functor (L1 a)
- Data.Fold.L1: instance Monad (L1 a)
- Data.Fold.L1: instance MonadZip (L1 a)
- Data.Fold.L1: instance Pointed (L1 a)
- Data.Fold.L1: instance Profunctor L1
- Data.Fold.L1: instance Scan L1
- Data.Fold.L1: instance Semigroupoid L1
- Data.Fold.L1: instance Strong L1
- Data.Fold.L1': instance Applicative (L1' a)
- Data.Fold.L1': instance Apply (L1' a)
- Data.Fold.L1': instance Arrow L1'
- Data.Fold.L1': instance ArrowChoice L1'
- Data.Fold.L1': instance Category L1'
- Data.Fold.L1': instance Choice L1'
- Data.Fold.L1': instance Functor (L1' a)
- Data.Fold.L1': instance Monad (L1' a)
- Data.Fold.L1': instance Pointed (L1' a)
- Data.Fold.L1': instance Profunctor L1'
- Data.Fold.L1': instance Scan L1'
- Data.Fold.L1': instance Semigroupoid L1'
- Data.Fold.L1': instance Strong L1'
- Data.Fold.M: instance Applicative (M a)
- Data.Fold.M: instance Apply (M a)
- Data.Fold.M: instance Bind (M a)
- Data.Fold.M: instance Choice M
- Data.Fold.M: instance Comonad (M a)
- Data.Fold.M: instance ComonadApply (M a)
- Data.Fold.M: instance Extend (M a)
- Data.Fold.M: instance Folding M
- Data.Fold.M: instance Functor (M a)
- Data.Fold.M: instance Monad (M a)
- Data.Fold.M: instance MonadZip (M a)
- Data.Fold.M: instance Profunctor M
- Data.Fold.M: instance Scan M
- Data.Fold.M1: instance Applicative (M1 a)
- Data.Fold.M1: instance Apply (M1 a)
- Data.Fold.M1: instance Arrow M1
- Data.Fold.M1: instance ArrowChoice M1
- Data.Fold.M1: instance Category M1
- Data.Fold.M1: instance Choice M1
- Data.Fold.M1: instance Functor (M1 a)
- Data.Fold.M1: instance Monad (M1 a)
- Data.Fold.M1: instance MonadZip (M1 a)
- Data.Fold.M1: instance Pointed (M1 a)
- Data.Fold.M1: instance Profunctor M1
- Data.Fold.M1: instance Scan M1
- Data.Fold.M1: instance Semigroupoid M1
- Data.Fold.M1: instance Strong M1
- Data.Fold.R: instance Applicative (R a)
- Data.Fold.R: instance Apply (R a)
- Data.Fold.R: instance Bind (R a)
- Data.Fold.R: instance Choice R
- Data.Fold.R: instance Comonad (R a)
- Data.Fold.R: instance ComonadApply (R a)
- Data.Fold.R: instance Extend (R a)
- Data.Fold.R: instance Folding R
- Data.Fold.R: instance Functor (R a)
- Data.Fold.R: instance Monad (R a)
- Data.Fold.R: instance MonadZip (R a)
- Data.Fold.R: instance Profunctor R
- Data.Fold.R: instance Scan R
- Data.Fold.R1: instance Applicative (R1 a)
- Data.Fold.R1: instance Apply (R1 a)
- Data.Fold.R1: instance Arrow R1
- Data.Fold.R1: instance ArrowChoice R1
- Data.Fold.R1: instance Category R1
- Data.Fold.R1: instance Choice R1
- Data.Fold.R1: instance Functor (R1 a)
- Data.Fold.R1: instance Monad (R1 a)
- Data.Fold.R1: instance MonadZip (R1 a)
- Data.Fold.R1: instance Pointed (R1 a)
- Data.Fold.R1: instance Profunctor R1
- Data.Fold.R1: instance Scan R1
- Data.Fold.R1: instance Semigroupoid R1
- Data.Fold.R1: instance Strong R1
+ Data.Fold: instance Data.Fold.AsL' Data.Fold.L'.L'
+ Data.Fold: instance Data.Fold.AsL' Data.Fold.L.L
+ Data.Fold: instance Data.Fold.AsL1' Data.Fold.L'.L'
+ Data.Fold: instance Data.Fold.AsL1' Data.Fold.L.L
+ Data.Fold: instance Data.Fold.AsL1' Data.Fold.L1'.L1'
+ Data.Fold: instance Data.Fold.AsL1' Data.Fold.L1.L1
+ Data.Fold: instance Data.Fold.AsRM Data.Fold.L'.L'
+ Data.Fold: instance Data.Fold.AsRM Data.Fold.L.L
+ Data.Fold: instance Data.Fold.AsRM Data.Fold.M.M
+ Data.Fold: instance Data.Fold.AsRM Data.Fold.R.R
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.L'.L'
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.L.L
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.L1'.L1'
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.L1.L1
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.M.M
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.M1.M1
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.R.R
+ Data.Fold: instance Data.Fold.AsRM1 Data.Fold.R1.R1
+ Data.Fold.Internal: FreeMonoid :: (forall m. Monoid m => (a -> m) -> m) -> FreeMonoid a
+ Data.Fold.Internal: FreeSemigroup :: (forall m. Semigroup m => (a -> m) -> m) -> FreeSemigroup a
+ Data.Fold.Internal: S :: a -> S a s
+ Data.Fold.Internal: [runFreeMonoid] :: FreeMonoid a -> forall m. Monoid m => (a -> m) -> m
+ Data.Fold.Internal: [runFreeSemigroup] :: FreeSemigroup a -> forall m. Semigroup m => (a -> m) -> m
+ Data.Fold.Internal: [runN] :: N a s -> a
+ Data.Fold.Internal: [runS] :: S a s -> a
+ Data.Fold.Internal: foldDeRef :: (MuRef1 f, Bifoldable (DeRef1 f)) => f a -> FreeMonoid a
+ Data.Fold.Internal: foldDeRef1 :: (MuRef1 f, Bifoldable1 (DeRef1 f)) => f a -> FreeSemigroup a
+ Data.Fold.Internal: instance (Data.Data.Data a, Data.Data.Data b) => Data.Data.Data (Data.Fold.Internal.Pair' a b)
+ Data.Fold.Internal: instance (Data.Data.Data a, Data.Data.Data s) => Data.Data.Data (Data.Fold.Internal.N a s)
+ Data.Fold.Internal: instance (Data.Data.Data a, Data.Data.Data s) => Data.Data.Data (Data.Fold.Internal.S a s)
+ Data.Fold.Internal: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Monoid (Data.Fold.Internal.Pair' a b)
+ Data.Fold.Internal: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Data.Fold.Internal.Pair' a b)
+ Data.Fold.Internal: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Data.Fold.Internal.Pair' a b)
+ Data.Fold.Internal: instance (GHC.Read.Read a, GHC.Read.Read b) => GHC.Read.Read (Data.Fold.Internal.Pair' a b)
+ Data.Fold.Internal: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Data.Fold.Internal.Pair' a b)
+ Data.Fold.Internal: instance Data.Bifoldable.Bifoldable Data.Fold.Internal.T
+ Data.Fold.Internal: instance Data.Bifoldable.Bifoldable Data.Fold.Internal.T1
+ Data.Fold.Internal: instance Data.Bifunctor.Bifunctor Data.Fold.Internal.T
+ Data.Fold.Internal: instance Data.Bifunctor.Bifunctor Data.Fold.Internal.T1
+ Data.Fold.Internal: instance Data.Bitraversable.Bitraversable Data.Fold.Internal.T
+ Data.Fold.Internal: instance Data.Bitraversable.Bitraversable Data.Fold.Internal.T1
+ Data.Fold.Internal: instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.An a)
+ Data.Fold.Internal: instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.Box a)
+ Data.Fold.Internal: instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.Maybe' a)
+ Data.Fold.Internal: instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.SnocList a)
+ Data.Fold.Internal: instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.SnocList1 a)
+ Data.Fold.Internal: instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.Tree a)
+ Data.Fold.Internal: instance Data.Fold.Internal.MuRef1 Data.Fold.Internal.Tree
+ Data.Fold.Internal: instance Data.Fold.Internal.MuRef1 Data.Fold.Internal.Tree1
+ Data.Fold.Internal: instance Data.Foldable.Foldable (Data.Fold.Internal.T a)
+ Data.Fold.Internal: instance Data.Foldable.Foldable (Data.Fold.Internal.T1 a)
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.An
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.Box
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.FreeMonoid
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.FreeSemigroup
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.List1
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.Maybe'
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.SnocList
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.SnocList1
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.Tree
+ Data.Fold.Internal: instance Data.Foldable.Foldable Data.Fold.Internal.Tree1
+ Data.Fold.Internal: instance Data.Reflection.Reifies s (a -> a -> a) => Data.Semigroup.Semigroup (Data.Fold.Internal.S a s)
+ Data.Fold.Internal: instance Data.Reflection.Reifies s (a -> a -> a, a) => GHC.Base.Monoid (Data.Fold.Internal.N a s)
+ Data.Fold.Internal: instance Data.Reify.MuRef (Data.Fold.Internal.Tree a)
+ Data.Fold.Internal: instance Data.Reify.MuRef (Data.Fold.Internal.Tree1 a)
+ Data.Fold.Internal: instance Data.Semigroup.Foldable.Class.Bifoldable1 Data.Fold.Internal.T1
+ Data.Fold.Internal: instance Data.Semigroup.Foldable.Class.Foldable1 Data.Fold.Internal.FreeSemigroup
+ Data.Fold.Internal: instance Data.Semigroup.Traversable.Class.Bitraversable1 Data.Fold.Internal.T1
+ Data.Fold.Internal: instance Data.Traversable.Traversable (Data.Fold.Internal.T a)
+ Data.Fold.Internal: instance Data.Traversable.Traversable (Data.Fold.Internal.T1 a)
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.An
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.Box
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.List1
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.SnocList
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.SnocList1
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.Tree
+ Data.Fold.Internal: instance Data.Traversable.Traversable Data.Fold.Internal.Tree1
+ Data.Fold.Internal: instance GHC.Base.Functor (Data.Fold.Internal.T a)
+ Data.Fold.Internal: instance GHC.Base.Functor (Data.Fold.Internal.T1 a)
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.An
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.Box
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.FreeMonoid
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.FreeSemigroup
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.List1
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.SnocList
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.SnocList1
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.Tree
+ Data.Fold.Internal: instance GHC.Base.Functor Data.Fold.Internal.Tree1
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.An a)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.Box a)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.Maybe' a)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.N a s)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.S a s)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.SnocList a)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.SnocList1 a)
+ Data.Fold.Internal: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.Tree a)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.An a)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.Box a)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.Maybe' a)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.N a s)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.S a s)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.SnocList a)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.SnocList1 a)
+ Data.Fold.Internal: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.Tree a)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.An a)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.Box a)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.Maybe' a)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.N a s)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.S a s)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.SnocList a)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.SnocList1 a)
+ Data.Fold.Internal: instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.Tree a)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.An a)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.Box a)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.Maybe' a)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.N a s)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.S a s)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.SnocList a)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.SnocList1 a)
+ Data.Fold.Internal: instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.Tree a)
+ Data.Fold.Internal: newtype FreeMonoid a
+ Data.Fold.Internal: newtype FreeSemigroup a
+ Data.Fold.Internal: newtype S a s
+ Data.Fold.L: instance Control.Comonad.Comonad (Data.Fold.L.L a)
+ Data.Fold.L: instance Control.Comonad.ComonadApply (Data.Fold.L.L a)
+ Data.Fold.L: instance Control.Monad.Fix.MonadFix (Data.Fold.L.L a)
+ Data.Fold.L: instance Control.Monad.Reader.Class.MonadReader [a] (Data.Fold.L.L a)
+ Data.Fold.L: instance Control.Monad.Zip.MonadZip (Data.Fold.L.L a)
+ Data.Fold.L: instance Data.Distributive.Distributive (Data.Fold.L.L a)
+ Data.Fold.L: instance Data.Fold.Class.Folding Data.Fold.L.L
+ Data.Fold.L: instance Data.Fold.Class.Scan Data.Fold.L.L
+ Data.Fold.L: instance Data.Functor.Bind.Class.Apply (Data.Fold.L.L a)
+ Data.Fold.L: instance Data.Functor.Bind.Class.Bind (Data.Fold.L.L a)
+ Data.Fold.L: instance Data.Functor.Extend.Extend (Data.Fold.L.L a)
+ Data.Fold.L: instance Data.Functor.Rep.Representable (Data.Fold.L.L a)
+ Data.Fold.L: instance Data.Profunctor.Choice Data.Fold.L.L
+ Data.Fold.L: instance Data.Profunctor.Closed.Closed Data.Fold.L.L
+ Data.Fold.L: instance Data.Profunctor.Costrong Data.Fold.L.L
+ Data.Fold.L: instance Data.Profunctor.Rep.Corepresentable Data.Fold.L.L
+ Data.Fold.L: instance Data.Profunctor.Sieve.Cosieve Data.Fold.L.L []
+ Data.Fold.L: instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L.L
+ Data.Fold.L: instance GHC.Base.Applicative (Data.Fold.L.L a)
+ Data.Fold.L: instance GHC.Base.Functor (Data.Fold.L.L a)
+ Data.Fold.L: instance GHC.Base.Monad (Data.Fold.L.L a)
+ Data.Fold.L': instance Control.Comonad.Comonad (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Control.Comonad.ComonadApply (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Control.Monad.Fix.MonadFix (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Control.Monad.Reader.Class.MonadReader [a] (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Control.Monad.Zip.MonadZip (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Data.Distributive.Distributive (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Data.Fold.Class.Folding Data.Fold.L'.L'
+ Data.Fold.L': instance Data.Fold.Class.Scan Data.Fold.L'.L'
+ Data.Fold.L': instance Data.Functor.Bind.Class.Apply (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Data.Functor.Bind.Class.Bind (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Data.Functor.Extend.Extend (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Data.Functor.Rep.Representable (Data.Fold.L'.L' a)
+ Data.Fold.L': instance Data.Profunctor.Choice Data.Fold.L'.L'
+ Data.Fold.L': instance Data.Profunctor.Closed.Closed Data.Fold.L'.L'
+ Data.Fold.L': instance Data.Profunctor.Costrong Data.Fold.L'.L'
+ Data.Fold.L': instance Data.Profunctor.Rep.Corepresentable Data.Fold.L'.L'
+ Data.Fold.L': instance Data.Profunctor.Sieve.Cosieve Data.Fold.L'.L' []
+ Data.Fold.L': instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L'.L'
+ Data.Fold.L': instance GHC.Base.Applicative (Data.Fold.L'.L' a)
+ Data.Fold.L': instance GHC.Base.Functor (Data.Fold.L'.L' a)
+ Data.Fold.L': instance GHC.Base.Monad (Data.Fold.L'.L' a)
+ Data.Fold.L1: instance Control.Arrow.Arrow Data.Fold.L1.L1
+ Data.Fold.L1: instance Control.Arrow.ArrowChoice Data.Fold.L1.L1
+ Data.Fold.L1: instance Control.Category.Category Data.Fold.L1.L1
+ Data.Fold.L1: instance Control.Monad.Fix.MonadFix (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Control.Monad.Reader.Class.MonadReader (Data.List.NonEmpty.NonEmpty a) (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Control.Monad.Zip.MonadZip (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Data.Distributive.Distributive (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Data.Fold.Class.Scan Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Functor.Bind.Class.Apply (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Data.Functor.Rep.Representable (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Data.Pointed.Pointed (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance Data.Profunctor.Choice Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Profunctor.Closed.Closed Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Profunctor.Costrong Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Profunctor.Rep.Corepresentable Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Profunctor.Sieve.Cosieve Data.Fold.L1.L1 Data.List.NonEmpty.NonEmpty
+ Data.Fold.L1: instance Data.Profunctor.Strong Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L1.L1
+ Data.Fold.L1: instance Data.Semigroupoid.Semigroupoid Data.Fold.L1.L1
+ Data.Fold.L1: instance GHC.Base.Applicative (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance GHC.Base.Functor (Data.Fold.L1.L1 a)
+ Data.Fold.L1: instance GHC.Base.Monad (Data.Fold.L1.L1 a)
+ Data.Fold.L1': instance Control.Arrow.Arrow Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Control.Arrow.ArrowChoice Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Control.Category.Category Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Control.Monad.Fix.MonadFix (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance Control.Monad.Reader.Class.MonadReader (Data.List.NonEmpty.NonEmpty a) (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance Data.Distributive.Distributive (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance Data.Fold.Class.Scan Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Functor.Bind.Class.Apply (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance Data.Functor.Rep.Representable (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance Data.Pointed.Pointed (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance Data.Profunctor.Choice Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Profunctor.Closed.Closed Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Profunctor.Costrong Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Profunctor.Rep.Corepresentable Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Profunctor.Sieve.Cosieve Data.Fold.L1'.L1' Data.List.NonEmpty.NonEmpty
+ Data.Fold.L1': instance Data.Profunctor.Strong Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L1'.L1'
+ Data.Fold.L1': instance Data.Semigroupoid.Semigroupoid Data.Fold.L1'.L1'
+ Data.Fold.L1': instance GHC.Base.Applicative (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance GHC.Base.Functor (Data.Fold.L1'.L1' a)
+ Data.Fold.L1': instance GHC.Base.Monad (Data.Fold.L1'.L1' a)
+ Data.Fold.M: instance Control.Comonad.Comonad (Data.Fold.M.M a)
+ Data.Fold.M: instance Control.Comonad.ComonadApply (Data.Fold.M.M a)
+ Data.Fold.M: instance Control.Monad.Fix.MonadFix (Data.Fold.M.M a)
+ Data.Fold.M: instance Control.Monad.Reader.Class.MonadReader (Data.Fold.Internal.FreeMonoid a) (Data.Fold.M.M a)
+ Data.Fold.M: instance Control.Monad.Zip.MonadZip (Data.Fold.M.M a)
+ Data.Fold.M: instance Data.Distributive.Distributive (Data.Fold.M.M a)
+ Data.Fold.M: instance Data.Fold.Class.Folding Data.Fold.M.M
+ Data.Fold.M: instance Data.Fold.Class.Scan Data.Fold.M.M
+ Data.Fold.M: instance Data.Functor.Bind.Class.Apply (Data.Fold.M.M a)
+ Data.Fold.M: instance Data.Functor.Bind.Class.Bind (Data.Fold.M.M a)
+ Data.Fold.M: instance Data.Functor.Extend.Extend (Data.Fold.M.M a)
+ Data.Fold.M: instance Data.Functor.Rep.Representable (Data.Fold.M.M a)
+ Data.Fold.M: instance Data.Profunctor.Choice Data.Fold.M.M
+ Data.Fold.M: instance Data.Profunctor.Closed.Closed Data.Fold.M.M
+ Data.Fold.M: instance Data.Profunctor.Costrong Data.Fold.M.M
+ Data.Fold.M: instance Data.Profunctor.Rep.Corepresentable Data.Fold.M.M
+ Data.Fold.M: instance Data.Profunctor.Sieve.Cosieve Data.Fold.M.M Data.Fold.Internal.FreeMonoid
+ Data.Fold.M: instance Data.Profunctor.Unsafe.Profunctor Data.Fold.M.M
+ Data.Fold.M: instance GHC.Base.Applicative (Data.Fold.M.M a)
+ Data.Fold.M: instance GHC.Base.Functor (Data.Fold.M.M a)
+ Data.Fold.M: instance GHC.Base.Monad (Data.Fold.M.M a)
+ Data.Fold.M1: instance Control.Arrow.Arrow Data.Fold.M1.M1
+ Data.Fold.M1: instance Control.Arrow.ArrowChoice Data.Fold.M1.M1
+ Data.Fold.M1: instance Control.Category.Category Data.Fold.M1.M1
+ Data.Fold.M1: instance Control.Monad.Fix.MonadFix (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Control.Monad.Reader.Class.MonadReader (Data.Fold.Internal.FreeSemigroup a) (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Control.Monad.Zip.MonadZip (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Data.Distributive.Distributive (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Data.Fold.Class.Scan Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Functor.Bind.Class.Apply (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Data.Functor.Rep.Representable (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Data.Pointed.Pointed (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance Data.Profunctor.Choice Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Profunctor.Closed.Closed Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Profunctor.Costrong Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Profunctor.Rep.Corepresentable Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Profunctor.Sieve.Cosieve Data.Fold.M1.M1 Data.Fold.Internal.FreeSemigroup
+ Data.Fold.M1: instance Data.Profunctor.Strong Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Profunctor.Unsafe.Profunctor Data.Fold.M1.M1
+ Data.Fold.M1: instance Data.Semigroupoid.Semigroupoid Data.Fold.M1.M1
+ Data.Fold.M1: instance GHC.Base.Applicative (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance GHC.Base.Functor (Data.Fold.M1.M1 a)
+ Data.Fold.M1: instance GHC.Base.Monad (Data.Fold.M1.M1 a)
+ Data.Fold.M1: runM1 :: Foldable1 f => f a -> M1 a b -> b
+ Data.Fold.R: instance Control.Comonad.Comonad (Data.Fold.R.R a)
+ Data.Fold.R: instance Control.Comonad.ComonadApply (Data.Fold.R.R a)
+ Data.Fold.R: instance Control.Monad.Fix.MonadFix (Data.Fold.R.R a)
+ Data.Fold.R: instance Control.Monad.Reader.Class.MonadReader [a] (Data.Fold.R.R a)
+ Data.Fold.R: instance Control.Monad.Zip.MonadZip (Data.Fold.R.R a)
+ Data.Fold.R: instance Data.Distributive.Distributive (Data.Fold.R.R a)
+ Data.Fold.R: instance Data.Fold.Class.Folding Data.Fold.R.R
+ Data.Fold.R: instance Data.Fold.Class.Scan Data.Fold.R.R
+ Data.Fold.R: instance Data.Functor.Bind.Class.Apply (Data.Fold.R.R a)
+ Data.Fold.R: instance Data.Functor.Bind.Class.Bind (Data.Fold.R.R a)
+ Data.Fold.R: instance Data.Functor.Extend.Extend (Data.Fold.R.R a)
+ Data.Fold.R: instance Data.Functor.Rep.Representable (Data.Fold.R.R a)
+ Data.Fold.R: instance Data.Profunctor.Choice Data.Fold.R.R
+ Data.Fold.R: instance Data.Profunctor.Closed.Closed Data.Fold.R.R
+ Data.Fold.R: instance Data.Profunctor.Costrong Data.Fold.R.R
+ Data.Fold.R: instance Data.Profunctor.Rep.Corepresentable Data.Fold.R.R
+ Data.Fold.R: instance Data.Profunctor.Sieve.Cosieve Data.Fold.R.R []
+ Data.Fold.R: instance Data.Profunctor.Unsafe.Profunctor Data.Fold.R.R
+ Data.Fold.R: instance GHC.Base.Applicative (Data.Fold.R.R a)
+ Data.Fold.R: instance GHC.Base.Functor (Data.Fold.R.R a)
+ Data.Fold.R: instance GHC.Base.Monad (Data.Fold.R.R a)
+ Data.Fold.R1: instance Control.Arrow.Arrow Data.Fold.R1.R1
+ Data.Fold.R1: instance Control.Arrow.ArrowChoice Data.Fold.R1.R1
+ Data.Fold.R1: instance Control.Category.Category Data.Fold.R1.R1
+ Data.Fold.R1: instance Control.Monad.Fix.MonadFix (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Control.Monad.Reader.Class.MonadReader (Data.List.NonEmpty.NonEmpty a) (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Control.Monad.Zip.MonadZip (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Data.Distributive.Distributive (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Data.Fold.Class.Scan Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Functor.Bind.Class.Apply (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Data.Functor.Rep.Representable (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Data.Pointed.Pointed (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance Data.Profunctor.Choice Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Profunctor.Closed.Closed Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Profunctor.Costrong Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Profunctor.Rep.Corepresentable Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Profunctor.Sieve.Cosieve Data.Fold.R1.R1 Data.List.NonEmpty.NonEmpty
+ Data.Fold.R1: instance Data.Profunctor.Strong Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Profunctor.Unsafe.Profunctor Data.Fold.R1.R1
+ Data.Fold.R1: instance Data.Semigroupoid.Semigroupoid Data.Fold.R1.R1
+ Data.Fold.R1: instance GHC.Base.Applicative (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance GHC.Base.Functor (Data.Fold.R1.R1 a)
+ Data.Fold.R1: instance GHC.Base.Monad (Data.Fold.R1.R1 a)

Files

.travis.yml view
@@ -1,19 +1,108 @@-language: haskell-before_install:-  # Uncomment whenever hackage is down.-  # - mkdir -p ~/.cabal && cp travis/config ~/.cabal/config && cabal update-  - cabal update+# This file has been generated -- see https://github.com/hvr/multi-ghc-travis+language: c+sudo: false -  # Try installing some of the build-deps with apt-get for speed.-  - travis/cabal-apt-install --enable-tests+cache:+  directories:+    - $HOME/.cabsnap+    - $HOME/.cabal/packages+    - $HOME/.stack +before_cache:+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar++matrix:+  include:+    - env: CABALVER=1.16 GHCVER=7.6.3 BUILD=cabal+      compiler: ": #GHC 7.6.3"+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.6.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}++    - env: CABALVER=1.18 GHCVER=7.8.4 BUILD=cabal+      compiler: ": #GHC 7.8.4"+      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}++    - env: CABALVER=1.22 GHCVER=7.10.1 BUILD=cabal+      compiler: ": #GHC 7.10.1"+      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.1,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}++    - env: CABALVER=1.22 GHCVER=7.10.2 BUILD=cabal+      compiler: ": #GHC 7.10.2"+      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}++    - env: BUILD=stack STACK_YAML=stack-7.10.yaml STACK_OPTIONS=--skip-ghc-check+      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}++    - env: BUILD=stack STACK_YAML=stack-7.10.yaml+      os: osx+++before_install:+ - unset CC+ - case "$BUILD" in+     stack)+       export STACK_VERSION=0.1.3.0;+       export PATH=~/bin:$PATH;+       mkdir -p ~/bin;+       travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v$STACK_VERSION/stack-$STACK_VERSION-x86_64-$TRAVIS_OS_NAME.gz | gunzip > ~/bin/stack;+       chmod a+x ~/bin/stack;+       scripts/travis_long stack --no-terminal setup;;+     cabal)+       export HAPPYVER=1.19.5+       export ALEXVER=3.1.4+       export PATH=~/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/happy/$HAPPYVER/bin:/opt/alex/$ALEXVER/bin:$PATH;;+   esac install:-  - cabal configure --enable-tests-  - cabal build-  - cabal install+ - case "$BUILD" in+     stack)+       scripts/travis_long stack --no-terminal $STACK_OPTIONS build --only-snapshot -j2;;+     cabal)+       echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"+       cabal --version;+       if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];+       then+         zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >+              $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;+       fi;+       travis_retry cabal update;+       cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt;+       sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt;+       if diff -u installplan.txt $HOME/.cabsnap/installplan.txt; then+         echo "cabal build-cache HIT";+         rm -rfv .ghc;+         cp -a $HOME/.cabsnap/ghc $HOME/.ghc;+         cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;+       else+         echo "cabal build-cache MISS";+         rm -rf $HOME/.cabsnap;+         mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;+         cabal install --only-dependencies --enable-tests --enable-benchmarks;+         if [ "$GHCVER" = "7.10.1" ]; then cabal install Cabal-1.22.4.0; fi;+       fi;+       if [ ! -d $HOME/.cabsnap ]; then+         echo "snapshotting package-db to build-cache";+         mkdir $HOME/.cabsnap;+         cp -a $HOME/.ghc $HOME/.cabsnap/ghc;+         cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;+       fi;;+   esac +# snapshot package-db on cache miss++# Here starts the actual work to be performed for the package under test;+# any command which exits with a non-zero exit code causes the build to fail. script:-  - cabal test --show-details=always+ - case "$BUILD" in+     stack)+       scripts/travis_long stack --no-terminal $STACK_OPTIONS build -j2;;+     cabal)+       cabal configure --enable-tests -v2;+       cabal build;+       cabal test;+       cabal bench || true;+       cabal sdist || true;+       SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz && (cd dist && cabal install --force-reinstalls "$SRC_TGZ");;+   esac  notifications:   irc:@@ -21,4 +110,5 @@       - "irc.freenode.org#haskell-lens"     skip_join: true     template:-      - "\x0313folds\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"+      - "\x0313folds\x0f/\x0306%{branch}\x0f \x0314%{commit}\x0f %{message} \x0302\x1f%{build_url}\x0f"+# EOF
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+0.7+-----+* Folds are closed, corepresentable profunctors. This observation supplies us with many additional useful instances.+ 0.6.3 ------- * `reflection` 2 support
README.markdown view
@@ -1,7 +1,7 @@ folds ====== -[![Build Status](https://secure.travis-ci.org/ekmett/folds.png?branch=master)](http://travis-ci.org/ekmett/folds)+[![Hackage](https://img.shields.io/hackage/v/folds.svg)](https://hackage.haskell.org/package/folds) [![Build Status](https://secure.travis-ci.org/ekmett/folds.png?branch=master)](http://travis-ci.org/ekmett/folds)  A playground for working with different kinds of comonadic folds. 
folds.cabal view
@@ -1,6 +1,6 @@ name:          folds category:      Data, Comonads, Enumerator-version:       0.6.3+version:       0.7 license:       BSD3 cabal-version: >= 1.8 license-file:  LICENSE@@ -50,17 +50,29 @@  library   build-depends:+    adjunctions       >= 4.2   && < 5,     base              >= 4     && < 5,+    bifunctors        >= 4     && < 6,     comonad           >= 4     && < 5,+    constraints       >= 0.4   && < 1,     contravariant     >= 0.4.2 && < 2,+    data-reify        >= 0.6   && < 0.7,+    distributive      >= 0.3   && < 1,     lens              >= 4     && < 5,+    mtl               >= 2.2   && < 2.3,     pointed           >= 4     && < 5,-    profunctors       >= 4     && < 6,+    profunctors       >= 5     && < 6,     reflection        >= 1.3   && < 3,     semigroupoids     >= 4     && < 6,-    tagged            >= 0.7   && < 1,     transformers      >= 0.3   && < 0.5,-    vector            >= 0.10  && < 0.11+    unordered-containers >= 0.2 && < 0.3,+    vector            >= 0.10  && < 0.12++  if impl(ghc < 7.8)+    build-depends: tagged >= 0.7 && < 1++  if impl(ghc < 7.11)+    build-depends: semigroups >= 0.8 && < 1    hs-source-dirs: src 
src/Data/Fold/Internal.hs view
@@ -1,8 +1,15 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UndecidableInstances #-} module Data.Fold.Internal   ( SnocList(..)   , SnocList1(..)@@ -10,25 +17,44 @@   , Maybe'(..), maybe'   , Pair'(..)   , N(..)+  , S(..)   , Tree(..)   , Tree1(..)   , An(..)   , Box(..)+  , FreeMonoid(..)+  , foldDeRef+  , FreeSemigroup(..)+  , foldDeRef1   ) where  #if __GLASGOW_HASKELL__ < 710 import Control.Applicative #endif+import Control.Monad.Fix+import Data.Bifunctor+import Data.Bifoldable+import Data.Bitraversable+import Data.Constraint import Data.Data (Data, Typeable)+import Data.Semigroup hiding (Last, First) #if __GLASGOW_HASKELL__ < 710 import Data.Foldable-import Data.Monoid hiding (First, Last) #endif+import Data.Functor.Bind+import Data.HashMap.Lazy as HM+import Data.Profunctor.Unsafe import Data.Proxy (Proxy(Proxy)) import Data.Reflection+import Data.Reify+import Data.Semigroup.Foldable+import Data.Semigroup.Bifoldable+import Data.Semigroup.Bitraversable+ #if __GLASGOW_HASKELL__ < 710 import Data.Traversable #endif+import System.IO.Unsafe  -- | Reversed '[]' data SnocList a = Snoc (SnocList a) a | Nil@@ -79,8 +105,6 @@   traverse f (First a) = First <$> f a   {-# INLINABLE traverse #-} -- -- | Strict 'Maybe' data Maybe' a = Nothing' | Just' !a   deriving (Eq,Ord,Show,Read,Typeable,Data)@@ -126,6 +150,13 @@   traverse f (One a) = One <$> f a   traverse f (Two a b) = Two <$> traverse f a <*> traverse f b +-- | A reified 'Semigroup'.+newtype S a s = S { runS :: a }+  deriving (Eq,Ord,Show,Read,Typeable,Data)++instance Reifies s (a -> a -> a) => Semigroup (S a s) where+  S a <> S b = S $ reflect (Proxy :: Proxy s) a b+ -- | Strict Pair data Pair' a b = Pair' !a !b deriving (Eq,Ord,Show,Read,Typeable,Data) @@ -197,3 +228,88 @@ instance Traversable Tree1 where   traverse f (Bin1 as bs) = Bin1 <$> traverse f as <*> traverse f bs   traverse f (Tip1 a) = Tip1 <$> f a++newtype FreeMonoid a = FreeMonoid { runFreeMonoid :: forall m. Monoid m => (a -> m) -> m } deriving Functor++instance Foldable FreeMonoid where+  foldMap f m = runFreeMonoid m f++newtype FreeSemigroup a = FreeSemigroup { runFreeSemigroup :: forall m. Semigroup m => (a -> m) -> m } deriving Functor++instance Foldable FreeSemigroup where+  foldMap f (FreeSemigroup m) = unwrapMonoid $ m (WrapMonoid #. f)++instance Foldable1 FreeSemigroup where+  foldMap1 f (FreeSemigroup m) = m f++data T a b = T0 | T1 a | T2 b b deriving (Functor, Foldable, Traversable)++instance MuRef (Tree a) where+  type DeRef (Tree a) = T a+  mapDeRef _ Zero    = pure T0+  mapDeRef _ (One a) = pure (T1 a)+  mapDeRef f (Two x y) = T2 <$> f x <*> f y++class MuRef1 (f :: * -> *) where+  type DeRef1 f :: * -> * -> *+  muRef1 :: proxy (f a) -> Dict (MuRef (f a), DeRef (f a) ~ DeRef1 f a)++foldDeRef :: forall f a. (MuRef1 f, Bifoldable (DeRef1 f)) => f a -> FreeMonoid a+foldDeRef m = case muRef1 (undefined :: Proxy (f a)) of+  Dict -> case unsafePerformIO (reifyGraph m) of+    Graph xs i | hm <- HM.fromList xs -> FreeMonoid $ \ f -> fix (\mm -> fmap (bifoldMap f (mm !)) hm) ! i++instance MuRef1 Tree where+  type DeRef1 Tree = T+  muRef1 _ = Dict++instance Bifunctor T where+  bimap _ _ T0 = T0+  bimap f _ (T1 a) = T1 (f a)+  bimap _ g (T2 b c) = T2 (g b) (g c)++instance Bifoldable T where+  bifoldMap _ _ T0 = mempty+  bifoldMap f _ (T1 a) = f a+  bifoldMap _ g (T2 b c) = g b `mappend` g c++instance Bitraversable T where+  bitraverse _ _ T0 = pure T0+  bitraverse f _ (T1 a) = T1 <$> f a+  bitraverse _ g (T2 b c) = T2 <$> g b <*> g c++data T1 a b = A a | B b b deriving (Functor, Foldable, Traversable)++instance MuRef (Tree1 a) where+  type DeRef (Tree1 a) = T1 a+  mapDeRef _ (Tip1 a) = pure (A a)+  mapDeRef f (Bin1 b c) = B <$> f b <*> f c++instance MuRef1 Tree1 where+  type DeRef1 Tree1 = T1+  muRef1 _ = Dict++instance Bifunctor T1 where+  bimap f _ (A a) = A (f a)+  bimap _ g (B b c) = B (g b) (g c)++instance Bifoldable T1 where+  bifoldMap f _ (A a) = f a+  bifoldMap _ g (B b c) = g b `mappend` g c++instance Bitraversable T1 where+  bitraverse f _ (A a) = A <$> f a+  bitraverse _ g (B b c) = B <$> g b <*> g c++foldDeRef1 :: forall f a. (MuRef1 f, Bifoldable1 (DeRef1 f)) => f a -> FreeSemigroup a+foldDeRef1 m = case muRef1 (undefined :: Proxy (f a)) of+  Dict -> case unsafePerformIO (reifyGraph m) of+    Graph xs i | hm <- HM.fromList xs -> FreeSemigroup $ \ f -> fix (\mm -> fmap (bifoldMap1 f (mm !)) hm) ! i++instance Bifoldable1 T1 where+  bifoldMap1 f _ (A a) = f a+  bifoldMap1 _ g (B b c) = g b <> g c++instance Bitraversable1 T1 where+  bitraverse1 f _ (A a) = A <$> f a+  bitraverse1 _ g (B b c) = B <$> g b <.> g c
src/Data/Fold/L'.hs view
@@ -1,7 +1,9 @@ {-# LANGUAGE Trustworthy #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ExistentialQuantification #-} module Data.Fold.L'@@ -12,12 +14,20 @@ import Control.Applicative import Control.Comonad import Control.Lens+import Control.Monad.Reader.Class+import Control.Monad.Fix import Control.Monad.Zip+import Data.Distributive import Data.Foldable import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Extend import Data.Functor.Bind+import Data.Functor.Rep as Functor+import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Rep as Profunctor+import Data.Profunctor.Sieve import Data.Profunctor.Unsafe import Unsafe.Coerce import Prelude hiding (foldl)@@ -164,3 +174,37 @@    _ @> m = m   {-# INLINE (@>) #-}++instance Distributive (L' a) where+  distribute = L' (fmap extract) (\fm a -> fmap (prefix1 a) fm)+  {-# INLINE distribute #-}++instance Functor.Representable (L' a) where+  type Rep (L' a) = [a]+  index = cosieve+  tabulate = cotabulate++instance Costrong L' where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance Closed L' where+  closed (L' k h z) = L' (\f x -> k (f x)) (liftA2 h) (pure z)++instance Profunctor.Corepresentable L' where+  type Corep L' = []+  cotabulate f = L' (f . reverse) (flip (:)) []+  {-# INLINE cotabulate #-}++instance Cosieve L' [] where+  cosieve (L' k0 h0 z0) as0 = go k0 h0 z0 as0 where+    go k _ z [] = k z+    go k h z (a:as) = go k h (h z a) as+  {-# INLINE cosieve #-}++instance MonadReader [a] (L' a) where+  ask = askRep+  local = localRep++instance MonadFix (L' a) where+  mfix = mfixRep
src/Data/Fold/L.hs view
@@ -2,8 +2,10 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE TypeFamilies #-} module Data.Fold.L   ( L(..)   , unfoldL@@ -12,12 +14,20 @@ import Control.Applicative import Control.Comonad import Control.Lens+import Control.Monad.Reader.Class+import Control.Monad.Fix import Control.Monad.Zip+import Data.Distributive import Data.Foldable import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Extend import Data.Functor.Bind+import Data.Functor.Rep as Functor+import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Sieve+import Data.Profunctor.Rep as Profunctor import Data.Profunctor.Unsafe import Unsafe.Coerce import Prelude hiding (foldl)@@ -169,3 +179,37 @@    _ @> m = m   {-# INLINE (@>) #-}++instance Distributive (L a) where+  distribute = L (fmap extract) (\fm a -> fmap (prefix1 a) fm)+  {-# INLINE distribute #-}++instance Functor.Representable (L a) where+  type Rep (L a) = [a]+  index = cosieve+  tabulate = cotabulate++instance MonadReader [a] (L a) where+  ask = askRep+  local = localRep++instance Costrong L where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance Cosieve L [] where+  cosieve (L k0 h0 z0) as0 = go k0 h0 z0 as0 where+    go k _ z [] = k z+    go k h z (a:as) = go k h (h z a) as+  {-# INLINE cosieve #-}++instance Closed L where+  closed (L k h z) = L (\f x -> k (f x)) (liftA2 h) (pure z)++instance Profunctor.Corepresentable L where+  type Corep L = []+  cotabulate f = L (f . reverse) (flip (:)) []+  {-# INLINE cotabulate #-}++instance MonadFix (L a) where+  mfix = mfixRep
src/Data/Fold/L1'.hs view
@@ -1,5 +1,6 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE Trustworthy #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ExistentialQuantification #-} module Data.Fold.L1'   ( L1'(..)@@ -8,12 +9,20 @@ import Control.Applicative import Control.Arrow import Control.Category+import Control.Monad.Fix+import Control.Monad.Reader.Class import Control.Lens+import Data.Distributive import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Apply+import Data.Functor.Rep as Functor+import Data.List.NonEmpty as NonEmpty import Data.Pointed import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Rep as Profunctor+import Data.Profunctor.Sieve import Data.Profunctor.Unsafe import Data.Semigroupoid import Prelude hiding (id,(.))@@ -147,3 +156,33 @@   go (First a) = z a   go (Snoc1 as a) = h (go as) a {-# INLINE walk #-}++instance Cosieve L1' NonEmpty where+  cosieve (L1' k h z) (a :| as) = k (foldl h (z a) as) where++instance Costrong L1' where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance Profunctor.Corepresentable L1' where+  type Corep L1' = NonEmpty+  cotabulate f = L1' (f . NonEmpty.fromList . Prelude.reverse) (flip (:)) pure+  {-# INLINE cotabulate #-}++instance Distributive (L1' a) where+  distribute = distributeRep++instance Functor.Representable (L1' a) where+  type Rep (L1' a) = NonEmpty a+  tabulate = cotabulate+  index = cosieve++instance Closed L1' where+  closed (L1' k h z) = L1' (\f x -> k (f x)) (liftA2 h) (fmap z)++instance MonadReader (NonEmpty a) (L1' a) where+  ask = askRep+  local = localRep++instance MonadFix (L1' a) where+  mfix = mfixRep
src/Data/Fold/L1.hs view
@@ -1,5 +1,7 @@ {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE Trustworthy #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-} module Data.Fold.L1   ( L1(..)   ) where@@ -8,12 +10,20 @@ import Control.Arrow import Control.Category import Control.Lens+import Control.Monad.Fix+import Control.Monad.Reader.Class import Control.Monad.Zip+import Data.Distributive import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Apply+import Data.Functor.Rep as Functor+import Data.List.NonEmpty as NonEmpty import Data.Pointed import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Rep as Profunctor+import Data.Profunctor.Sieve import Data.Profunctor.Unsafe import Data.Semigroupoid import Prelude hiding (id,(.))@@ -151,3 +161,33 @@   go (First a) = z a   go (Snoc1 as a) = h (go as) a {-# INLINE walk #-}++instance Cosieve L1 NonEmpty where+  cosieve (L1 k h z) (a :| as) = k (foldl h (z a) as) where++instance Costrong L1 where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance Profunctor.Corepresentable L1 where+  type Corep L1 = NonEmpty+  cotabulate f = L1 (f . NonEmpty.fromList . Prelude.reverse) (flip (:)) pure+  {-# INLINE cotabulate #-}++instance Distributive (L1 a) where+  distribute = distributeRep++instance Functor.Representable (L1 a) where+  type Rep (L1 a) = NonEmpty a+  tabulate = cotabulate+  index = cosieve++instance Closed L1 where+  closed (L1 k h z) = L1 (\f x -> k (f x)) (liftA2 h) (fmap z)++instance MonadReader (NonEmpty a) (L1 a) where+  ask = askRep+  local = localRep++instance MonadFix (L1 a) where+  mfix = mfixRep
src/Data/Fold/M.hs view
@@ -1,8 +1,11 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE Rank2Types #-} {-# LANGUAGE Trustworthy #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ExistentialQuantification #-} -- | -- Unlike 'Data.Fold.L' and 'Data.Fold.R' this 'Comonad'@@ -15,12 +18,20 @@ import Control.Applicative import Control.Comonad import Control.Lens+import Control.Monad.Fix+import Control.Monad.Reader.Class import Control.Monad.Zip+import Data.Distributive import Data.Fold.Class import Data.Fold.Internal import Data.Foldable hiding (sum, product)-import Data.Functor.Extend import Data.Functor.Bind+import Data.Functor.Extend+import Data.Functor.Rep as Functor+import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Rep as Profunctor+import Data.Profunctor.Sieve import Data.Profunctor.Unsafe import Data.Proxy import Data.Reflection@@ -137,6 +148,7 @@   return = pure   {-# INLINE return #-} +  -- TODO: exploit observable sharing?   m >>= f = M (\xs a -> run xs (f a)) One Two Zero <*> m   {-# INLINE (>>=) #-} @@ -173,3 +185,33 @@    _ @> m = m   {-# INLINE (@>) #-}++instance Distributive (M a) where+  distribute fm = M (\t -> let g = foldDeRef t in run g <$> fm) One Two Zero+  {-# INLINE distribute #-}++instance Closed M where+  closed (M k h m z) = M (\f x -> k (f x)) (fmap h) (liftA2 m) (pure z)++instance Cosieve M FreeMonoid where+  cosieve = flip run++instance Profunctor.Corepresentable M where+  type Corep M = FreeMonoid+  cotabulate f = M (f . foldDeRef) One Two Zero++instance MonadReader (FreeMonoid a) (M a) where+  ask = askRep+  local = localRep++instance Functor.Representable (M a) where+  type Rep (M a) = FreeMonoid a+  tabulate = cotabulate+  index = cosieve++instance Costrong M where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance MonadFix (M a) where+  mfix = mfixRep
src/Data/Fold/M1.hs view
@@ -1,20 +1,34 @@ {-# LANGUAGE Trustworthy #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ExistentialQuantification #-} module Data.Fold.M1   ( M1(..)+  , runM1   ) where  import Control.Applicative import Control.Arrow import Control.Category import Control.Lens+import Control.Monad.Fix+import Control.Monad.Reader.Class import Control.Monad.Zip+import Data.Distributive import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Apply+import Data.Functor.Rep as Functor import Data.Pointed import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Sieve+import Data.Profunctor.Rep as Profunctor import Data.Profunctor.Unsafe+import Data.Proxy+import Data.Reflection+import Data.Semigroup.Foldable import Data.Semigroupoid import Prelude hiding (id,(.)) import Unsafe.Coerce@@ -154,3 +168,36 @@   go (Tip1 a) = h a   go (Bin1 xs ys) = m (go xs) (go ys) {-# INLINE walk #-}++runM1 :: Foldable1 f => f a -> M1 a b -> b+runM1 p (M1 k h (m :: m -> m -> m)) = reify m $ \ (_ :: Proxy s) -> k $ runS (foldMap1 (S #. h) p :: S m s)++instance Closed M1 where+  closed (M1 k h m) = M1 (\f x -> k (f x)) (fmap h) (liftA2 m)++instance Distributive (M1 a) where+  distribute fm = M1 (\t -> let g = foldDeRef1 t in runM1 g <$> fm) Tip1 Bin1+  {-# INLINE distribute #-}++instance Cosieve M1 FreeSemigroup where+  cosieve = flip runM1++instance Profunctor.Corepresentable M1 where+  type Corep M1 = FreeSemigroup+  cotabulate f = M1 (f . foldDeRef1) Tip1 Bin1++instance Functor.Representable (M1 a) where+  type Rep (M1 a) = FreeSemigroup a+  tabulate = cotabulate+  index = cosieve++instance Costrong M1 where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance MonadReader (FreeSemigroup a) (M1 a) where+  ask = askRep+  local = localRep++instance MonadFix (M1 a) where+  mfix = mfixRep
src/Data/Fold/R.hs view
@@ -4,6 +4,8 @@ {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-} module Data.Fold.R   ( R(..)   ) where@@ -11,12 +13,20 @@ import Control.Applicative import Control.Comonad import Control.Lens+import Control.Monad.Fix+import Control.Monad.Reader.Class import Control.Monad.Zip+import Data.Distributive import Data.Foldable hiding (sum, product) import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Extend import Data.Functor.Bind+import Data.Functor.Rep as Functor+import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Rep as Profunctor+import Data.Profunctor.Sieve import Data.Profunctor.Unsafe import Unsafe.Coerce import Prelude hiding (foldr, sum, product, length)@@ -155,3 +165,37 @@    _ @> m = m   {-# INLINE (@>) #-}++instance Distributive (R a) where+  distribute = R (fmap extract) (fmap . prefix1)+  {-# INLINE distribute #-}++instance Functor.Representable (R a) where+  type Rep (R a) = [a]+  index = cosieve+  tabulate = cotabulate++instance Costrong R where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance Profunctor.Corepresentable R where+  type Corep R = []+  cotabulate f = R (f . reverse) (:) []+  {-# INLINE cotabulate #-}++instance Cosieve R [] where+  cosieve (R k0 h0 z0) as0 = go k0 h0 z0 as0 where+    go k _ z [] = k z+    go k h z (a:as) = go k h (h a z) as+  {-# INLINE cosieve #-}++instance MonadReader [a] (R a) where+  ask = askRep+  local = localRep++instance Closed R where+  closed (R k h z) = R (\f x -> k (f x)) (liftA2 h) (pure z)++instance MonadFix (R a) where+  mfix = mfixRep
src/Data/Fold/R1.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE Trustworthy #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ExistentialQuantification #-} module Data.Fold.R1   ( R1(..)@@ -8,12 +10,20 @@ import Control.Arrow import Control.Category import Control.Lens+import Control.Monad.Fix+import Control.Monad.Reader.Class import Control.Monad.Zip+import Data.Distributive import Data.Fold.Class import Data.Fold.Internal import Data.Functor.Apply+import Data.Functor.Rep as Functor+import Data.List.NonEmpty as NonEmpty import Data.Pointed import Data.Profunctor+import Data.Profunctor.Closed+import Data.Profunctor.Rep as Profunctor+import Data.Profunctor.Sieve import Data.Profunctor.Unsafe import Data.Semigroupoid import Prelude hiding (id,(.))@@ -151,3 +161,38 @@   go (Last a) = z a   go (Cons1 a as) = h a (go as) {-# INLINE walk #-}++instance Closed R1 where+  closed (R1 k h z) = R1 (\f x -> k (f x)) (liftA2 h) (fmap z)++instance Cosieve R1 NonEmpty where+  cosieve (R1 k h z) l = k (cata h z l)++cata :: (a -> c -> c) -> (a -> c) -> NonEmpty a -> c+cata f0 z0 (a0 :| as0) = go f0 z0 a0 as0 where+  go _ z a [] = z a+  go f z a (b:bs) = f a (go f z b bs)++instance Costrong R1 where+  unfirst = unfirstCorep+  unsecond = unsecondCorep++instance Profunctor.Corepresentable R1 where+  type Corep R1 = NonEmpty+  cotabulate f = R1 (f . NonEmpty.fromList . Prelude.reverse) (:) pure+  {-# INLINE cotabulate #-}++instance Distributive (R1 a) where+  distribute = distributeRep++instance Functor.Representable (R1 a) where+  type Rep (R1 a) = NonEmpty a+  tabulate = cotabulate+  index = cosieve++instance MonadReader (NonEmpty a) (R1 a) where+  ask = askRep+  local = localRep++instance MonadFix (R1 a) where+  mfix = mfixRep