base-compat-0.7.1: A compatibility layer for base

Safe Haskell Safe-Inferred Haskell98

Prelude.Compat

Synopsis

# Documentation

either :: (a -> c) -> (b -> c) -> Either a b -> c

Case analysis for the `Either` type. If the value is `Left a`, apply the first function to `a`; if it is `Right b`, apply the second function to `b`.

all :: Foldable t => (a -> Bool) -> t a -> Bool

Determines whether all elements of the structure satisfy the predicate.

and :: Foldable t => t Bool -> Bool

`and` returns the conjunction of a container of Bools. For the result to be `True`, the container must be finite; `False`, however, results from a `False` value finitely far from the left end.

any :: Foldable t => (a -> Bool) -> t a -> Bool

Determines whether any element of the structure satisfies the predicate.

concat :: Foldable t => t [a] -> [a]

The concatenation of all the elements of a container of lists.

concatMap :: Foldable t => (a -> [b]) -> t a -> [b]

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

mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()

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

notElem :: (Foldable t, Eq a) => a -> t a -> Bool

`notElem` is the negation of `elem`.

or :: Foldable t => t Bool -> Bool

`or` returns the disjunction of a container of Bools. For the result to be `False`, the container must be finite; `True`, however, results from a `True` value finitely far from the left end.

sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()

Evaluate each monadic action in the structure from left to right, and ignore the results.

(<\$>) :: Functor f => (a -> b) -> f a -> f b infixl 4

An infix synonym for `fmap`.

maybe :: b -> (a -> b) -> Maybe a -> b

The `maybe` function takes a default value, a function, and a `Maybe` value. If the `Maybe` value is `Nothing`, the function returns the default value. Otherwise, it applies the function to the value inside the `Just` and returns the result.

lines :: String -> [String]

`lines` breaks a string up into a list of strings at newline characters. The resulting strings do not contain newlines.

unlines :: [String] -> String

`unlines` is an inverse operation to `lines`. It joins lines, after appending a terminating newline to each.

unwords :: [String] -> String

`unwords` is an inverse operation to `words`. It joins words with separating spaces.

words :: String -> [String]

`words` breaks a string up into a list of words, which were delimited by white space.

curry :: ((a, b) -> c) -> a -> b -> c

`curry` converts an uncurried function to a curried function.

fst :: (a, b) -> a

Extract the first component of a pair.

snd :: (a, b) -> b

Extract the second component of a pair.

uncurry :: (a -> b -> c) -> (a, b) -> c

`uncurry` converts a curried function to a function on pairs.

(\$!) :: (a -> b) -> a -> b infixr 0

Strict (call-by-value) application, defined in terms of `seq`.

(++) :: [a] -> [a] -> [a] infixr 5

Append two lists, i.e.,

```[x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn]
[x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...]```

If the first list is not finite, the result is the first list.

(.) :: (b -> c) -> (a -> b) -> a -> c infixr 9

Function composition.

(=<<) :: Monad m => (a -> m b) -> m a -> m b infixr 1

Same as `>>=`, but with the arguments interchanged.

asTypeOf :: a -> a -> a

`asTypeOf` is a type-restricted version of `const`. It is usually used as an infix operator, and its typing forces its first argument (which is usually overloaded) to have the same type as the second.

const :: a -> b -> a

Constant function.

flip :: (a -> b -> c) -> b -> a -> c

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

id :: a -> a

Identity function.

map :: (a -> b) -> [a] -> [b]

`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, ...]```

`otherwise` is defined as the value `True`. It helps to make guards more readable. eg.

``` f x | x < 0     = ...
| otherwise = ...```

until :: (a -> Bool) -> (a -> a) -> a -> a

`until p f` yields the result of applying `f` until `p` holds.

ioError :: IOError -> IO a

Raise an `IOError` in the `IO` monad.

Construct an `IOError` value with a string describing the error. The `fail` method of the `IO` instance of the `Monad` class raises a `userError`, thus:

```instance Monad IO where
...
fail s = ioError (userError s)```

(!!) :: [a] -> Int -> a infixl 9

List index (subscript) operator, starting from 0. It is an instance of the more general `genericIndex`, which takes an index of any integral type.

break :: (a -> Bool) -> [a] -> ([a], [a])

`break`, applied to a predicate `p` and a list `xs`, returns a tuple where first element is longest prefix (possibly empty) of `xs` of elements that do not satisfy `p` and second element is the remainder of the list:

```break (> 3) [1,2,3,4,1,2,3,4] == ([1,2,3],[4,1,2,3,4])
break (< 9) [1,2,3] == ([],[1,2,3])
break (> 9) [1,2,3] == ([1,2,3],[])```

`break` `p` is equivalent to `span (not . p)`.

cycle :: [a] -> [a]

`cycle` ties a finite list into a circular one, or equivalently, the infinite repetition of the original list. It is the identity on infinite lists.

drop :: Int -> [a] -> [a]

`drop` `n xs` returns the suffix of `xs` after the first `n` elements, or `[]` if `n > length xs`:

```drop 6 "Hello World!" == "World!"
drop 3 [1,2,3,4,5] == [4,5]
drop 3 [1,2] == []
drop 3 [] == []
drop (-1) [1,2] == [1,2]
drop 0 [1,2] == [1,2]```

It is an instance of the more general `genericDrop`, in which `n` may be of any integral type.

dropWhile :: (a -> Bool) -> [a] -> [a]

`dropWhile` `p xs` returns the suffix remaining after `takeWhile` `p xs`:

```dropWhile (< 3) [1,2,3,4,5,1,2,3] == [3,4,5,1,2,3]
dropWhile (< 9) [1,2,3] == []
dropWhile (< 0) [1,2,3] == [1,2,3]```

filter :: (a -> Bool) -> [a] -> [a]

`filter`, applied to a predicate and a list, returns the list of those elements that satisfy the predicate; i.e.,

`filter p xs = [ x | x <- xs, p x]`

head :: [a] -> a

Extract the first element of a list, which must be non-empty.

init :: [a] -> [a]

Return all the elements of a list except the last one. The list must be non-empty.

iterate :: (a -> a) -> a -> [a]

`iterate` `f x` returns an infinite list of repeated applications of `f` to `x`:

`iterate f x == [x, f x, f (f x), ...]`

last :: [a] -> a

Extract the last element of a list, which must be finite and non-empty.

lookup :: Eq a => a -> [(a, b)] -> Maybe b

`lookup` `key assocs` looks up a key in an association list.

repeat :: a -> [a]

`repeat` `x` is an infinite list, with `x` the value of every element.

replicate :: Int -> a -> [a]

`replicate` `n x` is a list of length `n` with `x` the value of every element. It is an instance of the more general `genericReplicate`, in which `n` may be of any integral type.

reverse :: [a] -> [a]

`reverse` `xs` returns the elements of `xs` in reverse order. `xs` must be finite.

scanl :: (b -> a -> b) -> b -> [a] -> [b]

`scanl` is similar to `foldl`, but returns a list of successive reduced values from the left:

`scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]`

Note that

`last (scanl f z xs) == foldl f z xs.`

scanl1 :: (a -> a -> a) -> [a] -> [a]

`scanl1` is a variant of `scanl` that has no starting value argument:

`scanl1 f [x1, x2, ...] == [x1, x1 `f` x2, ...]`

scanr :: (a -> b -> b) -> b -> [a] -> [b]

`scanr` is the right-to-left dual of `scanl`. Note that

`head (scanr f z xs) == foldr f z xs.`

scanr1 :: (a -> a -> a) -> [a] -> [a]

`scanr1` is a variant of `scanr` that has no starting value argument.

span :: (a -> Bool) -> [a] -> ([a], [a])

`span`, applied to a predicate `p` and a list `xs`, returns a tuple where first element is longest prefix (possibly empty) of `xs` of elements that satisfy `p` and second element is the remainder of the list:

```span (< 3) [1,2,3,4,1,2,3,4] == ([1,2],[3,4,1,2,3,4])
span (< 9) [1,2,3] == ([1,2,3],[])
span (< 0) [1,2,3] == ([],[1,2,3])```

`span` `p xs` is equivalent to `(takeWhile p xs, dropWhile p xs)`

splitAt :: Int -> [a] -> ([a], [a])

`splitAt` `n xs` returns a tuple where first element is `xs` prefix of length `n` and second element is the remainder of the list:

```splitAt 6 "Hello World!" == ("Hello ","World!")
splitAt 3 [1,2,3,4,5] == ([1,2,3],[4,5])
splitAt 1 [1,2,3] == ([1],[2,3])
splitAt 3 [1,2,3] == ([1,2,3],[])
splitAt 4 [1,2,3] == ([1,2,3],[])
splitAt 0 [1,2,3] == ([],[1,2,3])
splitAt (-1) [1,2,3] == ([],[1,2,3])```

It is equivalent to `(take n xs, drop n xs)` when `n` is not `_|_` (`splitAt _|_ xs = _|_`). `splitAt` is an instance of the more general `genericSplitAt`, in which `n` may be of any integral type.

tail :: [a] -> [a]

Extract the elements after the head of a list, which must be non-empty.

take :: Int -> [a] -> [a]

`take` `n`, applied to a list `xs`, returns the prefix of `xs` of length `n`, or `xs` itself if `n > length xs`:

```take 5 "Hello World!" == "Hello"
take 3 [1,2,3,4,5] == [1,2,3]
take 3 [1,2] == [1,2]
take 3 [] == []
take (-1) [1,2] == []
take 0 [1,2] == []```

It is an instance of the more general `genericTake`, in which `n` may be of any integral type.

takeWhile :: (a -> Bool) -> [a] -> [a]

`takeWhile`, applied to a predicate `p` and a list `xs`, returns the longest prefix (possibly empty) of `xs` of elements that satisfy `p`:

```takeWhile (< 3) [1,2,3,4,1,2,3,4] == [1,2]
takeWhile (< 9) [1,2,3] == [1,2,3]
takeWhile (< 0) [1,2,3] == []```

