**Packages**- base
- bytestring
- text
- containers

flip f takes its (first) two arguments in the reverse order of f.

(*) `on` f = \x y -> f x * f y.
Typical usage: Data.List.sortBy (compare `on` fst).
Algebraic properties:
* (*) `on` id = (*) (if (*) {¥, const ¥})
* (*) `on` f) `on` g = (*) `on` (f .
* on f . flip on g = flip on (g .
>

Consume the chunks of a lazy ByteString with a natural right fold.

Consume the chunks of a lazy Text with a natural right fold.

Consume the chunks of a lazy ByteString with a strict, tail-recursive, accumulating left fold.

Consume the chunks of a lazy Text with a strict, tail-recursive, accumulating left fold.

Lift a binary function to actions.

Promote a function to a monad, scanning the monadic arguments from left to right. For example,
> liftM2 (+) [0,1] [0,2] = [0,2,1,3]
> liftM2 (+) (Just 1) Nothing = Nothing

The non-overloaded version of insert.

zipWith generalises zip by zipping with the function given as the first argument, instead of a tupling function. For example, zipWith (+) is applied to two lists to produce the list of corresponding sums.

chainl p op x parses zero or more occurrences of p, separated by op. Returns a value produced by a *left* associative application of all functions returned by op. If there are no occurrences of p, x is returned.

chainr p op x parses zero or more occurrences of p, separated by op. Returns a value produced by a *right* associative application of all functions returned by op. If there are no occurrences of p, x is returned.

Fold over the elements of a structure, associating to the left, but strictly.