| Portability | non-portable |
|---|---|
| Stability | experimental |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Safe Haskell | Safe-Inferred |
Data.Fold
Contents
Description
- data L a b = forall r . L (r -> b) (r -> a -> r) r
- data L' a b = forall r . L' (r -> b) (r -> a -> r) r
- data M a b = forall m . M (m -> b) (a -> m) (m -> m -> m) m
- data R a b = forall r . R (r -> b) (a -> r -> r) r
- class Choice p => Folding p where
- prefix :: Foldable t => t a -> p a b -> p a b
- prefix1 :: a -> p a b -> p a b
- prefixOf :: Fold s a -> s -> p a b -> p a b
- postfix :: Foldable t => p a b -> t a -> p a b
- postfix1 :: p a b -> a -> p a b
- postfixOf :: Fold s a -> p a b -> s -> p a b
- run :: Foldable t => t a -> p a b -> b
- run1 :: a -> p a b -> b
- runOf :: Fold s a -> s -> p a b -> b
- filtering :: (a -> Bool) -> p a b -> p a b
- interspersing :: a -> p a b -> p a b
- beneath :: Profunctor p => Overloaded p Mutator s t a b -> p a b -> p s t
- class AsRM p where
- class AsL' p where
Foldings
Left Foldings
Constructors
| forall r . L (r -> b) (r -> a -> r) r |
strict left folds
Constructors
| forall r . L' (r -> b) (r -> a -> r) r |
Monoidal Foldings
Right Foldings
Constructors
| forall r . R (r -> b) (a -> r -> r) r |
Folding Combinators
class Choice p => Folding p whereSource
Methods
prefix :: Foldable t => t a -> p a b -> p a bSource
Partially apply a Folding to some initial input on the left.
prefix1 :: a -> p a b -> p a bSource
prefixOf :: Fold s a -> s -> p a b -> p a bSource
postfix :: Foldable t => p a b -> t a -> p a bSource
postfix1 :: p a b -> a -> p a bSource
postfixOf :: Fold s a -> p a b -> s -> p a bSource
run :: Foldable t => t a -> p a b -> bSource
Apply a Folding to a container full of input:
>>>run ["hello","world"] $ L id (++) []"helloworld"
>>>run [1,2,3] $ L id (+) 06
Apply a Folding to a single element of input
runOf :: Fold s a -> s -> p a b -> bSource
filtering :: (a -> Bool) -> p a b -> p a bSource
interspersing :: a -> p a b -> p a bSource
beneath :: Profunctor p => Overloaded p Mutator s t a b -> p a b -> p s tSource
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 (+) 0Left 6
>>>run [Left 1, Right 2, Right 3] $ beneath _Left $ R id (+) 0Right 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
Folding Homomorphisms
We define f to be a folding homomorphism betwen p and q when:
f :: forall a b. p a b -> q a b
runxs (f φ) ≡runxs φrunOfl xs (f φ) ≡runOfl xs φprefixxs (f φ) ≡ f (prefixxs φ)prefixOfl xs (f φ) ≡ f (prefixOfl xs φ)postfix(f φ) xs ≡ f (postfixφ xs)postfixOfl (f φ) xs ≡ f (postfixOfl φ xs)left'(f φ) ≡ f (left'φ)right'(f φ) ≡ f (right'φ)dimapl r (f φ) ≡ f (dimapl r φ)extract(f φ) ≡extractφpurea ≡ f (purea) f φ<*>f ψ ≡ f (φ<*>ψ)returna ≡ f (returna) f φ>>=f . k ≡ f (φ>>=k)filteringp (f φ) ≡ f (filteringp φ)interspersinga (f φ) ≡ f (interspersinga φ)
Note: A law including extend is explicitly excluded.
Methods
asM is a folding homomorphism to a monoidal folding
runxs (asMφ) ≡runxs φprefixxs (asMφ) ≡asM(prefixxs φ)prefixOfl xs (asMφ) ≡asM(prefixOfl xs φ)postfix(asMφ) xs ≡asM(postfixφ xs)postfixOfl (asMφ) xs ≡asM(postfixOfl φ xs)left'(asMφ) ≡asM(left'φ)right'(asMφ) ≡asM(right'φ)dimapl r (asMφ) ≡asM(dimapl r φ)extract(asMφ) ≡extractφpurea ≡asM(purea)asMφ<*>asMψ ≡asM(φ<*>ψ)returna ≡asM(returna)asMφ>>=asM. k ≡asM(φ>>=k)filteringp (asMφ) ≡asM(filteringp φ)interspersinga (asMφ) ≡asM(interspersinga φ)
asR is a folding homomorphism to a right folding
runxs (asRφ) ≡runxs φprefixxs (asRφ) ≡asR(prefixxs φ)prefixOfl xs (asRφ) ≡asR(prefixOfl xs φ)postfix(asRφ) xs ≡asR(postfixφ xs)postfixOfl (asRφ) xs ≡asR(postfixOfl φ xs)left'(asRφ) ≡asR(left'φ)right'(asRφ) ≡asR(right'φ)dimapl r (asRφ) ≡asR(dimapl r φ)extract(asRφ) ≡extractφpurea ≡asR(purea)asRφ<*>asRψ ≡asR(φ<*>ψ)returna ≡asR(returna)asRφ>>=asR. k ≡asR(φ>>=k)filteringp (asRφ) ≡asR(filteringp φ)interspersinga (asRφ) ≡asR(interspersinga φ)
Methods
asL' is a folding homomorphism to a strict left folding
runxs (asL'φ) ≡runxs φprefixxs (asL'φ) ≡asL'(prefixxs φ)prefixOfl xs (asL'φ) ≡asL'(prefixOfl xs φ)postfix(asL'φ) xs ≡asL'(postfixφ xs)postfixOfl (asL'φ) xs ≡asL'(postfixOfl φ xs)left'(asL'φ) ≡asL'(left'φ)right'(asL'φ) ≡asL'(right'φ)dimapl r (asL'φ) ≡asL'(dimapl r φ)extract(asL'φ) ≡extractφpurea ≡asL'(purea)asL'φ<*>asL'ψ ≡asL'(φ<*>ψ)returna ≡asL'(returna)asL'φ>>=asL'. k ≡asL'(φ>>=k)filteringp (asL'φ) ≡asL'(filteringp φ)interspersinga (asL'φ) ≡asL'(interspersinga φ)