unzip :: [(a, b)] -> ([a], [b])

`unzip` transforms a list of pairs into a list of first components and a list of second components.

unzip3 :: [(a, b, c)] -> ([a], [b], [c])

The `unzip3` function takes a list of triples and returns three lists, analogous to `unzip`.

zip :: [a] -> [b] -> [(a, b)]

`zip` takes two lists and returns a list of corresponding pairs. If one input list is short, excess elements of the longer list are discarded.

zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]

`zip3` takes three lists and returns a list of triples, analogous to `zip`.

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]

`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.

zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]

The `zipWith3` function takes a function which combines three elements, as well as three lists and returns a list of their point-wise combination, analogous to `zipWith`.

subtract :: Num a => a -> a -> a

the same as `flip (-)`.

Because `-` is treated specially in the Haskell grammar, `(-` e`)` is not a section, but an application of prefix negation. However, `(subtract` exp`)` is equivalent to the disallowed section.

The `lex` function reads a single lexeme from the input, discarding initial white space, and returning the characters that constitute the lexeme. If the input string contains only white space, `lex` returns a single successful `lexeme' consisting of the empty string. (Thus `lex "" = [("","")]`.) If there is no legal lexeme at the beginning of the input string, `lex` fails (i.e. returns `[]`).

This lexer is not completely faithful to the Haskell lexical syntax in the following respects:

• Qualified names are not handled properly
• Octal and hexadecimal numerics are not recognized as a single token
• Comments are not treated properly

readParen :: Bool -> ReadS a -> ReadS a

`readParen True p` parses what `p` parses, but surrounded with parentheses.

`readParen False p` parses what `p` parses, but optionally surrounded with parentheses.

(^) :: (Num a, Integral b) => a -> b -> a infixr 8

raise a number to a non-negative integral power

(^^) :: (Fractional a, Integral b) => a -> b -> a infixr 8

raise a number to an integral power

even :: Integral a => a -> Bool

fromIntegral :: (Integral a, Num b) => a -> b

general coercion from integral types

gcd :: Integral a => a -> a -> a

`gcd x y` is the non-negative factor of both `x` and `y` of which every common factor of `x` and `y` is also a factor; for example `gcd 4 2 = 2`, `gcd (-4) 6 = 2`, `gcd 0 4` = `4`. `gcd 0 0` = `0`. (That is, the common divisor that is "greatest" in the divisibility preordering.)

Note: Since for signed fixed-width integer types, `abs minBound < 0`, the result may be negative if one of the arguments is `minBound` (and necessarily is if the other is `0` or `minBound`) for such types.

lcm :: Integral a => a -> a -> a

`lcm x y` is the smallest positive integer that both `x` and `y` divide.

odd :: Integral a => a -> Bool

realToFrac :: (Real a, Fractional b) => a -> b

general coercion to fractional types

utility function converting a `Char` to a show function that simply prepends the character unchanged.

showParen :: Bool -> ShowS -> ShowS

utility function that surrounds the inner show function with parentheses when the `Bool` parameter is `True`.

utility function converting a `String` to a show function that simply prepends the string unchanged.

shows :: Show a => a -> ShowS

equivalent to `showsPrec` with a precedence of 0.

