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 +102/−12
- CHANGELOG.markdown +4/−0
- README.markdown +1/−1
- folds.cabal +16/−4
- src/Data/Fold/Internal.hs +121/−5
- src/Data/Fold/L'.hs +44/−0
- src/Data/Fold/L.hs +44/−0
- src/Data/Fold/L1'.hs +40/−1
- src/Data/Fold/L1.hs +40/−0
- src/Data/Fold/M.hs +45/−3
- src/Data/Fold/M1.hs +47/−0
- src/Data/Fold/R.hs +44/−0
- src/Data/Fold/R1.hs +45/−0
.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 ====== -[](http://travis-ci.org/ekmett/folds)+[](https://hackage.haskell.org/package/folds) [](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