gambler-0.4.1.0: Composable, streaming, and efficient left folds
Safe HaskellSafe-Inferred
LanguageGHC2021

Fold.Shortcut

Synopsis

Type

data ShortcutFold a b Source #

Processes inputs of type a, has the ability to halt midway through the stream, and results in a value of type b

Constructors

forall x y. ShortcutFold 

Fields

Instances

Instances details
Applicative (ShortcutFold a) Source # 
Instance details

Defined in Fold.Shortcut.Type

Methods

pure :: a0 -> ShortcutFold a a0 #

(<*>) :: ShortcutFold a (a0 -> b) -> ShortcutFold a a0 -> ShortcutFold a b #

liftA2 :: (a0 -> b -> c) -> ShortcutFold a a0 -> ShortcutFold a b -> ShortcutFold a c #

(*>) :: ShortcutFold a a0 -> ShortcutFold a b -> ShortcutFold a b #

(<*) :: ShortcutFold a a0 -> ShortcutFold a b -> ShortcutFold a a0 #

Functor (ShortcutFold a) Source # 
Instance details

Defined in Fold.Shortcut.Type

Methods

fmap :: (a0 -> b) -> ShortcutFold a a0 -> ShortcutFold a b #

(<$) :: a0 -> ShortcutFold a b -> ShortcutFold a a0 #

Monoid b => Monoid (ShortcutFold a b) Source # 
Instance details

Defined in Fold.Shortcut.Type

Semigroup b => Semigroup (ShortcutFold a b) Source # 
Instance details

Defined in Fold.Shortcut.Type

Methods

(<>) :: ShortcutFold a b -> ShortcutFold a b -> ShortcutFold a b #

sconcat :: NonEmpty (ShortcutFold a b) -> ShortcutFold a b #

stimes :: Integral b0 => b0 -> ShortcutFold a b -> ShortcutFold a b #

data Will Source #

Constructors

Ambivalent 
Tenacious 

Instances

Instances details
Monoid Will Source # 
Instance details

Defined in Strict

Methods

mempty :: Will #

mappend :: Will -> Will -> Will #

mconcat :: [Will] -> Will #

Semigroup Will Source # 
Instance details

Defined in Strict

Methods

(<>) :: Will -> Will -> Will #

sconcat :: NonEmpty Will -> Will #

stimes :: Integral b => b -> Will -> Will #

data Vitality a b Source #

Constructors

Dead a 
Alive Will b 

Instances

Instances details
Functor (Vitality a) Source # 
Instance details

Defined in Strict

Methods

fmap :: (a0 -> b) -> Vitality a a0 -> Vitality a b #

(<$) :: a0 -> Vitality a b -> Vitality a a0 #

type Vitality' a = Vitality a a Source #

Run

run :: ShortcutFold a b -> [a] -> b Source #

Fold a listlike container to a single summary result, forcing only enough input to satisfy the short-cutting fold's tenacity

Examples

General

magma :: (a -> a -> a) -> ShortcutFold a (Maybe a) Source #

Start with the first input, append each new input on the right with the given function (ambivalent)

semigroup :: Semigroup a => ShortcutFold a (Maybe a) Source #

Append each new input on the right with <> (ambivalent)

monoid :: Monoid a => ShortcutFold a a Source #

Start with mempty, append each input on the right with <> (ambivalent)

Endpoints

first :: ShortcutFold a (Maybe a) Source #

The first input (tenacious)

last :: ShortcutFold a (Maybe a) Source #

The last input (ambivalent)

Extrema

maximum :: Ord a => ShortcutFold a (Maybe a) Source #

The greatest input (ambivalent)

minimum :: Ord a => ShortcutFold a (Maybe a) Source #

The least input (ambivalent)

maximumBy :: (a -> a -> Ordering) -> ShortcutFold a (Maybe a) Source #

The greatest input with respect to the given comparison function (ambivalent)

minimumBy :: (a -> a -> Ordering) -> ShortcutFold a (Maybe a) Source #

The least input with respect to the given comparison function (ambivalent)

Length

null :: ShortcutFold a Bool Source #

True if the input contains no inputs (tenacious)

length :: ShortcutFold a Natural Source #

The number of inputs (ambivalent)

Boolean

and :: ShortcutFold Bool Bool Source #

True if all inputs are True (tenacious)

or :: ShortcutFold Bool Bool Source #

True if any input is True (tenacious)

all :: (a -> Bool) -> ShortcutFold a Bool Source #

True if all inputs satisfy the predicate (tenacious)

any :: (a -> Bool) -> ShortcutFold a Bool Source #

True if any input satisfies the predicate (tenacious)

Numeric

sum :: Num a => ShortcutFold a a Source #

Adds the inputs (ambivalent)

product :: Num a => ShortcutFold a a Source #

Multiplies the inputs (ambivalent)

mean :: Fractional a => ShortcutFold a a Source #

Numerically stable arithmetic mean of the inputs (ambivalent)

variance :: Fractional a => ShortcutFold a a Source #

Numerically stable (population) variance over the inputs (ambivalent)

standardDeviation :: Floating a => ShortcutFold a a Source #

Numerically stable (population) standard deviation over the inputs (ambivalent)

Search

element :: Eq a => a -> ShortcutFold a Bool Source #

True if any input is equal to the given value (tenacious)

notElement :: Eq a => a -> ShortcutFold a Bool Source #

False if any input is equal to the given value (tenacious)

find :: (a -> Bool) -> ShortcutFold a (Maybe a) Source #

The first input that satisfies the predicate, if any (tenacious)

lookup :: Eq a => a -> ShortcutFold (a, b) (Maybe b) Source #

The b from the first tuple where a equals the given value, if any (tenacious)

Index

index :: Natural -> ShortcutFold a (Maybe a) Source #

The nth input, where n=0 is the first input, if the index is in bounds (tenacious)

findIndex :: (a -> Bool) -> ShortcutFold a (Maybe Natural) Source #

The index of the first input that satisfies the predicate, if any (tenacious)

elementIndex :: Eq a => a -> ShortcutFold a (Maybe Natural) Source #

The index of the first input that matches the given value, if any (tenacious)

List

list :: ShortcutFold a [a] Source #

All the inputs (ambivalent)

reverseList :: ShortcutFold a [a] Source #

All the inputs in reverse order (ambivalent)

Conversion

fold :: Fold a b -> ShortcutFold a b Source #

Utilities

demotivate :: ShortcutFold a b -> ShortcutFold a b Source #

Causes a shortcut fold to stop once it becomes ambivalent

duplicate :: ShortcutFold a b -> ShortcutFold a (ShortcutFold a b) Source #

Allows to continue feeding a fold even after passing it to a function that closes it

repeatedly Source #

Arguments

:: forall x xs result. (forall b. ShortcutFold x b -> xs -> b)

A witness to the fact that xs is a list of x

-> ShortcutFold x result 
-> ShortcutFold xs result 

Convert a fold for a single item (x) into a fold for lists of items (xs)

premap :: (a -> b) -> ShortcutFold b r -> ShortcutFold a r Source #

Applies a function to each input before processing