appendFile :: FilePath -> String -> IO ()

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]])`

Read a character from the standard input device (same as `hGetChar` `stdin`).

The `getContents` operation returns all user input as a single string, which is read lazily as it is needed (same as `hGetContents` `stdin`).

Read a line from the standard input device (same as `hGetLine` `stdin`).

interact :: (String -> String) -> IO ()

The `interact` function takes a function of type `String->String` as its argument. The entire input from the standard input device is passed to this function as its argument, and the resulting string is output on the standard output device.

print :: Show a => a -> IO ()

The `print` function outputs a value of any printable type to the standard output device. Printable types are those that are instances of class `Show`; `print` converts values to strings for output using the `show` operation and adds a newline.

For example, a program to print the first 20 integers and their powers of 2 could be written as:

`main = print ([(n, 2^n) | n <- [0..19]])`

putChar :: Char -> IO ()

Write a character to the standard output device (same as `hPutChar` `stdout`).

putStr :: String -> IO ()

Write a string to the standard output device (same as `hPutStr` `stdout`).

putStrLn :: String -> IO ()

The same as `putStr`, but adds a newline character.

The `readFile` function reads a file and returns the contents of the file as a string. The file is read lazily, on demand, as with `getContents`.

readIO :: Read a => String -> IO a

The `readIO` function is similar to `read` except that it signals parse failure to the `IO` monad instead of terminating the program.

readLn :: Read a => IO a

The `readLn` function combines `getLine` and `readIO`.

writeFile :: FilePath -> String -> IO ()

The computation `writeFile` `file str` function writes the string `str`, to the file `file`.

read :: Read a => String -> a

The `read` function reads input from a string, which must be completely consumed by the input process.

reads :: Read a => ReadS a

equivalent to `readsPrec` with a precedence of 0.

(&&) :: Bool -> Bool -> Bool infixr 3

Boolean "and"

not :: Bool -> Bool

Boolean "not"

(||) :: Bool -> Bool -> Bool infixr 2

Boolean "or"

(\$) :: (a -> b) -> a -> b infixr 0

Application operator. This operator is redundant, since ordinary application `(f x)` means the same as `(f \$ x)`. However, `\$` has low, right-associative binding precedence, so it sometimes allows parentheses to be omitted; for example:

`    f \$ g \$ h x  =  f (g (h x))`

It is also useful in higher-order situations, such as `map (\$ 0) xs`, or `zipWith (\$) fs xs`.

error :: [Char] -> a

`error` stops execution and displays an error message.

undefined :: a

A special case of `error`. It is expected that compilers will recognize this and insert error messages which are more appropriate to the context in which `undefined` appears.

seq :: a -> b -> b

Evaluates its first argument to head normal form, and then returns its second argument as the result.

elem :: (Foldable t, Eq a) => a -> t a -> Bool

Does the element occur in the structure?

foldMap :: Foldable t => forall a m. Monoid m => (a -> m) -> t a -> m

Map each element of the structure to a monoid, and combine the results.

foldl :: Foldable t => forall b a. (b -> a -> b) -> b -> t a -> b

Left-associative fold of a structure.

``foldl` f z = `foldl` f z . `toList``

foldl1 :: Foldable t => forall a. (a -> a -> a) -> t a -> a

A variant of `foldl` that has no base case, and thus may only be applied to non-empty structures.

``foldl1` f = `foldl1` f . `toList``

foldr :: Foldable t => forall a b. (a -> b -> b) -> b -> t a -> b

Right-associative fold of a structure.

``foldr` f z = `foldr` f z . `toList``

foldr1 :: Foldable t => forall a. (a -> a -> a) -> t a -> a

A variant of `foldr` that has no base case, and thus may only be applied to non-empty structures.

``foldr1` f = `foldr1` f . `toList``

length :: Foldable t => t a -> Int Source

Returns the size/length of a finite structure as an `Int`. The default implementation is optimized for structures that are similar to cons-lists, because there is no general way to do better.

maximum :: (Foldable t, Ord a) => t a -> a

The largest element of a non-empty structure.

minimum :: (Foldable t, Ord a) => t a -> a

The least element of a non-empty structure.

null :: Foldable t => t a -> Bool Source

Test whether the structure is empty. The default implementation is optimized for structures that are similar to cons-lists, because there is no general way to do better.

product :: (Foldable t, Num a) => t a -> a

The `product` function computes the product of the numbers of a structure.

sum :: (Foldable t, Num a) => t a -> a

The `sum` function computes the sum of the numbers of a structure.

mapM :: Traversable t => forall a m b. Monad m => (a -> m b) -> t a -> m (t b)

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

sequence :: Traversable t => forall m a. Monad m => t (m a) -> m (t a)

Evaluate each monadic action in the structure from left to right, and collect the results.

sequenceA :: Traversable t => forall f a. Applicative f => t (f a) -> f (t a)

Evaluate each action in the structure from left to right, and collect the results.

traverse :: Traversable t => forall a f b. Applicative f => (a -> f b) -> t a -> f (t b)

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

(*>) :: Applicative f => forall a b. f a -> f b -> f b

Sequence actions, discarding the value of the first argument.

(<*) :: Applicative f => forall a b. f a -> f b -> f a

Sequence actions, discarding the value of the second argument.

(<*>) :: Applicative f => forall a b. f (a -> b) -> f a -> f b

Sequential application.

pure :: Applicative f => forall a. a -> f a

Lift a value.

(<\$) :: Functor f => forall a b. a -> f b -> f a

Replace all locations in the input with the same value. The default definition is `fmap . const`, but this may be overridden with a more efficient version.

fmap :: Functor f => forall a b. (a -> b) -> f a -> f b

(>>) :: Monad m => forall a b. m a -> m b -> m b

Sequentially compose two actions, discarding any value produced by the first, like sequencing operators (such as the semicolon) in imperative languages.

(>>=) :: Monad m => forall a b. m a -> (a -> m b) -> m b

Sequentially compose two actions, passing any value produced by the first as an argument to the second.

fail :: Monad m => forall a. String -> m a

Fail with a message. This operation is not part of the mathematical definition of a monad, but is invoked on pattern-match failure in a `do` expression.

return :: Monad m => forall a. a -> m a

Inject a value into the monadic type.

mappend :: Monoid a => a -> a -> a

An associative operation

mconcat :: Monoid a => [a] -> a

Fold a list using the monoid. For most types, the default definition for `mconcat` will be used, but the function is included in the class definition so that an optimized version can be provided for specific types.

mempty :: Monoid a => a

Identity of `mappend`

maxBound :: Bounded a => a

minBound :: Bounded a => a

enumFrom :: Enum a => a -> [a]

Used in Haskell's translation of `[n..]`.

enumFromThen :: Enum a => a -> a -> [a]

Used in Haskell's translation of `[n,n'..]`.

enumFromThenTo :: Enum a => a -> a -> a -> [a]

Used in Haskell's translation of `[n,n'..m]`.

enumFromTo :: Enum a => a -> a -> [a]

Used in Haskell's translation of `[n..m]`.

fromEnum :: Enum a => a -> Int

Convert to an `Int`. It is implementation-dependent what `fromEnum` returns when applied to a value that is too large to fit in an `Int`.

pred :: Enum a => a -> a

the predecessor of a value. For numeric types, `pred` subtracts 1.

succ :: Enum a => a -> a

the successor of a value. For numeric types, `succ` adds 1.

toEnum :: Enum a => Int -> a

Convert from an `Int`.

(**) :: Floating a => a -> a -> a

acos :: Floating a => a -> a

acosh :: Floating a => a -> a

asin :: Floating a => a -> a

asinh :: Floating a => a -> a

atan :: Floating a => a -> a

atanh :: Floating a => a -> a

cos :: Floating a => a -> a

cosh :: Floating a => a -> a

exp :: Floating a => a -> a

log :: Floating a => a -> a

logBase :: Floating a => a -> a -> a

pi :: Floating a => a

sin :: Floating a => a -> a

sinh :: Floating a => a -> a

sqrt :: Floating a => a -> a

tan :: Floating a => a -> a

tanh :: Floating a => a -> a

atan2 :: RealFloat a => a -> a -> a

a version of arctangent taking two real floating-point arguments. For real floating `x` and `y`, `atan2 y x` computes the angle (from the positive x-axis) of the vector from the origin to the point `(x,y)`. `atan2 y x` returns a value in the range [`-pi`, `pi`]. It follows the Common Lisp semantics for the origin when signed zeroes are supported. `atan2 y 1`, with `y` in a type that is `RealFloat`, should return the same value as `atan y`. A default definition of `atan2` is provided, but implementors can provide a more accurate implementation.

decodeFloat :: RealFloat a => a -> (Integer, Int)

The function `decodeFloat` applied to a real floating-point number returns the significand expressed as an `Integer` and an appropriately scaled exponent (an `Int`). If `decodeFloat x` yields `(m,n)`, then `x` is equal in value to `m*b^^n`, where `b` is the floating-point radix, and furthermore, either `m` and `n` are both zero or else `b^(d-1) <= abs m < b^d`, where `d` is the value of `floatDigits x`. In particular, `decodeFloat 0 = (0,0)`. If the type contains a negative zero, also `decodeFloat (-0.0) = (0,0)`. The result of `decodeFloat x` is unspecified if either of `isNaN x` or `isInfinite x` is `True`.

encodeFloat :: RealFloat a => Integer -> Int -> a

`encodeFloat` performs the inverse of `decodeFloat` in the sense that for finite `x` with the exception of `-0.0`, `uncurry encodeFloat (decodeFloat x) = x`. `encodeFloat m n` is one of the two closest representable floating-point numbers to `m*b^^n` (or `±Infinity` if overflow occurs); usually the closer, but if `m` contains too many bits, the result may be rounded in the wrong direction.

exponent :: RealFloat a => a -> Int

`exponent` corresponds to the second component of `decodeFloat`. `exponent 0 = 0` and for finite nonzero `x`, `exponent x = snd (decodeFloat x) + floatDigits x`. If `x` is a finite floating-point number, it is equal in value to `significand x * b ^^ exponent x`, where `b` is the floating-point radix. The behaviour is unspecified on infinite or `NaN` values.

floatDigits :: RealFloat a => a -> Int

a constant function, returning the number of digits of `floatRadix` in the significand

floatRadix :: RealFloat a => a -> Integer

a constant function, returning the radix of the representation (often `2`)

floatRange :: RealFloat a => a -> (Int, Int)

a constant function, returning the lowest and highest values the exponent may assume

isDenormalized :: RealFloat a => a -> Bool

`True` if the argument is too small to be represented in normalized format

isIEEE :: RealFloat a => a -> Bool

`True` if the argument is an IEEE floating point number

isInfinite :: RealFloat a => a -> Bool

`True` if the argument is an IEEE infinity or negative infinity

isNaN :: RealFloat a => a -> Bool

`True` if the argument is an IEEE "not-a-number" (NaN) value

isNegativeZero :: RealFloat a => a -> Bool

`True` if the argument is an IEEE negative zero

scaleFloat :: RealFloat a => Int -> a -> a

multiplies a floating-point number by an integer power of the radix

significand :: RealFloat a => a -> a

The first component of `decodeFloat`, scaled to lie in the open interval (`-1`,`1`), either `0.0` or of absolute value `>= 1/b`, where `b` is the floating-point radix. The behaviour is unspecified on infinite or `NaN` values.

(*) :: Num a => a -> a -> a

(+) :: Num a => a -> a -> a

(-) :: Num a => a -> a -> a

abs :: Num a => a -> a

Absolute value.

negate :: Num a => a -> a

Unary negation.

signum :: Num a => a -> a

Sign of a number. The functions `abs` and `signum` should satisfy the law:

`abs x * signum x == x`

For real numbers, the `signum` is either `-1` (negative), `0` (zero) or `1` (positive).

readList :: Read a => ReadS [a]

The method `readList` is provided to allow the programmer to give a specialised way of parsing lists of values. For example, this is used by the predefined `Read` instance of the `Char` type, where values of type `String` should be are expected to use double quotes, rather than square brackets.

readsPrec

Arguments

 :: Read a => Int the operator precedence of the enclosing context (a number from `0` to `11`). Function application has precedence `10`. -> ReadS a

attempts to parse a value from the front of the string, returning a list of (parsed value, remaining string) pairs. If there is no successful parse, the returned list is empty.

Derived instances of `Read` and `Show` satisfy the following:

• `(x,"")` is an element of `(readsPrec d (showsPrec d x ""))`.

That is, `readsPrec` parses the string produced by `showsPrec`, and delivers the value that `showsPrec` started with.

(/) :: Fractional a => a -> a -> a

fractional division

fromRational :: Fractional a => Rational -> a

Conversion from a `Rational` (that is `Ratio Integer`). A floating literal stands for an application of `fromRational` to a value of type `Rational`, so such literals have type `(Fractional a) => a`.

recip :: Fractional a => a -> a

reciprocal fraction

div :: Integral a => a -> a -> a

integer division truncated toward negative infinity

divMod :: Integral a => a -> a -> (a, a)

simultaneous `div` and `mod`

mod :: Integral a => a -> a -> a

integer modulus, satisfying

`(x `div` y)*y + (x `mod` y) == x`

quot :: Integral a => a -> a -> a

integer division truncated toward zero

quotRem :: Integral a => a -> a -> (a, a)

simultaneous `quot` and `rem`

rem :: Integral a => a -> a -> a

integer remainder, satisfying

`(x `quot` y)*y + (x `rem` y) == x`

toInteger :: Integral a => a -> Integer

conversion to `Integer`

toRational :: Real a => a -> Rational

the rational equivalent of its real argument with full precision

ceiling :: RealFrac a => forall b. Integral b => a -> b

`ceiling x` returns the least integer not less than `x`

floor :: RealFrac a => forall b. Integral b => a -> b

`floor x` returns the greatest integer not greater than `x`

properFraction :: RealFrac a => forall b. Integral b => a -> (b, a)

The function `properFraction` takes a real fractional number `x` and returns a pair `(n,f)` such that `x = n+f`, and:

• `n` is an integral number with the same sign as `x`; and
• `f` is a fraction with the same type and sign as `x`, and with absolute value less than `1`.

The default definitions of the `ceiling`, `floor`, `truncate` and `round` functions are in terms of `properFraction`.

round :: RealFrac a => forall b. Integral b => a -> b

`round x` returns the nearest integer to `x`; the even integer if `x` is equidistant between two integers

truncate :: RealFrac a => forall b. Integral b => a -> b

`truncate x` returns the integer nearest `x` between zero and `x`

show :: Show a => a -> String

A specialised variant of `showsPrec`, using precedence context zero, and returning an ordinary `String`.

showList :: Show a => [a] -> ShowS

The method `showList` is provided to allow the programmer to give a specialised way of showing lists of values. For example, this is used by the predefined `Show` instance of the `Char` type, where values of type `String` should be shown in double quotes, rather than between square brackets.

showsPrec

Arguments

 :: Show a => Int the operator precedence of the enclosing context (a number from `0` to `11`). Function application has precedence `10`. -> a the value to be converted to a `String` -> ShowS

Convert a value to a readable `String`.

`showsPrec` should satisfy the law

`showsPrec d x r ++ s  ==  showsPrec d x (r ++ s)`

Derived instances of `Read` and `Show` satisfy the following:

• `(x,"")` is an element of `(readsPrec d (showsPrec d x ""))`.

That is, `readsPrec` parses the string produced by `showsPrec`, and delivers the value that `showsPrec` started with.

(/=) :: Eq a => a -> a -> Bool

(==) :: Eq a => a -> a -> Bool

(<) :: Ord a => a -> a -> Bool

(<=) :: Ord a => a -> a -> Bool

(>) :: Ord a => a -> a -> Bool

(>=) :: Ord a => a -> a -> Bool

compare :: Ord a => a -> a -> Ordering

max :: Ord a => a -> a -> a

min :: Ord a => a -> a -> a

class Functor f => Applicative f where

A functor with application, providing operations to

• embed pure expressions (`pure`), and
• sequence computations and combine their results (`<*>`).

A minimal complete definition must include implementations of these functions satisfying 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`

The other methods have the following default definitions, which may be overridden with equivalent specialized implementations:

• `u `*>` v = `pure` (`const` `id`) `<*>` u `<*>` v`
• `u `<*` v = `pure` `const` `<*>` u `<*>` v`

As a consequence of these laws, the `Functor` instance for `f` will satisfy

• ``fmap` f x = `pure` f `<*>` x`

