-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Beautiful Folding -- -- This package is a playground full of comonadic folds. -- -- This style of fold is documented in "Cellular Automata, Part II: -- PNGs and Moore" -- -- This package can be seen as what happens if you chase Max Rabkin's -- "Beautiful Folding" to its logical conclusion. -- -- More information on this approach can be found in the "Another -- lovely example of type class morphisms" and "More beautiful -- fold zipping" posts by Conal Elliott, as well as in Gabriel -- Gonzales' "Composable Streaming Folds" @package folds @version 0.7 module Data.Fold.Internal -- | Reversed '[]' data SnocList a Snoc :: (SnocList a) -> a -> SnocList a Nil :: SnocList a data SnocList1 a Snoc1 :: (SnocList1 a) -> a -> SnocList1 a First :: a -> SnocList1 a data List1 a Cons1 :: a -> (List1 a) -> List1 a Last :: a -> List1 a -- | Strict Maybe data Maybe' a Nothing' :: Maybe' a Just' :: !a -> Maybe' a maybe' :: b -> (a -> b) -> Maybe' a -> b -- | Strict Pair data Pair' a b Pair' :: !a -> !b -> Pair' a b -- | A reified Monoid. newtype N a s N :: a -> N a s [runN] :: N a s -> a -- | A reified Semigroup. newtype S a s S :: a -> S a s [runS] :: S a s -> a -- | The shape of a foldMap data Tree a Zero :: Tree a One :: a -> Tree a Two :: (Tree a) -> (Tree a) -> Tree a data Tree1 a Bin1 :: (Tree1 a) -> (Tree1 a) -> Tree1 a Tip1 :: a -> Tree1 a newtype An a An :: a -> An a data Box a Box :: a -> Box a newtype FreeMonoid a FreeMonoid :: (forall m. Monoid m => (a -> m) -> m) -> FreeMonoid a [runFreeMonoid] :: FreeMonoid a -> forall m. Monoid m => (a -> m) -> m foldDeRef :: (MuRef1 f, Bifoldable (DeRef1 f)) => f a -> FreeMonoid a newtype FreeSemigroup a FreeSemigroup :: (forall m. Semigroup m => (a -> m) -> m) -> FreeSemigroup a [runFreeSemigroup] :: FreeSemigroup a -> forall m. Semigroup m => (a -> m) -> m foldDeRef1 :: (MuRef1 f, Bifoldable1 (DeRef1 f)) => f a -> FreeSemigroup a instance Data.Traversable.Traversable (Data.Fold.Internal.T1 a) instance Data.Foldable.Foldable (Data.Fold.Internal.T1 a) instance GHC.Base.Functor (Data.Fold.Internal.T1 a) instance Data.Traversable.Traversable (Data.Fold.Internal.T a) instance Data.Foldable.Foldable (Data.Fold.Internal.T a) instance GHC.Base.Functor (Data.Fold.Internal.T a) instance GHC.Base.Functor Data.Fold.Internal.FreeSemigroup instance GHC.Base.Functor Data.Fold.Internal.FreeMonoid instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.Box a) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.Box a) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.Box a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.Box a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.Box a) instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.An a) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.An a) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.An a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.An a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.An a) instance (Data.Data.Data a, Data.Data.Data b) => Data.Data.Data (Data.Fold.Internal.Pair' a b) instance (GHC.Read.Read a, GHC.Read.Read b) => GHC.Read.Read (Data.Fold.Internal.Pair' a b) instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Data.Fold.Internal.Pair' a b) instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Data.Fold.Internal.Pair' a b) instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Data.Fold.Internal.Pair' a b) instance (Data.Data.Data a, Data.Data.Data s) => Data.Data.Data (Data.Fold.Internal.S a s) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.S a s) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.S a s) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.S a s) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.S a s) instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.Tree a) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.Tree a) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.Tree a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.Tree a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.Tree a) instance (Data.Data.Data a, Data.Data.Data s) => Data.Data.Data (Data.Fold.Internal.N a s) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.N a s) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.N a s) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.N a s) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.N a s) instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.Maybe' a) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.Maybe' a) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.Maybe' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.Maybe' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.Maybe' a) instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.SnocList1 a) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.SnocList1 a) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.SnocList1 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.SnocList1 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.SnocList1 a) instance Data.Data.Data a => Data.Data.Data (Data.Fold.Internal.SnocList a) instance GHC.Read.Read a => GHC.Read.Read (Data.Fold.Internal.SnocList a) instance GHC.Show.Show a => GHC.Show.Show (Data.Fold.Internal.SnocList a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Fold.Internal.SnocList a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Fold.Internal.SnocList a) instance GHC.Base.Functor Data.Fold.Internal.SnocList instance Data.Foldable.Foldable Data.Fold.Internal.SnocList instance Data.Traversable.Traversable Data.Fold.Internal.SnocList instance GHC.Base.Functor Data.Fold.Internal.SnocList1 instance Data.Foldable.Foldable Data.Fold.Internal.SnocList1 instance Data.Traversable.Traversable Data.Fold.Internal.SnocList1 instance Data.Foldable.Foldable Data.Fold.Internal.Maybe' instance Data.Reflection.Reifies s (a -> a -> a, a) => GHC.Base.Monoid (Data.Fold.Internal.N a s) instance GHC.Base.Functor Data.Fold.Internal.Tree instance Data.Foldable.Foldable Data.Fold.Internal.Tree instance Data.Traversable.Traversable Data.Fold.Internal.Tree instance Data.Reflection.Reifies s (a -> a -> a) => Data.Semigroup.Semigroup (Data.Fold.Internal.S a s) instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Monoid (Data.Fold.Internal.Pair' a b) instance GHC.Base.Functor Data.Fold.Internal.An instance Data.Foldable.Foldable Data.Fold.Internal.An instance Data.Traversable.Traversable Data.Fold.Internal.An instance GHC.Base.Functor Data.Fold.Internal.Box instance Data.Foldable.Foldable Data.Fold.Internal.Box instance Data.Traversable.Traversable Data.Fold.Internal.Box instance GHC.Base.Functor Data.Fold.Internal.List1 instance Data.Foldable.Foldable Data.Fold.Internal.List1 instance Data.Traversable.Traversable Data.Fold.Internal.List1 instance GHC.Base.Functor Data.Fold.Internal.Tree1 instance Data.Foldable.Foldable Data.Fold.Internal.Tree1 instance Data.Traversable.Traversable Data.Fold.Internal.Tree1 instance Data.Foldable.Foldable Data.Fold.Internal.FreeMonoid instance Data.Foldable.Foldable Data.Fold.Internal.FreeSemigroup instance Data.Semigroup.Foldable.Class.Foldable1 Data.Fold.Internal.FreeSemigroup instance Data.Reify.MuRef (Data.Fold.Internal.Tree a) instance Data.Fold.Internal.MuRef1 Data.Fold.Internal.Tree instance Data.Bifunctor.Bifunctor Data.Fold.Internal.T instance Data.Bifoldable.Bifoldable Data.Fold.Internal.T instance Data.Bitraversable.Bitraversable Data.Fold.Internal.T instance Data.Reify.MuRef (Data.Fold.Internal.Tree1 a) instance Data.Fold.Internal.MuRef1 Data.Fold.Internal.Tree1 instance Data.Bifunctor.Bifunctor Data.Fold.Internal.T1 instance Data.Bifoldable.Bifoldable Data.Fold.Internal.T1 instance Data.Bitraversable.Bitraversable Data.Fold.Internal.T1 instance Data.Semigroup.Foldable.Class.Bifoldable1 Data.Fold.Internal.T1 instance Data.Semigroup.Traversable.Class.Bitraversable1 Data.Fold.Internal.T1 module Data.Fold.Class class Choice p => Scan p where prefix1 = prefix . An postfix1 p = postfix p . An run1 = run . An prefix1 :: Scan p => a -> p a b -> p a b postfix1 :: Scan p => p a b -> a -> p a b -- | Apply a Folding to a single element of input run1 :: Scan p => a -> p a b -> b interspersing :: Scan p => a -> p a b -> p a b class Scan p => Folding p where prefix = prefixOf folded postfix = postfixOf folded run = runOf folded -- | Partially apply a Folding to some initial input on the left. prefix :: (Folding p, Foldable t) => t a -> p a b -> p a b prefixOf :: Folding p => Fold s a -> s -> p a b -> p a b postfix :: (Folding p, Foldable t) => p a b -> t a -> p a b postfixOf :: Folding p => Fold s a -> p a b -> s -> p a b -- | Apply a Folding to a container full of input: -- --
-- >>> run ["hello","world"] $ L id (++) [] -- "helloworld" ---- --
-- >>> run [1,2,3] $ L id (+) 0 -- 6 --run :: (Folding p, Foldable t) => t a -> p a b -> b runOf :: Folding p => Fold s a -> s -> p a b -> b filtering :: Folding p => (a -> Bool) -> p a b -> p a b -- | Lift a Folding into a Prism. -- -- This acts like a generalized notion of "costrength", when applied to a -- Folding, causing it to return the left-most value that fails to -- match the Prism, or the result of accumulating rewrapped in the -- Prism if everything matches. -- --
-- >>> run [Left 1, Left 2, Left 3] $ beneath _Left $ R id (+) 0 -- Left 6 ---- --
-- >>> run [Left 1, Right 2, Right 3] $ beneath _Left $ R id (+) 0 -- Right 2 ---- --
-- beneath :: Prism s t a b -> p a b -> p s t -- beneath :: Iso s t a b -> p a b -> p s t --beneath :: Profunctor p => Optic p Identity s t a b -> p a b -> p s t module Data.Fold.L -- | A Moore Machine data L a b L :: (r -> b) -> (r -> a -> r) -> r -> L a b -- | Construct a Moore machine from a state valuation and transition -- function unfoldL :: (s -> (b, a -> s)) -> s -> L a b instance Data.Fold.Class.Scan Data.Fold.L.L instance Data.Fold.Class.Folding Data.Fold.L.L instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L.L instance Data.Profunctor.Choice Data.Fold.L.L instance GHC.Base.Functor (Data.Fold.L.L a) instance Control.Comonad.Comonad (Data.Fold.L.L a) instance GHC.Base.Applicative (Data.Fold.L.L a) instance Data.Functor.Bind.Class.Bind (Data.Fold.L.L a) instance GHC.Base.Monad (Data.Fold.L.L a) instance Control.Monad.Zip.MonadZip (Data.Fold.L.L a) instance Data.Functor.Extend.Extend (Data.Fold.L.L a) instance Data.Functor.Bind.Class.Apply (Data.Fold.L.L a) instance Control.Comonad.ComonadApply (Data.Fold.L.L a) instance Data.Distributive.Distributive (Data.Fold.L.L a) instance Data.Functor.Rep.Representable (Data.Fold.L.L a) instance Control.Monad.Reader.Class.MonadReader [a] (Data.Fold.L.L a) instance Data.Profunctor.Costrong Data.Fold.L.L instance Data.Profunctor.Sieve.Cosieve Data.Fold.L.L [] instance Data.Profunctor.Closed.Closed Data.Fold.L.L instance Data.Profunctor.Rep.Corepresentable Data.Fold.L.L instance Control.Monad.Fix.MonadFix (Data.Fold.L.L a) module Data.Fold.L' -- | A strict left fold / strict Moore machine data L' a b L' :: (r -> b) -> (r -> a -> r) -> r -> L' a b -- | Construct a strict Moore machine from a state valuation and transition -- function unfoldL' :: (s -> (b, a -> s)) -> s -> L' a b instance Data.Fold.Class.Scan Data.Fold.L'.L' instance Data.Fold.Class.Folding Data.Fold.L'.L' instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L'.L' instance Data.Profunctor.Choice Data.Fold.L'.L' instance GHC.Base.Functor (Data.Fold.L'.L' a) instance Control.Comonad.Comonad (Data.Fold.L'.L' a) instance GHC.Base.Applicative (Data.Fold.L'.L' a) instance Data.Functor.Bind.Class.Bind (Data.Fold.L'.L' a) instance GHC.Base.Monad (Data.Fold.L'.L' a) instance Control.Monad.Zip.MonadZip (Data.Fold.L'.L' a) instance Data.Functor.Extend.Extend (Data.Fold.L'.L' a) instance Data.Functor.Bind.Class.Apply (Data.Fold.L'.L' a) instance Control.Comonad.ComonadApply (Data.Fold.L'.L' a) instance Data.Distributive.Distributive (Data.Fold.L'.L' a) instance Data.Functor.Rep.Representable (Data.Fold.L'.L' a) instance Data.Profunctor.Costrong Data.Fold.L'.L' instance Data.Profunctor.Closed.Closed Data.Fold.L'.L' instance Data.Profunctor.Rep.Corepresentable Data.Fold.L'.L' instance Data.Profunctor.Sieve.Cosieve Data.Fold.L'.L' [] instance Control.Monad.Reader.Class.MonadReader [a] (Data.Fold.L'.L' a) instance Control.Monad.Fix.MonadFix (Data.Fold.L'.L' a) module Data.Fold.L1 -- | A Mealy Machine data L1 a b L1 :: (c -> b) -> (c -> a -> c) -> (a -> c) -> L1 a b instance Data.Fold.Class.Scan Data.Fold.L1.L1 instance GHC.Base.Functor (Data.Fold.L1.L1 a) instance Data.Pointed.Pointed (Data.Fold.L1.L1 a) instance Data.Functor.Bind.Class.Apply (Data.Fold.L1.L1 a) instance GHC.Base.Applicative (Data.Fold.L1.L1 a) instance GHC.Base.Monad (Data.Fold.L1.L1 a) instance Control.Monad.Zip.MonadZip (Data.Fold.L1.L1 a) instance Data.Semigroupoid.Semigroupoid Data.Fold.L1.L1 instance Control.Category.Category Data.Fold.L1.L1 instance Control.Arrow.Arrow Data.Fold.L1.L1 instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L1.L1 instance Data.Profunctor.Strong Data.Fold.L1.L1 instance Data.Profunctor.Choice Data.Fold.L1.L1 instance Control.Arrow.ArrowChoice Data.Fold.L1.L1 instance Data.Profunctor.Sieve.Cosieve Data.Fold.L1.L1 Data.List.NonEmpty.NonEmpty instance Data.Profunctor.Costrong Data.Fold.L1.L1 instance Data.Profunctor.Rep.Corepresentable Data.Fold.L1.L1 instance Data.Distributive.Distributive (Data.Fold.L1.L1 a) instance Data.Functor.Rep.Representable (Data.Fold.L1.L1 a) instance Data.Profunctor.Closed.Closed Data.Fold.L1.L1 instance Control.Monad.Reader.Class.MonadReader (Data.List.NonEmpty.NonEmpty a) (Data.Fold.L1.L1 a) instance Control.Monad.Fix.MonadFix (Data.Fold.L1.L1 a) module Data.Fold.L1' -- | A strict Mealy Machine data L1' a b L1' :: (c -> b) -> (c -> a -> c) -> (a -> c) -> L1' a b instance Data.Fold.Class.Scan Data.Fold.L1'.L1' instance GHC.Base.Functor (Data.Fold.L1'.L1' a) instance Data.Pointed.Pointed (Data.Fold.L1'.L1' a) instance Data.Functor.Bind.Class.Apply (Data.Fold.L1'.L1' a) instance GHC.Base.Applicative (Data.Fold.L1'.L1' a) instance GHC.Base.Monad (Data.Fold.L1'.L1' a) instance Data.Semigroupoid.Semigroupoid Data.Fold.L1'.L1' instance Control.Category.Category Data.Fold.L1'.L1' instance Control.Arrow.Arrow Data.Fold.L1'.L1' instance Data.Profunctor.Unsafe.Profunctor Data.Fold.L1'.L1' instance Data.Profunctor.Strong Data.Fold.L1'.L1' instance Data.Profunctor.Choice Data.Fold.L1'.L1' instance Control.Arrow.ArrowChoice Data.Fold.L1'.L1' instance Data.Profunctor.Sieve.Cosieve Data.Fold.L1'.L1' Data.List.NonEmpty.NonEmpty instance Data.Profunctor.Costrong Data.Fold.L1'.L1' instance Data.Profunctor.Rep.Corepresentable Data.Fold.L1'.L1' instance Data.Distributive.Distributive (Data.Fold.L1'.L1' a) instance Data.Functor.Rep.Representable (Data.Fold.L1'.L1' a) instance Data.Profunctor.Closed.Closed Data.Fold.L1'.L1' instance Control.Monad.Reader.Class.MonadReader (Data.List.NonEmpty.NonEmpty a) (Data.Fold.L1'.L1' a) instance Control.Monad.Fix.MonadFix (Data.Fold.L1'.L1' a) -- | Unlike L and R this Comonad is based on a -- (->) r Comonad for a Monoid r -- rather than than on the Store r Comonad. module Data.Fold.M -- | A foldMap caught in amber. a.k.a. a monoidal reducer data M a b M :: (m -> b) -> (a -> m) -> (m -> m -> m) -> m -> M a b instance Data.Fold.Class.Scan Data.Fold.M.M instance Data.Fold.Class.Folding Data.Fold.M.M instance Data.Profunctor.Unsafe.Profunctor Data.Fold.M.M instance Data.Profunctor.Choice Data.Fold.M.M instance GHC.Base.Functor (Data.Fold.M.M a) instance Control.Comonad.Comonad (Data.Fold.M.M a) instance GHC.Base.Applicative (Data.Fold.M.M a) instance Data.Functor.Bind.Class.Bind (Data.Fold.M.M a) instance GHC.Base.Monad (Data.Fold.M.M a) instance Control.Monad.Zip.MonadZip (Data.Fold.M.M a) instance Data.Functor.Extend.Extend (Data.Fold.M.M a) instance Data.Functor.Bind.Class.Apply (Data.Fold.M.M a) instance Control.Comonad.ComonadApply (Data.Fold.M.M a) instance Data.Distributive.Distributive (Data.Fold.M.M a) instance Data.Profunctor.Closed.Closed Data.Fold.M.M instance Data.Profunctor.Sieve.Cosieve Data.Fold.M.M Data.Fold.Internal.FreeMonoid instance Data.Profunctor.Rep.Corepresentable Data.Fold.M.M instance Control.Monad.Reader.Class.MonadReader (Data.Fold.Internal.FreeMonoid a) (Data.Fold.M.M a) instance Data.Functor.Rep.Representable (Data.Fold.M.M a) instance Data.Profunctor.Costrong Data.Fold.M.M instance Control.Monad.Fix.MonadFix (Data.Fold.M.M a) module Data.Fold.M1 -- | A semigroup reducer data M1 a b M1 :: (m -> b) -> (a -> m) -> (m -> m -> m) -> M1 a b runM1 :: Foldable1 f => f a -> M1 a b -> b instance Data.Fold.Class.Scan Data.Fold.M1.M1 instance GHC.Base.Functor (Data.Fold.M1.M1 a) instance Data.Pointed.Pointed (Data.Fold.M1.M1 a) instance Data.Functor.Bind.Class.Apply (Data.Fold.M1.M1 a) instance GHC.Base.Applicative (Data.Fold.M1.M1 a) instance GHC.Base.Monad (Data.Fold.M1.M1 a) instance Control.Monad.Zip.MonadZip (Data.Fold.M1.M1 a) instance Data.Semigroupoid.Semigroupoid Data.Fold.M1.M1 instance Control.Category.Category Data.Fold.M1.M1 instance Control.Arrow.Arrow Data.Fold.M1.M1 instance Data.Profunctor.Unsafe.Profunctor Data.Fold.M1.M1 instance Data.Profunctor.Strong Data.Fold.M1.M1 instance Data.Profunctor.Choice Data.Fold.M1.M1 instance Control.Arrow.ArrowChoice Data.Fold.M1.M1 instance Data.Profunctor.Closed.Closed Data.Fold.M1.M1 instance Data.Distributive.Distributive (Data.Fold.M1.M1 a) instance Data.Profunctor.Sieve.Cosieve Data.Fold.M1.M1 Data.Fold.Internal.FreeSemigroup instance Data.Profunctor.Rep.Corepresentable Data.Fold.M1.M1 instance Data.Functor.Rep.Representable (Data.Fold.M1.M1 a) instance Data.Profunctor.Costrong Data.Fold.M1.M1 instance Control.Monad.Reader.Class.MonadReader (Data.Fold.Internal.FreeSemigroup a) (Data.Fold.M1.M1 a) instance Control.Monad.Fix.MonadFix (Data.Fold.M1.M1 a) module Data.Fold.R -- | right folds / a reversed Moore machine data R a b R :: (r -> b) -> (a -> r -> r) -> r -> R a b instance Data.Fold.Class.Scan Data.Fold.R.R instance Data.Fold.Class.Folding Data.Fold.R.R instance Data.Profunctor.Unsafe.Profunctor Data.Fold.R.R instance Data.Profunctor.Choice Data.Fold.R.R instance GHC.Base.Functor (Data.Fold.R.R a) instance Control.Comonad.Comonad (Data.Fold.R.R a) instance Data.Functor.Bind.Class.Bind (Data.Fold.R.R a) instance GHC.Base.Monad (Data.Fold.R.R a) instance Control.Monad.Zip.MonadZip (Data.Fold.R.R a) instance GHC.Base.Applicative (Data.Fold.R.R a) instance Data.Functor.Extend.Extend (Data.Fold.R.R a) instance Data.Functor.Bind.Class.Apply (Data.Fold.R.R a) instance Control.Comonad.ComonadApply (Data.Fold.R.R a) instance Data.Distributive.Distributive (Data.Fold.R.R a) instance Data.Functor.Rep.Representable (Data.Fold.R.R a) instance Data.Profunctor.Costrong Data.Fold.R.R instance Data.Profunctor.Rep.Corepresentable Data.Fold.R.R instance Data.Profunctor.Sieve.Cosieve Data.Fold.R.R [] instance Control.Monad.Reader.Class.MonadReader [a] (Data.Fold.R.R a) instance Data.Profunctor.Closed.Closed Data.Fold.R.R instance Control.Monad.Fix.MonadFix (Data.Fold.R.R a) module Data.Fold.R1 -- | A reversed Mealy machine data R1 a b R1 :: (c -> b) -> (a -> c -> c) -> (a -> c) -> R1 a b instance Data.Fold.Class.Scan Data.Fold.R1.R1 instance GHC.Base.Functor (Data.Fold.R1.R1 a) instance Data.Pointed.Pointed (Data.Fold.R1.R1 a) instance Data.Functor.Bind.Class.Apply (Data.Fold.R1.R1 a) instance GHC.Base.Applicative (Data.Fold.R1.R1 a) instance GHC.Base.Monad (Data.Fold.R1.R1 a) instance Control.Monad.Zip.MonadZip (Data.Fold.R1.R1 a) instance Data.Semigroupoid.Semigroupoid Data.Fold.R1.R1 instance Control.Category.Category Data.Fold.R1.R1 instance Control.Arrow.Arrow Data.Fold.R1.R1 instance Data.Profunctor.Unsafe.Profunctor Data.Fold.R1.R1 instance Data.Profunctor.Strong Data.Fold.R1.R1 instance Data.Profunctor.Choice Data.Fold.R1.R1 instance Control.Arrow.ArrowChoice Data.Fold.R1.R1 instance Data.Profunctor.Closed.Closed Data.Fold.R1.R1 instance Data.Profunctor.Sieve.Cosieve Data.Fold.R1.R1 Data.List.NonEmpty.NonEmpty instance Data.Profunctor.Costrong Data.Fold.R1.R1 instance Data.Profunctor.Rep.Corepresentable Data.Fold.R1.R1 instance Data.Distributive.Distributive (Data.Fold.R1.R1 a) instance Data.Functor.Rep.Representable (Data.Fold.R1.R1 a) instance Control.Monad.Reader.Class.MonadReader (Data.List.NonEmpty.NonEmpty a) (Data.Fold.R1.R1 a) instance Control.Monad.Fix.MonadFix (Data.Fold.R1.R1 a) module Data.Fold class Choice p => Scan p where prefix1 = prefix . An postfix1 p = postfix p . An run1 = run . An prefix1 :: Scan p => a -> p a b -> p a b postfix1 :: Scan p => p a b -> a -> p a b -- | Apply a Folding to a single element of input run1 :: Scan p => a -> p a b -> b interspersing :: Scan p => a -> p a b -> p a b class Scan p => Folding p where prefix = prefixOf folded postfix = postfixOf folded run = runOf folded -- | Partially apply a Folding to some initial input on the left. prefix :: (Folding p, Foldable t) => t a -> p a b -> p a b prefixOf :: Folding p => Fold s a -> s -> p a b -> p a b postfix :: (Folding p, Foldable t) => p a b -> t a -> p a b postfixOf :: Folding p => Fold s a -> p a b -> s -> p a b -- | Apply a Folding to a container full of input: -- --
-- >>> run ["hello","world"] $ L id (++) [] -- "helloworld" ---- --
-- >>> run [1,2,3] $ L id (+) 0 -- 6 --run :: (Folding p, Foldable t) => t a -> p a b -> b runOf :: Folding p => Fold s a -> s -> p a b -> b filtering :: Folding p => (a -> Bool) -> p a b -> p a b -- | Lift a Folding into a Prism. -- -- This acts like a generalized notion of "costrength", when applied to a -- Folding, causing it to return the left-most value that fails to -- match the Prism, or the result of accumulating rewrapped in the -- Prism if everything matches. -- --
-- >>> run [Left 1, Left 2, Left 3] $ beneath _Left $ R id (+) 0 -- Left 6 ---- --
-- >>> run [Left 1, Right 2, Right 3] $ beneath _Left $ R id (+) 0 -- Right 2 ---- --
-- beneath :: Prism s t a b -> p a b -> p s t -- beneath :: Iso s t a b -> p a b -> p s t --beneath :: Profunctor p => Optic p Identity s t a b -> p a b -> p s t -- | A Mealy Machine data L1 a b L1 :: (c -> b) -> (c -> a -> c) -> (a -> c) -> L1 a b -- | A strict Mealy Machine data L1' a b L1' :: (c -> b) -> (c -> a -> c) -> (a -> c) -> L1' a b -- | A semigroup reducer data M1 a b M1 :: (m -> b) -> (a -> m) -> (m -> m -> m) -> M1 a b -- | A reversed Mealy machine data R1 a b R1 :: (c -> b) -> (a -> c -> c) -> (a -> c) -> R1 a b -- | A Moore Machine data L a b L :: (r -> b) -> (r -> a -> r) -> r -> L a b -- | A strict left fold / strict Moore machine data L' a b L' :: (r -> b) -> (r -> a -> r) -> r -> L' a b -- | A foldMap caught in amber. a.k.a. a monoidal reducer data M a b M :: (m -> b) -> (a -> m) -> (m -> m -> m) -> m -> M a b -- | right folds / a reversed Moore machine data R a b R :: (r -> b) -> (a -> r -> r) -> r -> R a b class AsRM1 p where asM1 = asM1 . asR1 asR1 = asR1 . asM1 -- | asM1 is a scan homomorphism to a semigroup reducer asM1 :: AsRM1 p => p a b -> M1 a b -- | asM1 is a scan homomorphism to a right scan asR1 :: AsRM1 p => p a b -> R1 a b class AsRM1 p => AsL1' p where asL1' = asL1' . asL' -- | Scan homomorphism to a strict Mealy machine asL1' :: AsL1' p => p a b -> L1' a b class AsRM1 p => AsRM p where asM = asM . asR asR = asR . asM -- | asM is a folding homomorphism to a monoidal folding -- --
-- run xs (asM φ) ≡ run xs φ -- prefix xs (asM φ) ≡ asM (prefix xs φ) -- prefixOf l xs (asM φ) ≡ asM (prefixOf l xs φ) -- postfix (asM φ) xs ≡ asM (postfix φ xs) -- postfixOf l (asM φ) xs ≡ asM (postfixOf l φ xs) -- left' (asM φ) ≡ asM (left' φ) -- right' (asM φ) ≡ asM (right' φ) -- dimap l r (asM φ) ≡ asM (dimap l r φ) -- extract (asM φ) ≡ extract φ -- pure a ≡ asM (pure a) -- asM φ <*> asM ψ ≡ asM (φ <*> ψ) -- return a ≡ asM (return a) -- asM φ >>= asM . k ≡ asM (φ >>= k) -- filtering p (asM φ) ≡ asM (filtering p φ) -- interspersing a (asM φ) ≡ asM (interspersing a φ) --asM :: AsRM p => p a b -> M a b -- | asR is a folding homomorphism to a right folding -- --
-- run xs (asR φ) ≡ run xs φ -- prefix xs (asR φ) ≡ asR (prefix xs φ) -- prefixOf l xs (asR φ) ≡ asR (prefixOf l xs φ) -- postfix (asR φ) xs ≡ asR (postfix φ xs) -- postfixOf l (asR φ) xs ≡ asR (postfixOf l φ xs) -- left' (asR φ) ≡ asR (left' φ) -- right' (asR φ) ≡ asR (right' φ) -- dimap l r (asR φ) ≡ asR (dimap l r φ) -- extract (asR φ) ≡ extract φ -- pure a ≡ asR (pure a) -- asR φ <*> asR ψ ≡ asR (φ <*> ψ) -- return a ≡ asR (return a) -- asR φ >>= asR . k ≡ asR (φ >>= k) -- filtering p (asR φ) ≡ asR (filtering p φ) -- interspersing a (asR φ) ≡ asR (interspersing a φ) --asR :: AsRM p => p a b -> R a b class (AsRM p, AsL1' p) => AsL' p -- | asL' is a folding homomorphism to a strict left folding -- --
-- run xs (asL' φ) ≡ run xs φ -- prefix xs (asL' φ) ≡ asL' (prefix xs φ) -- prefixOf l xs (asL' φ) ≡ asL' (prefixOf l xs φ) -- postfix (asL' φ) xs ≡ asL' (postfix φ xs) -- postfixOf l (asL' φ) xs ≡ asL' (postfixOf l φ xs) -- left' (asL' φ) ≡ asL' (left' φ) -- right' (asL' φ) ≡ asL' (right' φ) -- dimap l r (asL' φ) ≡ asL' (dimap l r φ) -- extract (asL' φ) ≡ extract φ -- pure a ≡ asL' (pure a) -- asL' φ <*> asL' ψ ≡ asL' (φ <*> ψ) -- return a ≡ asL' (return a) -- asL' φ >>= asL' . k ≡ asL' (φ >>= k) -- filtering p (asL' φ) ≡ asL' (filtering p φ) -- interspersing a (asL' φ) ≡ asL' (interspersing a φ) --asL' :: AsL' p => p a b -> L' a b instance Data.Fold.AsRM1 Data.Fold.L.L instance Data.Fold.AsRM1 Data.Fold.L'.L' instance Data.Fold.AsRM1 Data.Fold.L1.L1 instance Data.Fold.AsRM1 Data.Fold.L1'.L1' instance Data.Fold.AsRM1 Data.Fold.M.M instance Data.Fold.AsRM1 Data.Fold.M1.M1 instance Data.Fold.AsRM1 Data.Fold.R.R instance Data.Fold.AsRM1 Data.Fold.R1.R1 instance Data.Fold.AsRM Data.Fold.R.R instance Data.Fold.AsRM Data.Fold.M.M instance Data.Fold.AsRM Data.Fold.L.L instance Data.Fold.AsRM Data.Fold.L'.L' instance Data.Fold.AsL1' Data.Fold.L1'.L1' instance Data.Fold.AsL1' Data.Fold.L1.L1 instance Data.Fold.AsL1' Data.Fold.L.L instance Data.Fold.AsL1' Data.Fold.L'.L' instance Data.Fold.AsL' Data.Fold.L'.L' instance Data.Fold.AsL' Data.Fold.L.L