**Packages**- base

In many situations, the liftM operations can be replaced by uses of ap, which promotes function application.
> return f `ap` x1 `ap` ... `ap` xn
is equivalent to
> liftMn f x1 x2 ... xn

The computation appendFile file str function appends the string str, to the file file.
Note that writeFile and appendFile write a literal string to a file. To write a value of any printable type, as with print, use the show function to convert the value to a string first.
> main = appendFile "squares" (show [(x,x*x) | x <- [0,0.1..2]])

approxRational, applied to two real fractional numbers x and epsilon, returns the simplest rational number within epsilon of x. A rational number y is said to be *simpler* than another y' if
* abs (numerator y) <= abs (numerator y'), and
* denominator y <= denominator y'.
Any real interval contains a unique simplest rational; in particular, note that 0/1 is the simplest rational of all.

A functor with application.
Instances should satisfy the following laws:
* *identity* pure id <*> v = v
* *composition* pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
* *homomorphism* pure f <*> pure x = pure (f x)
* *interchange* u <*> pure y = pure ($ y) <*> u
* *ignore left value* u *> v = pure (const id) <*> u <*> v
* *ignore right value* u <* v = pure const <*> u <*> v
The Functor instance should satisfy
> fmap f x = pure f <*> x
If f is also a Monad, define pure = return and (<*>) = ap.
Minimal complete definition: pure and <*>.

This module describes a structure intermediate between a functor and a monad: it provides pure expressions and sequencing, but no binding. (Technically, a strong lax monoidal functor.) For more details, see *Applicative Programming with Effects*, by Conor McBride and Ross Paterson, online at http://www.soi.city.ac.uk/~ross/papers/Applicative.html.
This interface was introduced for parsers by Niklas Röjemo, because it admits more sharing than the monadic interface. The names here are mostly based on recent parsing work by Doaitse Swierstra.
This class is also useful with instances of the Data.Traversable.Traversable class.

Map a function over a list and concatenate the results.

map f xs is the list obtained by applying f to each element of xs, i.e.,
> map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]
> map f [x1, x2, ...] == [f x1, f x2, ...]

Some arrows allow application of arrow inputs to other inputs.

Map a function over all the elements of a container and concatenate the resulting lists.

This function may be used as a value for Data.Foldable.foldMap in a Foldable instance.

The program's heap is reaching its limit, and the program should take action to reduce the amount of live data it has. Notes:
* It is undefined which thread receives this exception.
* GHC currently does not throw HeapOverflow exceptions.

Any instance of ArrowApply can be made into an instance of ArrowChoice by defining left = leftApp.

The mapAccumL function behaves like a combination of map and foldl; it applies a function to each element of a list, passing an accumulating parameter from left to right, and returning a final value of this accumulator together with the new list.

The mapAccumL function behaves like a combination of fmap and foldl; it applies a function to each element of a structure, passing an accumulating parameter from left to right, and returning a final value of this accumulator together with the new structure.

The mapAccumR function behaves like a combination of map and foldr; it applies a function to each element of a list, passing an accumulating parameter from right to left, and returning a final value of this accumulator together with the new list.

The mapAccumR function behaves like a combination of fmap and foldr; it applies a function to each element of a structure, passing an accumulating parameter from right to left, and returning a final value of this accumulator together with the new structure.

The mapAndUnzipM function maps its first argument over a list, returning the result as a pair of lists. This function is mainly used with complicated data structures or a state-transforming monad.

This function maps one exception into another as proposed in the paper "A semantics for imprecise exceptions".

This function maps one exception into another as proposed in the paper "A semantics for imprecise exceptions".

Map each element of a structure to a monadic action, evaluate these actions from left to right, and ignore the results.