If `f` is also a `Monad`, it should satisfy

• ``pure` = `return``
• `(`<*>`) = `ap``

(which implies that `pure` and `<*>` satisfy the applicative functor laws).

Minimal complete definition

Methods

pure :: a -> f a

Lift a value.

(<*>) :: f (a -> b) -> f a -> f b infixl 4

Sequential application.

(*>) :: f a -> f b -> f b infixl 4

Sequence actions, discarding the value of the first argument.

(<*) :: f a -> f b -> f a infixl 4

Sequence actions, discarding the value of the second argument.

Instances

 Applicative [] Applicative IO Applicative Id Applicative ZipList Applicative STM Applicative ReadPrec Applicative ReadP Applicative Maybe Applicative ((->) a) Applicative (Either e) Monoid a => Applicative ((,) a) Applicative (ST s) Applicative (StateL s) Applicative (StateR s) Monoid m => Applicative (Const m) Monad m => Applicative (WrappedMonad m) Applicative (ST s) Arrow a => Applicative (ArrowMonad a) Applicative (Proxy *) Arrow a => Applicative (WrappedArrow a b) Applicative f => Applicative (Alt * f) Typeable ((* -> *) -> Constraint) Applicative

class Bounded a where

The `Bounded` class is used to name the upper and lower limits of a type. `Ord` is not a superclass of `Bounded` since types that are not totally ordered may also have upper and lower bounds.

The `Bounded` class may be derived for any enumeration type; `minBound` is the first constructor listed in the `data` declaration and `maxBound` is the last. `Bounded` may also be derived for single-constructor datatypes whose constituent types are in `Bounded`.

Methods

minBound :: a

maxBound :: a

Instances

 Bounded Bool Bounded Char Bounded Int Bounded Ordering Bounded Word Bounded Word8 Bounded Word16 Bounded Word32 Bounded Word64 Bounded () Bounded WordPtr Bounded IntPtr Bounded CChar Bounded CSChar Bounded CUChar Bounded CShort Bounded CUShort Bounded CInt Bounded CUInt Bounded CLong Bounded CULong Bounded CLLong Bounded CULLong Bounded CPtrdiff Bounded CSize Bounded CWchar Bounded CSigAtomic Bounded CIntPtr Bounded CUIntPtr Bounded CIntMax Bounded CUIntMax Bounded All Bounded Any Bounded a => Bounded (Dual a) Bounded a => Bounded (Sum a) Bounded a => Bounded (Product a) (Bounded a, Bounded b) => Bounded (a, b) Bounded (Proxy k s) (Bounded a, Bounded b, Bounded c) => Bounded (a, b, c) (~) k a b => Bounded ((:~:) k a b) (Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a, b, c, d) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e) => Bounded (a, b, c, d, e) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f) => Bounded (a, b, c, d, e, f) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g) => Bounded (a, b, c, d, e, f, g) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h) => Bounded (a, b, c, d, e, f, g, h) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i) => Bounded (a, b, c, d, e, f, g, h, i) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j) => Bounded (a, b, c, d, e, f, g, h, i, j) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k) => Bounded (a, b, c, d, e, f, g, h, i, j, k) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m, Bounded n) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m, n) (Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g, Bounded h, Bounded i, Bounded j, Bounded k, Bounded l, Bounded m, Bounded n, Bounded o) => Bounded (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)

class Enum a where

Class `Enum` defines operations on sequentially ordered types.

The `enumFrom`... methods are used in Haskell's translation of arithmetic sequences.

Instances of `Enum` may be derived for any enumeration type (types whose constructors have no fields). The nullary constructors are assumed to be numbered left-to-right by `fromEnum` from `0` through `n-1`. See Chapter 10 of the Haskell Report for more details.

For any type that is an instance of class `Bounded` as well as `Enum`, the following should hold:

• The calls `succ maxBound` and `pred minBound` should result in a runtime error.
• `fromEnum` and `toEnum` should give a runtime error if the result value is not representable in the result type. For example, `toEnum 7 :: Bool` is an error.
• `enumFrom` and `enumFromThen` should be defined with an implicit bound, thus:
```   enumFrom     x   = enumFromTo     x maxBound
enumFromThen x y = enumFromThenTo x y bound
where
bound | fromEnum y >= fromEnum x = maxBound
| otherwise                = minBound```

Minimal complete definition

Methods

succ :: a -> a

the successor of a value. For numeric types, `succ` adds 1.

pred :: a -> a

the predecessor of a value. For numeric types, `pred` subtracts 1.

toEnum :: Int -> a

Convert from an `Int`.

fromEnum :: a -> Int

Convert to an `Int`. It is implementation-dependent what `fromEnum` returns when applied to a value that is too large to fit in an `Int`.

enumFrom :: a -> [a]

Used in Haskell's translation of `[n..]`.

enumFromThen :: a -> a -> [a]

Used in Haskell's translation of `[n,n'..]`.

enumFromTo :: a -> a -> [a]

Used in Haskell's translation of `[n..m]`.

enumFromThenTo :: a -> a -> a -> [a]

Used in Haskell's translation of `[n,n'..m]`.

Instances

 Enum Bool Enum Char Enum Double Enum Float Enum Int Enum Integer Enum Ordering Enum Word Enum Word8 Enum Word16 Enum Word32 Enum Word64 Enum () Enum WordPtr Enum IntPtr Enum CChar Enum CSChar Enum CUChar Enum CShort Enum CUShort Enum CInt Enum CUInt Enum CLong Enum CULong Enum CLLong Enum CULLong Enum CFloat Enum CDouble Enum CPtrdiff Enum CSize Enum CWchar Enum CSigAtomic Enum CClock Enum CTime Enum CUSeconds Enum CSUSeconds Enum CIntPtr Enum CUIntPtr Enum CIntMax Enum CUIntMax Integral a => Enum (Ratio a) Enum (Proxy k s) (~) k a b => Enum ((:~:) k a b) Enum (f a) => Enum (Alt k f a)

class Eq a where

The `Eq` class defines equality (`==`) and inequality (`/=`). All the basic datatypes exported by the Prelude are instances of `Eq`, and `Eq` may be derived for any datatype whose constituents are also instances of `Eq`.

Minimal complete definition: either `==` or `/=`.

Minimal complete definition

Methods

(==) :: a -> a -> Bool infix 4

(/=) :: a -> a -> Bool infix 4

Instances

 Eq Bool Eq Char Eq Double Eq Float Eq Int Eq Integer Eq Ordering Eq Word Eq Word8 Eq Word16 Eq Word32 Eq Word64 Eq () Eq Handle Eq SpecConstrAnnotation Eq Version Eq AsyncException Eq ArrayException Eq ExitCode Eq IOErrorType Eq BufferMode Eq Newline Eq NewlineMode Eq WordPtr Eq IntPtr Eq CChar Eq CSChar Eq CUChar Eq CShort Eq CUShort Eq CInt Eq CUInt Eq CLong Eq CULong Eq CLLong Eq CULLong Eq CFloat Eq CDouble Eq CPtrdiff Eq CSize Eq CWchar Eq CSigAtomic Eq CClock Eq CTime Eq CUSeconds Eq CSUSeconds Eq CIntPtr Eq CUIntPtr Eq CIntMax Eq CUIntMax Eq MaskingState Eq IOException Eq ErrorCall Eq ArithException Eq All Eq Any Eq Arity Eq Fixity Eq Associativity Eq Lexeme Eq Number Eq a => Eq [a] Eq a => Eq (Ratio a) Eq (Ptr a) Eq (FunPtr a) Eq (U1 p) Eq p => Eq (Par1 p) Eq a => Eq (Complex a) Eq a => Eq (ZipList a) Eq (MVar a) Eq a => Eq (Dual a) Eq a => Eq (Sum a) Eq a => Eq (Product a) Eq a => Eq (First a) Eq a => Eq (Last a) Eq a => Eq (Down a) Eq a => Eq (Maybe a) (Eq a, Eq b) => Eq (Either a b) Eq (f p) => Eq (Rec1 f p) (Eq a, Eq b) => Eq (a, b) (Ix i, Eq e) => Eq (Array i e) Eq a => Eq (Const a b) Eq (Proxy k s) Eq c => Eq (K1 i c p) (Eq (f p), Eq (g p)) => Eq ((:+:) f g p) (Eq (f p), Eq (g p)) => Eq ((:*:) f g p) Eq (f (g p)) => Eq ((:.:) f g p) (Eq a, Eq b, Eq c) => Eq (a, b, c) Eq (STArray s i e) Eq ((:~:) k a b) Eq (f a) => Eq (Alt k f a) Eq (f p) => Eq (M1 i c f p) (Eq a, Eq b, Eq c, Eq d) => Eq (a, b, c, d) (Eq a, Eq b, Eq c, Eq d, Eq e) => Eq (a, b, c, d, e) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f) => Eq (a, b, c, d, e, f) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g) => Eq (a, b, c, d, e, f, g) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h) => Eq (a, b, c, d, e, f, g, h) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i) => Eq (a, b, c, d, e, f, g, h, i) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i, Eq j) => Eq (a, b, c, d, e, f, g, h, i, j) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i, Eq j, Eq k) => Eq (a, b, c, d, e, f, g, h, i, j, k) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i, Eq j, Eq k, Eq l) => Eq (a, b, c, d, e, f, g, h, i, j, k, l) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i, Eq j, Eq k, Eq l, Eq m) => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i, Eq j, Eq k, Eq l, Eq m, Eq n) => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n) (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i, Eq j, Eq k, Eq l, Eq m, Eq n, Eq o) => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)

class Fractional a => Floating a where

Trigonometric and hyperbolic functions and related functions.

Minimal complete definition: `pi`, `exp`, `log`, `sin`, `cos`, `sinh`, `cosh`, `asin`, `acos`, `atan`, `asinh`, `acosh` and `atanh`

Minimal complete definition

Methods

pi :: a

exp :: a -> a

sqrt :: a -> a

log :: a -> a

(**) :: a -> a -> a infixr 8

logBase :: a -> a -> a

sin :: a -> a

tan :: a -> a

cos :: a -> a

asin :: a -> a

atan :: a -> a

acos :: a -> a

sinh :: a -> a

tanh :: a -> a

cosh :: a -> a

asinh :: a -> a

atanh :: a -> a

acosh :: a -> a

Instances

 Floating Double Floating Float Floating CFloat Floating CDouble RealFloat a => Floating (Complex a)

class Foldable t where

Data structures that can be folded.

Minimal complete definition: `foldMap` or `foldr`.

For example, given a data type

`data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)`

a suitable instance would be

```instance Foldable Tree where
foldMap f Empty = mempty
foldMap f (Leaf x) = f x
foldMap f (Node l k r) = foldMap f l `mappend` f k `mappend` foldMap f r```

This is suitable even for abstract types, as the monoid is assumed to satisfy the monoid laws. Alternatively, one could define `foldr`:

```instance Foldable Tree where
foldr f z Empty = z
foldr f z (Leaf x) = f x z
foldr f z (Node l k r) = foldr f (f k (foldr f z r)) l```

Minimal complete definition

Methods

foldMap :: Monoid m => (a -> m) -> t a -> m

Map each element of the structure to a monoid, and combine the results.

foldr :: (a -> b -> b) -> b -> t a -> b

Right-associative fold of a structure.

``foldr` f z = `foldr` f z . `toList``

foldl :: (b -> a -> b) -> b -> t a -> b

Left-associative fold of a structure.

``foldl` f z = `foldl` f z . `toList``

foldr1 :: (a -> a -> a) -> t a -> a

A variant of `foldr` that has no base case, and thus may only be applied to non-empty structures.

``foldr1` f = `foldr1` f . `toList``

foldl1 :: (a -> a -> a) -> t a -> a

A variant of `foldl` that has no base case, and thus may only be applied to non-empty structures.

``foldl1` f = `foldl1` f . `toList``

Instances

 Foldable [] Foldable Maybe Foldable (Either a) Foldable ((,) a) Ix i => Foldable (Array i) Foldable (Const m) Foldable (Proxy *)

class Num a => Fractional a where

Fractional numbers, supporting real division.

Minimal complete definition: `fromRational` and (`recip` or `(/)`)

Minimal complete definition

fromRational, (recip | (/))

Methods

(/) :: a -> a -> a infixl 7

fractional division

recip :: a -> a

reciprocal fraction

fromRational :: Rational -> a

Conversion from a `Rational` (that is `Ratio Integer`). A floating literal stands for an application of `fromRational` to a value of type `Rational`, so such literals have type `(Fractional a) => a`.

Instances

 Fractional Double Fractional Float Fractional CFloat Fractional CDouble Integral a => Fractional (Ratio a) RealFloat a => Fractional (Complex a)

class Functor f where

The `Functor` class is used for types that can be mapped over. Instances of `Functor` should satisfy the following laws:

```fmap id  ==  id
fmap (f . g)  ==  fmap f . fmap g```

The instances of `Functor` for lists, `Maybe` and `IO` satisfy these laws.

Minimal complete definition

fmap

Methods

fmap :: (a -> b) -> f a -> f b

(<\$) :: a -> f b -> f a infixl 4

Replace all locations in the input with the same value. The default definition is `fmap . const`, but this may be overridden with a more efficient version.

Instances

 Functor [] Functor IO Functor Id Functor ArgOrder Functor OptDescr Functor ArgDescr Functor ZipList Functor Handler Functor ReadPrec Functor ReadP Functor Maybe Functor ((->) r) Functor (Either a) Functor ((,) a) Ix i => Functor (Array i) Functor (StateL s) Functor (StateR s) Functor (Const m) Monad m => Functor (WrappedMonad m) Functor (Proxy *) Arrow a => Functor (WrappedArrow a b) Functor f => Functor (Alt * f)

class (Real a, Enum a) => Integral a where

Integral numbers, supporting integer division.

Minimal complete definition: `quotRem` and `toInteger`

Minimal complete definition

Methods

quot :: a -> a -> a infixl 7

integer division truncated toward zero

rem :: a -> a -> a infixl 7

integer remainder, satisfying

`(x `quot` y)*y + (x `rem` y) == x`

div :: a -> a -> a infixl 7

integer division truncated toward negative infinity

mod :: a -> a -> a infixl 7

integer modulus, satisfying

`(x `div` y)*y + (x `mod` y) == x`

quotRem :: a -> a -> (a, a)

simultaneous `quot` and `rem`

divMod :: a -> a -> (a, a)

simultaneous `div` and `mod`

toInteger :: a -> Integer

conversion to `Integer`

class Monad m where

The `Monad` class defines the basic operations over a monad, a concept from a branch of mathematics known as category theory. From the perspective of a Haskell programmer, however, it is best to think of a monad as an abstract datatype of actions. Haskell's `do` expressions provide a convenient syntax for writing monadic expressions.

Minimal complete definition: `>>=` and `return`.

Instances of `Monad` should satisfy the following laws:

```return a >>= k  ==  k a
m >>= return  ==  m
m >>= (\x -> k x >>= h)  ==  (m >>= k) >>= h```

Instances of both `Monad` and `Functor` should additionally satisfy the law:

`fmap f xs  ==  xs >>= return . f`

The instances of `Monad` for lists, `Maybe` and `IO` defined in the Prelude satisfy these laws.

Minimal complete definition

Methods

(>>=) :: m a -> (a -> m b) -> m b infixl 1

Sequentially compose two actions, passing any value produced by the first as an argument to the second.

(>>) :: m a -> m b -> m b infixl 1

Sequentially compose two actions, discarding any value produced by the first, like sequencing operators (such as the semicolon) in imperative languages.

return :: a -> m a

Inject a value into the monadic type.

fail :: String -> m a

Fail with a message. This operation is not part of the mathematical definition of a monad, but is invoked on pattern-match failure in a `do` expression.

Instances

 Monad [] Monad IO Monad P Monad ReadPrec Monad ReadP Monad Maybe Monad ((->) r) Monad (Either e) Monad m => Monad (WrappedMonad m) Monad (Proxy *) Monad m => Monad (Alt * m)

class Monoid a where

The class of monoids (types with an associative binary operation that has an identity). Instances should satisfy the following laws:

• `mappend mempty x = x`
• `mappend x mempty = x`
• `mappend x (mappend y z) = mappend (mappend x y) z`
• `mconcat = `foldr` mappend mempty`

The method names refer to the monoid of lists under concatenation, but there are many other instances.

Minimal complete definition: `mempty` and `mappend`.

Some types can be viewed as a monoid in more than one way, e.g. both addition and multiplication on numbers. In such cases we often define `newtype`s and make those instances of `Monoid`, e.g. `Sum` and `Product`.

Minimal complete definition

Methods

mempty :: a

Identity of `mappend`

mappend :: a -> a -> a

An associative operation

mconcat :: [a] -> a

Fold a list using the monoid. For most types, the default definition for `mconcat` will be used, but the function is included in the class definition so that an optimized version can be provided for specific types.

Instances

 Monoid Ordering Monoid () Monoid All Monoid Any Monoid [a] Monoid a => Monoid (Dual a) Monoid (Endo a) Num a => Monoid (Sum a) Num a => Monoid (Product a) Monoid (First a) Monoid (Last a) Monoid a => Monoid (Maybe a) Lift a semigroup into `Maybe` forming a `Monoid` according to http://en.wikipedia.org/wiki/Monoid: "Any semigroup `S` may be turned into a monoid simply by adjoining an element `e` not in `S` and defining `e*e = e` and `e*s = s = s*e` for all `s ∈ S`." Since there is no "Semigroup" typeclass providing just `mappend`, we use `Monoid` instead. Monoid b => Monoid (a -> b) (Monoid a, Monoid b) => Monoid (a, b) Monoid a => Monoid (Const a b) Monoid (Proxy * s) Typeable (* -> Constraint) Monoid (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) Alternative f => Monoid (Alt * f a) (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) (Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e)

class Num a where

Basic numeric class.

Minimal complete definition: all except `negate` or `(-)`

Minimal complete definition

(+), (*), abs, signum, fromInteger, (negate | (-))

Methods

(+) :: a -> a -> a infixl 6

(*) :: a -> a -> a infixl 7

(-) :: a -> a -> a infixl 6

negate :: a -> a

Unary negation.

abs :: a -> a

Absolute value.

signum :: a -> a

Sign of a number. The functions `abs` and `signum` should satisfy the law:

`abs x * signum x == x`

For real numbers, the `signum` is either `-1` (negative), `0` (zero) or `1` (positive).

fromInteger :: Integer -> a

Conversion from an `Integer`. An integer literal represents the application of the function `fromInteger` to the appropriate value of type `Integer`, so such literals have type `(Num a) => a`.

Instances

 Num Double Num Float Num Int Num Integer Num Word Num Word8 Num Word16 Num Word32 Num Word64 Num WordPtr Num IntPtr Num CChar Num CSChar Num CUChar Num CShort Num CUShort Num CInt Num CUInt Num CLong Num CULong Num CLLong Num CULLong Num CFloat Num CDouble Num CPtrdiff Num CSize Num CWchar Num CSigAtomic Num CClock Num CTime Num CUSeconds Num CSUSeconds Num CIntPtr Num CUIntPtr Num CIntMax Num CUIntMax Integral a => Num (Ratio a) RealFloat a => Num (Complex a) Num a => Num (Sum a) Num a => Num (Product a) Num (f a) => Num (Alt k f a)

class Eq a => Ord a where

The `Ord` class is used for totally ordered datatypes.

Instances of `Ord` can be derived for any user-defined datatype whose constituent types are in `Ord`. The declared order of the constructors in the data declaration determines the ordering in derived `Ord` instances. The `Ordering` datatype allows a single comparison to determine the precise ordering of two objects.

Minimal complete definition: either `compare` or `<=`. Using `compare` can be more efficient for complex types.

Minimal complete definition

Methods

compare :: a -> a -> Ordering

(<) :: a -> a -> Bool infix 4

(>=) :: a -> a -> Bool infix 4

(>) :: a -> a -> Bool infix 4

(<=) :: a -> a -> Bool infix 4

max :: a -> a -> a

min :: a -> a -> a

Instances

 Ord Bool Ord Char Ord Double Ord Float Ord Int Ord Integer Ord Ordering Ord Word Ord Word8 Ord Word16 Ord Word32 Ord Word64 Ord () Ord Version Ord AsyncException Ord ArrayException Ord ExitCode Ord BufferMode Ord Newline Ord NewlineMode Ord WordPtr Ord IntPtr Ord CChar Ord CSChar Ord CUChar Ord CShort Ord CUShort Ord CInt Ord CUInt Ord CLong Ord CULong Ord CLLong Ord CULLong Ord CFloat Ord CDouble Ord CPtrdiff Ord CSize Ord CWchar Ord CSigAtomic Ord CClock Ord CTime Ord CUSeconds Ord CSUSeconds Ord CIntPtr Ord CUIntPtr Ord CIntMax Ord CUIntMax Ord ErrorCall Ord ArithException Ord All Ord Any Ord Arity Ord Fixity Ord Associativity Ord a => Ord [a] Integral a => Ord (Ratio a) Ord (Ptr a) Ord (FunPtr a) Ord (U1 p) Ord p => Ord (Par1 p) Ord a => Ord (ZipList a) Ord a => Ord (Dual a) Ord a => Ord (Sum a) Ord a => Ord (Product a) Ord a => Ord (First a) Ord a => Ord (Last a) Ord a => Ord (Down a) Ord a => Ord (Maybe a) (Ord a, Ord b) => Ord (Either a b) Ord (f p) => Ord (Rec1 f p) (Ord a, Ord b) => Ord (a, b) (Ix i, Ord e) => Ord (Array i e) Ord a => Ord (Const a b) Ord (Proxy k s) Ord c => Ord (K1 i c p) (Ord (f p), Ord (g p)) => Ord ((:+:) f g p) (Ord (f p), Ord (g p)) => Ord ((:*:) f g p) Ord (f (g p)) => Ord ((:.:) f g p) (Ord a, Ord b, Ord c) => Ord (a, b, c) Ord ((:~:) k a b) Ord (f a) => Ord (Alt k f a) Ord (f p) => Ord (M1 i c f p) (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d) (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) => Ord (a, b, c, d, e, f) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) => Ord (a, b, c, d, e, f, g) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h) => Ord (a, b, c, d, e, f, g, h) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i) => Ord (a, b, c, d, e, f, g, h, i) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j) => Ord (a, b, c, d, e, f, g, h, i, j) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k) => Ord (a, b, c, d, e, f, g, h, i, j, k) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l) => Ord (a, b, c, d, e, f, g, h, i, j, k, l) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n, Ord o) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)

class Read a where

Parsing of `String`s, producing values.

Minimal complete definition: `readsPrec` (or, for GHC only, `readPrec`)

Derived instances of `Read` make the following assumptions, which derived instances of `Show` obey:

• If the constructor is defined to be an infix operator, then the derived `Read` instance will parse only infix applications of the constructor (not the prefix form).
• Associativity is not used to reduce the occurrence of parentheses, although precedence may be.
• If the constructor is defined using record syntax, the derived `Read` will parse only the record-syntax form, and furthermore, the fields must be given in the same order as the original declaration.
• The derived `Read` instance allows arbitrary Haskell whitespace between tokens of the input string. Extra parentheses are also allowed.

For example, given the declarations

```infixr 5 :^:
data Tree a =  Leaf a  |  Tree a :^: Tree a```

the derived instance of `Read` in Haskell 2010 is equivalent to

```instance (Read a) => Read (Tree a) where

readsPrec d r =  readParen (d > app_prec)
(\r -> [(Leaf m,t) |
("Leaf",s) <- lex r,
(m,t) <- readsPrec (app_prec+1) s]) r

++ readParen (d > up_prec)
(\r -> [(u:^:v,w) |
(u,s) <- readsPrec (up_prec+1) r,
(":^:",t) <- lex s,
(v,w) <- readsPrec (up_prec+1) t]) r

where app_prec = 10
up_prec = 5```

Note that right-associativity of `:^:` is unused.

The derived instance in GHC is equivalent to

```instance (Read a) => Read (Tree a) where

readPrec = parens \$ (prec app_prec \$ do
Ident "Leaf" <- lexP
m <- step readPrec
return (Leaf m))

+++ (prec up_prec \$ do
u <- step readPrec
Symbol ":^:" <- lexP
v <- step readPrec
return (u :^: v))

where app_prec = 10
up_prec = 5

readListPrec = readListPrecDefault```

Minimal complete definition

Methods

readsPrec

Arguments

 :: Int the operator precedence of the enclosing context (a number from `0` to `11`). Function application has precedence `10`. -> ReadS a

attempts to parse a value from the front of the string, returning a list of (parsed value, remaining string) pairs. If there is no successful parse, the returned list is empty.

Derived instances of `Read` and `Show` satisfy the following:

• `(x,"")` is an element of `(readsPrec d (showsPrec d x ""))`.

That is, `readsPrec` parses the string produced by `showsPrec`, and delivers the value that `showsPrec` started with.

readList :: ReadS [a]

The method `readList` is provided to allow the programmer to give a specialised way of parsing lists of values. For example, this is used by the predefined `Read` instance of the `Char` type, where values of type `String` should be are expected to use double quotes, rather than square brackets.

Instances

 Read Bool Read Char Read Double Read Float Read Int Read Integer Read Ordering Read Word Read Word8 Read Word16 Read Word32 Read Word64 Read () Read Version Read ExitCode Read BufferMode Read Newline Read NewlineMode Read WordPtr Read IntPtr Read CChar Read CSChar Read CUChar Read CShort Read CUShort Read CInt Read CUInt Read CLong Read CULong Read CLLong Read CULLong Read CFloat Read CDouble Read CPtrdiff Read CSize Read CWchar Read CSigAtomic Read CClock Read CTime Read CUSeconds Read CSUSeconds Read CIntPtr Read CUIntPtr Read CIntMax Read CUIntMax Read All Read Any Read Arity Read Fixity Read Associativity Read Lexeme Read a => Read [a] (Integral a, Read a) => Read (Ratio a) Read (U1 p) Read p => Read (Par1 p) Read a => Read (Complex a) Read a => Read (ZipList a) Read a => Read (Dual a) Read a => Read (Sum a) Read a => Read (Product a) Read a => Read (First a) Read a => Read (Last a) Read a => Read (Down a) Read a => Read (Maybe a) (Read a, Read b) => Read (Either a b) Read (f p) => Read (Rec1 f p) (Read a, Read b) => Read (a, b) (Ix a, Read a, Read b) => Read (Array a b) Read a => Read (Const a b) Read (Proxy k s) Read c => Read (K1 i c p) (Read (f p), Read (g p)) => Read ((:+:) f g p) (Read (f p), Read (g p)) => Read ((:*:) f g p) Read (f (g p)) => Read ((:.:) f g p) (Read a, Read b, Read c) => Read (a, b, c) (~) k a b => Read ((:~:) k a b) Read (f a) => Read (Alt k f a) Read (f p) => Read (M1 i c f p) (Read a, Read b, Read c, Read d) => Read (a, b, c, d) (Read a, Read b, Read c, Read d, Read e) => Read (a, b, c, d, e) (Read a, Read b, Read c, Read d, Read e, Read f) => Read (a, b, c, d, e, f) (Read a, Read b, Read c, Read d, Read e, Read f, Read g) => Read (a, b, c, d, e, f, g) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h) => Read (a, b, c, d, e, f, g, h) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i) => Read (a, b, c, d, e, f, g, h, i) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i, Read j) => Read (a, b, c, d, e, f, g, h, i, j) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i, Read j, Read k) => Read (a, b, c, d, e, f, g, h, i, j, k) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i, Read j, Read k, Read l) => Read (a, b, c, d, e, f, g, h, i, j, k, l) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i, Read j, Read k, Read l, Read m) => Read (a, b, c, d, e, f, g, h, i, j, k, l, m) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i, Read j, Read k, Read l, Read m, Read n) => Read (a, b, c, d, e, f, g, h, i, j, k, l, m, n) (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i, Read j, Read k, Read l, Read m, Read n, Read o) => Read (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)

class (Num a, Ord a) => Real a where

Methods

toRational :: a -> Rational

the rational equivalent of its real argument with full precision

class (RealFrac a, Floating a) => RealFloat a where

Efficient, machine-independent access to the components of a floating-point number.

Minimal complete definition: all except `exponent`, `significand`, `scaleFloat` and `atan2`

Minimal complete definition

Methods

floatRadix :: a -> Integer

a constant function, returning the radix of the representation (often `2`)

floatDigits :: a -> Int

a constant function, returning the number of digits of `floatRadix` in the significand

floatRange :: a -> (Int, Int)

a constant function, returning the lowest and highest values the exponent may assume

decodeFloat :: a -> (Integer, Int)

The function `decodeFloat` applied to a real floating-point number returns the significand expressed as an `Integer` and an appropriately scaled exponent (an `Int`). If `decodeFloat x` yields `(m,n)`, then `x` is equal in value to `m*b^^n`, where `b` is the floating-point radix, and furthermore, either `m` and `n` are both zero or else `b^(d-1) <= abs m < b^d`, where `d` is the value of `floatDigits x`. In particular, `decodeFloat 0 = (0,0)`. If the type contains a negative zero, also `decodeFloat (-0.0) = (0,0)`. The result of `decodeFloat x` is unspecified if either of `isNaN x` or `isInfinite x` is `True`.

encodeFloat :: Integer -> Int -> a

`encodeFloat` performs the inverse of `decodeFloat` in the sense that for finite `x` with the exception of `-0.0`, `uncurry encodeFloat (decodeFloat x) = x`. `encodeFloat m n` is one of the two closest representable floating-point numbers to `m*b^^n` (or `±Infinity` if overflow occurs); usually the closer, but if `m` contains too many bits, the result may be rounded in the wrong direction.

exponent :: a -> Int

`exponent` corresponds to the second component of `decodeFloat`. `exponent 0 = 0` and for finite nonzero `x`, `exponent x = snd (decodeFloat x) + floatDigits x`. If `x` is a finite floating-point number, it is equal in value to `significand x * b ^^ exponent x`, where `b` is the floating-point radix. The behaviour is unspecified on infinite or `NaN` values.

significand :: a -> a

The first component of `decodeFloat`, scaled to lie in the open interval (`-1`,`1`), either `0.0` or of absolute value `>= 1/b`, where `b` is the floating-point radix. The behaviour is unspecified on infinite or `NaN` values.

scaleFloat :: Int -> a -> a

multiplies a floating-point number by an integer power of the radix

isNaN :: a -> Bool

`True` if the argument is an IEEE "not-a-number" (NaN) value

isInfinite :: a -> Bool

`True` if the argument is an IEEE infinity or negative infinity

isDenormalized :: a -> Bool

`True` if the argument is too small to be represented in normalized format

isNegativeZero :: a -> Bool

`True` if the argument is an IEEE negative zero

isIEEE :: a -> Bool

`True` if the argument is an IEEE floating point number

atan2 :: a -> a -> a

a version of arctangent taking two real floating-point arguments. For real floating `x` and `y`, `atan2 y x` computes the angle (from the positive x-axis) of the vector from the origin to the point `(x,y)`. `atan2 y x` returns a value in the range [`-pi`, `pi`]. It follows the Common Lisp semantics for the origin when signed zeroes are supported. `atan2 y 1`, with `y` in a type that is `RealFloat`, should return the same value as `atan y`. A default definition of `atan2` is provided, but implementors can provide a more accurate implementation.

Instances

 RealFloat Double RealFloat Float RealFloat CFloat RealFloat CDouble

class (Real a, Fractional a) => RealFrac a where

Extracting components of fractions.

Minimal complete definition: `properFraction`

Minimal complete definition

properFraction

Methods

properFraction :: Integral b => a -> (b, a)

The function `properFraction` takes a real fractional number `x` and returns a pair `(n,f)` such that `x = n+f`, and:

• `n` is an integral number with the same sign as `x`; and
• `f` is a fraction with the same type and sign as `x`, and with absolute value less than `1`.

The default definitions of the `ceiling`, `floor`, `truncate` and `round` functions are in terms of `properFraction`.

truncate :: Integral b => a -> b

`truncate x` returns the integer nearest `x` between zero and `x`

round :: Integral b => a -> b

`round x` returns the nearest integer to `x`; the even integer if `x` is equidistant between two integers

ceiling :: Integral b => a -> b

`ceiling x` returns the least integer not less than `x`

floor :: Integral b => a -> b

`floor x` returns the greatest integer not greater than `x`

Instances

 RealFrac Double RealFrac Float RealFrac CFloat RealFrac CDouble Integral a => RealFrac (Ratio a)

class Show a where

Conversion of values to readable `String`s.

Minimal complete definition: `showsPrec` or `show`.

Derived instances of `Show` have the following properties, which are compatible with derived instances of `Read`:

• The result of `show` is a syntactically correct Haskell expression containing only constants, given the fixity declarations in force at the point where the type is declared. It contains only the constructor names defined in the data type, parentheses, and spaces. When labelled constructor fields are used, braces, commas, field names, and equal signs are also used.
• If the constructor is defined to be an infix operator, then `showsPrec` will produce infix applications of the constructor.
• the representation will be enclosed in parentheses if the precedence of the top-level constructor in `x` is less than `d` (associativity is ignored). Thus, if `d` is `0` then the result is never surrounded in parentheses; if `d` is `11` it is always surrounded in parentheses, unless it is an atomic expression.
• If the constructor is defined using record syntax, then `show` will produce the record-syntax form, with the fields given in the same order as the original declaration.

For example, given the declarations

```infixr 5 :^:
data Tree a =  Leaf a  |  Tree a :^: Tree a```

the derived instance of `Show` is equivalent to

```instance (Show a) => Show (Tree a) where

showsPrec d (Leaf m) = showParen (d > app_prec) \$
showString "Leaf " . showsPrec (app_prec+1) m
where app_prec = 10

showsPrec d (u :^: v) = showParen (d > up_prec) \$
showsPrec (up_prec+1) u .
showString " :^: "      .
showsPrec (up_prec+1) v
where up_prec = 5```

Note that right-associativity of `:^:` is ignored. For example,

• `show (Leaf 1 :^: Leaf 2 :^: Leaf 3)` produces the string `"Leaf 1 :^: (Leaf 2 :^: Leaf 3)"`.

Minimal complete definition

Methods

showsPrec

Arguments

 :: Int the operator precedence of the enclosing context (a number from `0` to `11`). Function application has precedence `10`. -> a the value to be converted to a `String` -> ShowS

Convert a value to a readable `String`.

`showsPrec` should satisfy the law

`showsPrec d x r ++ s  ==  showsPrec d x (r ++ s)`

Derived instances of `Read` and `Show` satisfy the following:

• `(x,"")` is an element of `(readsPrec d (showsPrec d x ""))`.

That is, `readsPrec` parses the string produced by `showsPrec`, and delivers the value that `showsPrec` started with.

show :: a -> String

A specialised variant of `showsPrec`, using precedence context zero, and returning an ordinary `String`.

showList :: [a] -> ShowS

The method `showList` is provided to allow the programmer to give a specialised way of showing lists of values. For example, this is used by the predefined `Show` instance of the `Char` type, where values of type `String` should be shown in double quotes, rather than between square brackets.

Instances

 Show Bool Show Char Show Double Show Float Show Int Show Integer Show Ordering Show Word Show Word8 Show Word16 Show Word32 Show Word64 Show () Show Handle Show HandleType Show Version Show BlockedIndefinitelyOnMVar Show BlockedIndefinitelyOnSTM Show Deadlock Show AssertionFailed Show SomeAsyncException Show AsyncException Show ArrayException Show ExitCode Show IOErrorType Show BufferMode Show Newline Show NewlineMode Show WordPtr Show IntPtr Show CChar Show CSChar Show CUChar Show CShort Show CUShort Show CInt Show CUInt Show CLong Show CULong Show CLLong Show CULLong Show CFloat Show CDouble Show CPtrdiff Show CSize Show CWchar Show CSigAtomic Show CClock Show CTime Show CUSeconds Show CSUSeconds Show CIntPtr Show CUIntPtr Show CIntMax Show CUIntMax Show MaskingState Show IOException Show ErrorCall Show ArithException Show All Show Any Show Arity Show Fixity Show Associativity Show Lexeme Show Number Show SomeException Show a => Show [a] (Integral a, Show a) => Show (Ratio a) Show (Ptr a) Show (FunPtr a) Show (U1 p) Show p => Show (Par1 p) Show a => Show (Complex a) Show a => Show (ZipList a) Show a => Show (Dual a) Show a => Show (Sum a) Show a => Show (Product a) Show a => Show (First a) Show a => Show (Last a) Show a => Show (Down a) Show a => Show (Maybe a) (Show a, Show b) => Show (Either a b) Show (f p) => Show (Rec1 f p) (Show a, Show b) => Show (a, b) (Ix a, Show a, Show b) => Show (Array a b) Show a => Show (Const a b) Show (Proxy k s) Show c => Show (K1 i c p) (Show (f p), Show (g p)) => Show ((:+:) f g p) (Show (f p), Show (g p)) => Show ((:*:) f g p) Show (f (g p)) => Show ((:.:) f g p) (Show a, Show b, Show c) => Show (a, b, c) Show ((:~:) k a b) Show (f a) => Show (Alt k f a) Show (f p) => Show (M1 i c f p) (Show a, Show b, Show c, Show d) => Show (a, b, c, d) (Show a, Show b, Show c, Show d, Show e) => Show (a, b, c, d, e) (Show a, Show b, Show c, Show d, Show e, Show f) => Show (a, b, c, d, e, f) (Show a, Show b, Show c, Show d, Show e, Show f, Show g) => Show (a, b, c, d, e, f, g) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h) => Show (a, b, c, d, e, f, g, h) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i) => Show (a, b, c, d, e, f, g, h, i) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j) => Show (a, b, c, d, e, f, g, h, i, j) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k) => Show (a, b, c, d, e, f, g, h, i, j, k) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l) => Show (a, b, c, d, e, f, g, h, i, j, k, l) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l, Show m) => Show (a, b, c, d, e, f, g, h, i, j, k, l, m) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l, Show m, Show n) => Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n) (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l, Show m, Show n, Show o) => Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)

class (Functor t, Foldable t) => Traversable t where

Functors representing data structures that can be traversed from left to right.

Minimal complete definition: `traverse` or `sequenceA`.

A definition of `traverse` must satisfy the following laws:

naturality
`t . traverse f = traverse (t . f)` for every applicative transformation `t`
identity
`traverse Identity = Identity`
composition
`traverse (Compose . fmap g . f) = Compose . fmap (traverse g) . traverse f`

A definition of `sequenceA` must satisfy the following laws:

naturality
`t . sequenceA = sequenceA . fmap t` for every applicative transformation `t`
identity
`sequenceA . fmap Identity = Identity`
composition
`sequenceA . fmap Compose = Compose . fmap sequenceA . sequenceA`

where an applicative transformation is a function

`t :: (Applicative f, Applicative g) => f a -> g a`

preserving the `Applicative` operations, i.e.

• `t (`pure` x) = `pure` x`
• `t (x `<*>` y) = t x `<*>` t y`

and the identity functor `Identity` and composition of functors `Compose` are defined as

```  newtype Identity a = Identity a

instance Functor Identity where
fmap f (Identity x) = Identity (f x)

instance Applicative Indentity where
pure x = Identity x
Identity f <*> Identity x = Identity (f x)

newtype Compose f g a = Compose (f (g a))

instance (Functor f, Functor g) => Functor (Compose f g) where
fmap f (Compose x) = Compose (fmap (fmap f) x)

instance (Applicative f, Applicative g) => Applicative (Compose f g) where
pure x = Compose (pure (pure x))
Compose f <*> Compose x = Compose ((<*>) <\$> f <*> x)```

(The naturality law is implied by parametricity.)

Instances are similar to `Functor`, e.g. given a data type

`data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)`

a suitable instance would be

```instance Traversable Tree where
traverse f Empty = pure Empty
traverse f (Leaf x) = Leaf <\$> f x
traverse f (Node l k r) = Node <\$> traverse f l <*> f k <*> traverse f r```

This is suitable even for abstract types, as the laws for `<*>` imply a form of associativity.

The superclass instances should satisfy the following:

• In the `Functor` instance, `fmap` should be equivalent to traversal with the identity applicative functor (`fmapDefault`).
• In the `Foldable` instance, `foldMap` should be equivalent to traversal with a constant applicative functor (`foldMapDefault`).

Minimal complete definition

Methods

traverse :: Applicative f => (a -> f b) -> t a -> f (t b)

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

sequenceA :: Applicative f => t (f a) -> f (t a)

Evaluate each action in the structure from left to right, and collect the results.

mapM :: Monad m => (a -> m b) -> t a -> m (t b)

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

sequence :: Monad m => t (m a) -> m (t a)

Evaluate each monadic action in the structure from left to right, and collect the results.

Instances

 Traversable [] Traversable Maybe Traversable (Either a) Traversable ((,) a) Ix i => Traversable (Array i) Traversable (Const m) Traversable (Proxy *)

data IO a :: * -> *

A value of type `IO a` is a computation which, when performed, does some I/O before returning a value of type `a`.

There is really only one way to "perform" an I/O action: bind it to `Main.main` in your program. When your program is run, the I/O will be performed. It isn't possible to perform I/O from an arbitrary function, unless that function is itself in the `IO` monad and called at some point, directly or indirectly, from `Main.main`.

`IO` is a monad, so `IO` actions can be combined using either the do-notation or the `>>` and `>>=` operations from the `Monad` class.

Instances

 Monad IO Functor IO Applicative IO

data Char :: *

The character type `Char` is an enumeration whose values represent Unicode (or equivalently ISO/IEC 10646) characters (see http://www.unicode.org/ for details). This set extends the ISO 8859-1 (Latin-1) character set (the first 256 characters), which is itself an extension of the ASCII character set (the first 128 characters). A character literal in Haskell has type `Char`.

To convert a `Char` to or from the corresponding `Int` value defined by Unicode, use `toEnum` and `fromEnum` from the `Enum` class respectively (or equivalently `ord` and `chr`).

Instances

 Bounded Char Enum Char Eq Char Ord Char Read Char Show Char Ix Char Generic Char Storable Char type Rep Char = D1 D_Char (C1 C_Char (S1 NoSelector (Rec0 Char)))

data Double :: *

Double-precision floating point numbers. It is desirable that this type be at least equal in range and precision to the IEEE double-precision type.

Instances

 Enum Double Eq Double Floating Double Fractional Double Num Double Ord Double Read Double Real Double RealFloat Double RealFrac Double Show Double Generic Double Storable Double type Rep Double = D1 D_Double (C1 C_Double (S1 NoSelector (Rec0 Double)))

data Float :: *

Single-precision floating point numbers. It is desirable that this type be at least equal in range and precision to the IEEE single-precision type.

Instances

 Enum Float Eq Float Floating Float Fractional Float Num Float Ord Float Read Float Real Float RealFloat Float RealFrac Float Show Float Generic Float Storable Float type Rep Float = D1 D_Float (C1 C_Float (S1 NoSelector (Rec0 Float)))

data Int :: *

A fixed-precision integer type with at least the range `[-2^29 .. 2^29-1]`. The exact range for a given implementation can be determined by using `minBound` and `maxBound` from the `Bounded` class.

Instances

 Bounded Int Enum Int Eq Int Integral Int Num Int Ord Int Read Int Real Int Show Int Ix Int Generic Int Storable Int Bits Int FiniteBits Int type Rep Int = D1 D_Int (C1 C_Int (S1 NoSelector (Rec0 Int)))

data Integer :: *

Arbitrary-precision integers.

Instances

 Enum Integer Eq Integer Integral Integer Num Integer Ord Integer Read Integer Real Integer Show Integer Ix Integer Bits Integer

data Word :: *

A `Word` is an unsigned integral type, with the same size as `Int`.

Instances

 Bounded Word Enum Word Eq Word Integral Word Num Word Ord Word Read Word Real Word Show Word Ix Word Storable Word Bits Word FiniteBits Word

data Bool :: *

Constructors

 False True

Instances

 Bounded Bool Enum Bool Eq Bool Ord Bool Read Bool Show Bool Ix Bool Generic Bool Storable Bool Bits Bool FiniteBits Bool type Rep Bool = D1 D1Bool ((:+:) (C1 C1_0Bool U1) (C1 C1_1Bool U1)) type (==) Bool a b = EqBool a b

data Either a b :: * -> * -> *

The `Either` type represents values with two possibilities: a value of type `Either a b` is either `Left a` or `Right b`.

The `Either` type is sometimes used to represent a value which is either correct or an error; by convention, the `Left` constructor is used to hold an error value and the `Right` constructor is used to hold a correct value (mnemonic: "right" also means "correct").

Constructors

 Left a Right b

Instances

 Monad (Either e) Functor (Either a) Applicative (Either e) Foldable (Either a) Traversable (Either a) Generic1 (Either a) (Eq a, Eq b) => Eq (Either a b) (Ord a, Ord b) => Ord (Either a b) (Read a, Read b) => Read (Either a b) (Show a, Show b) => Show (Either a b) Generic (Either a b) Typeable (* -> * -> *) Either type Rep1 (Either a) = D1 D1Either ((:+:) (C1 C1_0Either (S1 NoSelector (Rec0 a))) (C1 C1_1Either (S1 NoSelector Par1))) type Rep (Either a b) = D1 D1Either ((:+:) (C1 C1_0Either (S1 NoSelector (Rec0 a))) (C1 C1_1Either (S1 NoSelector (Rec0 b)))) type (==) (Either k k1) a b = EqEither k k1 a b

data Maybe a :: * -> *

The `Maybe` type encapsulates an optional value. A value of type `Maybe a` either contains a value of type `a` (represented as `Just a`), or it is empty (represented as `Nothing`). Using `Maybe` is a good way to deal with errors or exceptional cases without resorting to drastic measures such as `error`.

The `Maybe` type is also a monad. It is a simple kind of error monad, where all errors are represented by `Nothing`. A richer error monad can be built using the `Either` type.

Constructors

 Nothing Just a

Instances

 Alternative Maybe Monad Maybe Functor Maybe MonadPlus Maybe Applicative Maybe Foldable Maybe Traversable Maybe Generic1 Maybe Eq a => Eq (Maybe a) Ord a => Ord (Maybe a) Read a => Read (Maybe a) Show a => Show (Maybe a) Generic (Maybe a) Monoid a => Monoid (Maybe a) Lift a semigroup into `Maybe` forming a `Monoid` according to http://en.wikipedia.org/wiki/Monoid: "Any semigroup `S` may be turned into a monoid simply by adjoining an element `e` not in `S` and defining `e*e = e` and `e*s = s = s*e` for all `s ∈ S`." Since there is no "Semigroup" typeclass providing just `mappend`, we use `Monoid` instead. type Rep1 Maybe = D1 D1Maybe ((:+:) (C1 C1_0Maybe U1) (C1 C1_1Maybe (S1 NoSelector Par1))) type Rep (Maybe a) = D1 D1Maybe ((:+:) (C1 C1_0Maybe U1) (C1 C1_1Maybe (S1 NoSelector (Rec0 a)))) type (==) (Maybe k) a b = EqMaybe k a b

data Ordering :: *

Constructors

 LT EQ GT

Instances

 Bounded Ordering Enum Ordering Eq Ordering Ord Ordering Read Ordering Show Ordering Ix Ordering Generic Ordering Monoid Ordering type Rep Ordering = D1 D1Ordering ((:+:) (C1 C1_0Ordering U1) ((:+:) (C1 C1_1Ordering U1) (C1 C1_2Ordering U1))) type (==) Ordering a b = EqOrdering a b

type FilePath = String

File and directory names are values of type `String`, whose precise meaning is operating system dependent. Files can be opened, yielding a handle which can then be used to operate on the contents of that file.

type IOError = IOException

The Haskell 2010 type for exceptions in the `IO` monad. Any I/O operation may raise an `IOError` instead of returning a result. For a more general type of exception, including also those that arise in pure code, see Control.Exception.Exception.

In Haskell 2010, this is an opaque type.

type Rational = Ratio Integer

Arbitrary-precision rational numbers, represented as a ratio of two `Integer` values. A rational number may be constructed using the `%` operator.

type ReadS a = String -> [(a, String)]

A parser for a type `a`, represented as a function that takes a `String` and returns a list of possible parses as `(a,String)` pairs.

Note that this kind of backtracking parser is very inefficient; reading a large structure may be quite slow (cf `ReadP`).

type ShowS = String -> String

The `shows` functions return a function that prepends the output `String` to an existing `String`. This allows constant-time concatenation of results using function composition.

type String = [Char]

A `String` is a list of characters. String constants in Haskell are values of type `String`.