Safe Haskell  Trustworthy 

Language  Haskell2010 
Synopsis
 either :: (a > c) > (b > c) > Either a b > c
 all :: Foldable t => (a > Bool) > t a > Bool
 and :: Foldable t => t Bool > Bool
 any :: Foldable t => (a > Bool) > t a > Bool
 concat :: Foldable t => t [a] > [a]
 concatMap :: Foldable t => (a > [b]) > t a > [b]
 mapM_ :: (Foldable t, Monad m) => (a > m b) > t a > m ()
 notElem :: (Foldable t, Eq a) => a > t a > Bool
 or :: Foldable t => t Bool > Bool
 sequence_ :: (Foldable t, Monad m) => t (m a) > m ()
 (<$>) :: Functor f => (a > b) > f a > f b
 maybe :: b > (a > b) > Maybe a > b
 lines :: String > [String]
 unlines :: [String] > String
 unwords :: [String] > String
 words :: String > [String]
 curry :: ((a, b) > c) > a > b > c
 fst :: (a, b) > a
 snd :: (a, b) > b
 uncurry :: (a > b > c) > (a, b) > c
 ($!) :: forall (r :: RuntimeRep) a (b :: TYPE r). (a > b) > a > b
 (++) :: [a] > [a] > [a]
 (.) :: (b > c) > (a > b) > a > c
 (=<<) :: Monad m => (a > m b) > m a > m b
 asTypeOf :: a > a > a
 const :: a > b > a
 flip :: (a > b > c) > b > a > c
 id :: a > a
 map :: (a > b) > [a] > [b]
 otherwise :: Bool
 until :: (a > Bool) > (a > a) > a > a
 ioError :: IOError > IO a
 userError :: String > IOError
 (!!) :: [a] > Int > a
 break :: (a > Bool) > [a] > ([a], [a])
 cycle :: [a] > [a]
 drop :: Int > [a] > [a]
 dropWhile :: (a > Bool) > [a] > [a]
 filter :: (a > Bool) > [a] > [a]
 head :: [a] > a
 init :: [a] > [a]
 iterate :: (a > a) > a > [a]
 last :: [a] > a
 lookup :: Eq a => a > [(a, b)] > Maybe b
 repeat :: a > [a]
 replicate :: Int > a > [a]
 reverse :: [a] > [a]
 scanl :: (b > a > b) > b > [a] > [b]
 scanl1 :: (a > a > a) > [a] > [a]
 scanr :: (a > b > b) > b > [a] > [b]
 scanr1 :: (a > a > a) > [a] > [a]
 span :: (a > Bool) > [a] > ([a], [a])
 splitAt :: Int > [a] > ([a], [a])
 tail :: [a] > [a]
 take :: Int > [a] > [a]
 takeWhile :: (a > Bool) > [a] > [a]
 unzip :: [(a, b)] > ([a], [b])
 unzip3 :: [(a, b, c)] > ([a], [b], [c])
 zip :: [a] > [b] > [(a, b)]
 zip3 :: [a] > [b] > [c] > [(a, b, c)]
 zipWith :: (a > b > c) > [a] > [b] > [c]
 zipWith3 :: (a > b > c > d) > [a] > [b] > [c] > [d]
 subtract :: Num a => a > a > a
 lex :: ReadS String
 readParen :: Bool > ReadS a > ReadS a
 (^) :: (Num a, Integral b) => a > b > a
 (^^) :: (Fractional a, Integral b) => a > b > a
 even :: Integral a => a > Bool
 fromIntegral :: (Integral a, Num b) => a > b
 gcd :: Integral a => a > a > a
 lcm :: Integral a => a > a > a
 odd :: Integral a => a > Bool
 realToFrac :: (Real a, Fractional b) => a > b
 showChar :: Char > ShowS
 showParen :: Bool > ShowS > ShowS
 showString :: String > ShowS
 shows :: Show a => a > ShowS
 appendFile :: FilePath > String > IO ()
 getChar :: IO Char
 getContents :: IO String
 getLine :: IO String
 interact :: (String > String) > IO ()
 print :: Show a => a > IO ()
 putChar :: Char > IO ()
 putStr :: String > IO ()
 putStrLn :: String > IO ()
 readFile :: FilePath > IO String
 readIO :: Read a => String > IO a
 readLn :: Read a => IO a
 writeFile :: FilePath > String > IO ()
 read :: Read a => String > a
 reads :: Read a => ReadS a
 (&&) :: Bool > Bool > Bool
 not :: Bool > Bool
 () :: Bool > Bool > Bool
 ($) :: forall (r :: RuntimeRep) a (b :: TYPE r). (a > b) > a > b
 error :: forall (r :: RuntimeRep) (a :: TYPE r). HasCallStack => [Char] > a
 errorWithoutStackTrace :: forall (r :: RuntimeRep) (a :: TYPE r). [Char] > a
 undefined :: forall (r :: RuntimeRep) (a :: TYPE r). HasCallStack => a
 seq :: forall {r :: RuntimeRep} a (b :: TYPE r). a > b > b
 elem :: (Foldable t, Eq a) => a > t a > Bool
 foldMap :: (Foldable t, Monoid m) => (a > m) > t a > m
 foldl :: Foldable t => (b > a > b) > b > t a > b
 foldl1 :: Foldable t => (a > a > a) > t a > a
 foldr :: Foldable t => (a > b > b) > b > t a > b
 foldr1 :: Foldable t => (a > a > a) > t a > a
 length :: Foldable t => t a > Int
 maximum :: (Foldable t, Ord a) => t a > a
 minimum :: (Foldable t, Ord a) => t a > a
 null :: Foldable t => t a > Bool
 product :: (Foldable t, Num a) => t a > a
 sum :: (Foldable t, Num a) => t a > a
 mapM :: (Traversable t, Monad m) => (a > m b) > t a > m (t b)
 sequence :: (Traversable t, Monad m) => t (m a) > m (t a)
 sequenceA :: (Traversable t, Applicative f) => t (f a) > f (t a)
 traverse :: (Traversable t, Applicative f) => (a > f b) > t a > f (t b)
 (*>) :: Applicative f => f a > f b > f b
 (<*) :: Applicative f => f a > f b > f a
 (<*>) :: Applicative f => f (a > b) > f a > f b
 pure :: Applicative f => a > f a
 liftA2 :: Applicative f => (a > b > c) > f a > f b > f c
 (<$) :: Functor f => a > f b > f a
 fmap :: Functor f => (a > b) > f a > f b
 (>>) :: Monad m => m a > m b > m b
 (>>=) :: Monad m => m a > (a > m b) > m b
 fail :: MonadFail m => String > m a
 return :: Monad m => a > m a
 mappend :: Monoid a => a > a > a
 mconcat :: Monoid a => [a] > a
 mempty :: Monoid a => a
 (<>) :: Semigroup a => a > a > a
 maxBound :: Bounded a => a
 minBound :: Bounded a => a
 enumFrom :: Enum a => a > [a]
 enumFromThen :: Enum a => a > a > [a]
 enumFromThenTo :: Enum a => a > a > a > [a]
 enumFromTo :: Enum a => a > a > [a]
 fromEnum :: Enum a => a > Int
 pred :: Enum a => a > a
 succ :: Enum a => a > a
 toEnum :: Enum a => Int > a
 (**) :: 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
 decodeFloat :: RealFloat a => a > (Integer, Int)
 encodeFloat :: RealFloat a => Integer > Int > a
 exponent :: RealFloat a => a > Int
 floatDigits :: RealFloat a => a > Int
 floatRadix :: RealFloat a => a > Integer
 floatRange :: RealFloat a => a > (Int, Int)
 isDenormalized :: RealFloat a => a > Bool
 isIEEE :: RealFloat a => a > Bool
 isInfinite :: RealFloat a => a > Bool
 isNaN :: RealFloat a => a > Bool
 isNegativeZero :: RealFloat a => a > Bool
 scaleFloat :: RealFloat a => Int > a > a
 significand :: RealFloat a => a > a
 (*) :: Num a => a > a > a
 (+) :: Num a => a > a > a
 () :: Num a => a > a > a
 abs :: Num a => a > a
 negate :: Num a => a > a
 signum :: Num a => a > a
 readList :: Read a => ReadS [a]
 readsPrec :: Read a => Int > ReadS a
 (/) :: Fractional a => a > a > a
 fromRational :: Fractional a => Rational > a
 recip :: Fractional a => a > a
 div :: Integral a => a > a > a
 divMod :: Integral a => a > a > (a, a)
 mod :: Integral a => a > a > a
 quot :: Integral a => a > a > a
 quotRem :: Integral a => a > a > (a, a)
 rem :: Integral a => a > a > a
 toInteger :: Integral a => a > Integer
 toRational :: Real a => a > Rational
 ceiling :: (RealFrac a, Integral b) => a > b
 floor :: (RealFrac a, Integral b) => a > b
 properFraction :: (RealFrac a, Integral b) => a > (b, a)
 round :: (RealFrac a, Integral b) => a > b
 truncate :: (RealFrac a, Integral b) => a > b
 show :: Show a => a > String
 showList :: Show a => [a] > ShowS
 showsPrec :: Show a => Int > a > ShowS
 (/=) :: 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 :: Type > Type)
 class Bounded a
 class Enum a
 class Eq a
 class Fractional a => Floating a
 class Foldable (t :: TYPE LiftedRep > Type)
 class Num a => Fractional a
 class Functor (f :: Type > Type)
 class (Real a, Enum a) => Integral a
 class Applicative m => Monad (m :: Type > Type)
 class Monad m => MonadFail (m :: Type > Type)
 class Semigroup a => Monoid a
 class Num a where
 fromInteger :: Integer > a
 class Eq a => Ord a
 class Read a
 class (Num a, Ord a) => Real a
 class (RealFrac a, Floating a) => RealFloat a
 class (Real a, Fractional a) => RealFrac a
 class Semigroup a
 class Show a
 class (Functor t, Foldable t) => Traversable (t :: Type > Type)
 data IO a
 data Char
 data Double
 data Float
 data Int
 data Integer
 data Word
 data Bool
 data Either a b
 data Maybe a
 data Ordering
 type FilePath = String
 type IOError = IOException
 type Rational = Ratio Integer
 type ReadS a = String > [(a, String)]
 type ShowS = String > String
 type String = [Char]
Documentation
either :: (a > c) > (b > c) > Either a b > c #
Case analysis for the Either
type.
If the value is
, apply the first function to Left
aa
;
if it is
, apply the second function to Right
bb
.
Examples
We create two values of type
, one using the
Either
String
Int
Left
constructor and another using the Right
constructor. Then
we apply "either" the length
function (if we have a String
)
or the "timestwo" function (if we have an Int
):
>>>
let s = Left "foo" :: Either String Int
>>>
let n = Right 3 :: Either String Int
>>>
either length (*2) s
3>>>
either length (*2) n
6
all :: Foldable t => (a > Bool) > t a > Bool #
Determines whether all elements of the structure satisfy the predicate.
Examples
Basic usage:
>>>
all (> 3) []
True
>>>
all (> 3) [1,2]
False
>>>
all (> 3) [1,2,3,4,5]
False
>>>
all (> 3) [1..]
False
>>>
all (> 3) [4..]
* Hangs forever *
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.
Examples
Basic usage:
>>>
and []
True
>>>
and [True]
True
>>>
and [False]
False
>>>
and [True, True, False]
False
>>>
and (False : repeat True)  Infinite list [False,True,True,True,...
False
>>>
and (repeat True)
* Hangs forever *
any :: Foldable t => (a > Bool) > t a > Bool #
Determines whether any element of the structure satisfies the predicate.
Examples
Basic usage:
>>>
any (> 3) []
False
>>>
any (> 3) [1,2]
False
>>>
any (> 3) [1,2,3,4,5]
True
>>>
any (> 3) [1..]
True
>>>
any (> 3) [0, 1..]
* Hangs forever *
concat :: Foldable t => t [a] > [a] #
The concatenation of all the elements of a container of lists.
Examples
Basic usage:
>>>
concat (Just [1, 2, 3])
[1,2,3]
>>>
concat (Left 42)
[]
>>>
concat [[1, 2, 3], [4, 5], [6], []]
[1,2,3,4,5,6]
concatMap :: Foldable t => (a > [b]) > t a > [b] #
Map a function over all the elements of a container and concatenate the resulting lists.
Examples
Basic usage:
>>>
concatMap (take 3) [[1..], [10..], [100..], [1000..]]
[1,2,3,10,11,12,100,101,102,1000,1001,1002]
>>>
concatMap (take 3) (Just [1..])
[1,2,3]
notElem :: (Foldable t, Eq a) => a > t a > Bool infix 4 #
notElem
is the negation of elem
.
Examples
Basic usage:
>>>
3 `notElem` []
True
>>>
3 `notElem` [1,2]
True
>>>
3 `notElem` [1,2,3,4,5]
False
For infinite structures, notElem
terminates if the value exists at a
finite distance from the left side of the structure:
>>>
3 `notElem` [1..]
False
>>>
3 `notElem` ([4..] ++ [3])
* Hangs forever *
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.
Examples
Basic usage:
>>>
or []
False
>>>
or [True]
True
>>>
or [False]
False
>>>
or [True, True, False]
True
>>>
or (True : repeat False)  Infinite list [True,False,False,False,...
True
>>>
or (repeat False)
* Hangs forever *
sequence_ :: (Foldable t, Monad m) => t (m a) > m () #
Evaluate each monadic action in the structure from left to right,
and ignore the results. For a version that doesn't ignore the
results see sequence
.
sequence_
is just like sequenceA_
, but specialised to monadic
actions.
(<$>) :: Functor f => (a > b) > f a > f b infixl 4 #
An infix synonym for fmap
.
The name of this operator is an allusion to $
.
Note the similarities between their types:
($) :: (a > b) > a > b (<$>) :: Functor f => (a > b) > f a > f b
Whereas $
is function application, <$>
is function
application lifted over a Functor
.
Examples
Convert from a
to a Maybe
Int
using Maybe
String
show
:
>>>
show <$> Nothing
Nothing>>>
show <$> Just 3
Just "3"
Convert from an
to an
Either
Int
Int
Either
Int
String
using show
:
>>>
show <$> Left 17
Left 17>>>
show <$> Right 17
Right "17"
Double each element of a list:
>>>
(*2) <$> [1,2,3]
[2,4,6]
Apply even
to the second element of a pair:
>>>
even <$> (2,2)
(2,True)
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.
Examples
Basic usage:
>>>
maybe False odd (Just 3)
True
>>>
maybe False odd Nothing
False
Read an integer from a string using readMaybe
. If we succeed,
return twice the integer; that is, apply (*2)
to it. If instead
we fail to parse an integer, return 0
by default:
>>>
import Text.Read ( readMaybe )
>>>
maybe 0 (*2) (readMaybe "5")
10>>>
maybe 0 (*2) (readMaybe "")
0
Apply show
to a Maybe Int
. If we have Just n
, we want to show
the underlying Int
n
. But if we have Nothing
, we return the
empty string instead of (for example) "Nothing":
>>>
maybe "" show (Just 5)
"5">>>
maybe "" show Nothing
""
lines
breaks a string up into a list of strings at newline
characters. The resulting strings do not contain newlines.
Note that after splitting the string at newline characters, the last part of the string is considered a line even if it doesn't end with a newline. For example,
>>>
lines ""
[]
>>>
lines "\n"
[""]
>>>
lines "one"
["one"]
>>>
lines "one\n"
["one"]
>>>
lines "one\n\n"
["one",""]
>>>
lines "one\ntwo"
["one","two"]
>>>
lines "one\ntwo\n"
["one","two"]
Thus
contains at least as many elements as newlines in lines
ss
.
words
breaks a string up into a list of words, which were delimited
by white space.
>>>
words "Lorem ipsum\ndolor"
["Lorem","ipsum","dolor"]
uncurry :: (a > b > c) > (a, b) > c #
uncurry
converts a curried function to a function on pairs.
Examples
>>>
uncurry (+) (1,2)
3
>>>
uncurry ($) (show, 1)
"1"
>>>
map (uncurry max) [(1,2), (3,4), (6,8)]
[2,4,8]
($!) :: forall (r :: RuntimeRep) a (b :: TYPE r). (a > b) > a > b infixr 0 #
Strict (callbyvalue) application operator. It takes a function and an argument, evaluates the argument to weak head normal form (WHNF), then calls the function with that value.
(++) :: [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.
(=<<) :: Monad m => (a > m b) > m a > m b infixr 1 #
Same as >>=
, but with the arguments interchanged.
const x
is a unary function which evaluates to x
for all inputs.
>>>
const 42 "hello"
42
>>>
map (const 42) [0..3]
[42,42,42,42]
flip :: (a > b > c) > b > a > c #
takes its (first) two arguments in the reverse order of flip
ff
.
>>>
flip (++) "hello" "world"
"worldhello"
map :: (a > b) > [a] > [b] #
\(\mathcal{O}(n)\). 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, ...]
>>>
map (+1) [1, 2, 3]
[2,3,4]
until :: (a > Bool) > (a > a) > a > a #
yields the result of applying until
p ff
until p
holds.
userError :: String > IOError #
Construct an IOException
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.
>>>
['a', 'b', 'c'] !! 0
'a'>>>
['a', 'b', 'c'] !! 2
'c'>>>
['a', 'b', 'c'] !! 3
*** Exception: Prelude.!!: index too large>>>
['a', 'b', 'c'] !! (1)
*** Exception: Prelude.!!: negative index
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],[])
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.
>>>
cycle []
*** Exception: Prelude.cycle: empty list>>>
take 20 $ cycle [42]
[42,42,42,42,42,42,42,42,42,42...>>>
take 20 $ cycle [2, 5, 7]
[2,5,7,2,5,7,2,5,7,2,5,7...
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.
filter :: (a > Bool) > [a] > [a] #
\(\mathcal{O}(n)\). 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]
>>>
filter odd [1, 2, 3]
[1,3]
\(\mathcal{O}(1)\). Extract the first element of a list, which must be nonempty.
>>>
head [1, 2, 3]
1>>>
head [1..]
1>>>
head []
*** Exception: Prelude.head: empty list
\(\mathcal{O}(n)\). Return all the elements of a list except the last one. The list must be nonempty.
>>>
init [1, 2, 3]
[1,2]>>>
init [1]
[]>>>
init []
*** Exception: Prelude.init: empty list
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), ...]
Note that iterate
is lazy, potentially leading to thunk buildup if
the consumer doesn't force each iterate. See iterate'
for a strict
variant of this function.
>>>
take 10 $ iterate not True
[True,False,True,False...>>>
take 10 $ iterate (+3) 42
[42,45,48,51,54,57,60,63...
\(\mathcal{O}(n)\). Extract the last element of a list, which must be finite and nonempty.
>>>
last [1, 2, 3]
3>>>
last [1..]
* Hangs forever *>>>
last []
*** Exception: Prelude.last: empty list
lookup :: Eq a => a > [(a, b)] > Maybe b #
\(\mathcal{O}(n)\). lookup
key assocs
looks up a key in an association
list.
>>>
lookup 2 []
Nothing>>>
lookup 2 [(1, "first")]
Nothing>>>
lookup 2 [(1, "first"), (2, "second"), (3, "third")]
Just "second"
repeat
x
is an infinite list, with x
the value of every element.
>>>
take 20 $ repeat 17
[17,17,17,17,17,17,17,17,17...
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.
>>>
replicate 0 True
[]>>>
replicate (1) True
[]>>>
replicate 4 True
[True,True,True,True]
reverse
xs
returns the elements of xs
in reverse order.
xs
must be finite.
>>>
reverse []
[]>>>
reverse [42]
[42]>>>
reverse [2,5,7]
[7,5,2]>>>
reverse [1..]
* Hangs forever *
scanl :: (b > a > b) > b > [a] > [b] #
\(\mathcal{O}(n)\). 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
>>>
scanl (+) 0 [1..4]
[0,1,3,6,10]>>>
scanl (+) 42 []
[42]>>>
scanl () 100 [1..4]
[100,99,97,94,90]>>>
scanl (\reversedString nextChar > nextChar : reversedString) "foo" ['a', 'b', 'c', 'd']
["foo","afoo","bafoo","cbafoo","dcbafoo"]>>>
scanl (+) 0 [1..]
* Hangs forever *
scanl1 :: (a > a > a) > [a] > [a] #
\(\mathcal{O}(n)\). scanl1
is a variant of scanl
that has no starting
value argument:
scanl1 f [x1, x2, ...] == [x1, x1 `f` x2, ...]
>>>
scanl1 (+) [1..4]
[1,3,6,10]>>>
scanl1 (+) []
[]>>>
scanl1 () [1..4]
[1,1,4,8]>>>
scanl1 (&&) [True, False, True, True]
[True,False,False,False]>>>
scanl1 () [False, False, True, True]
[False,False,True,True]>>>
scanl1 (+) [1..]
* Hangs forever *
scanr :: (a > b > b) > b > [a] > [b] #
\(\mathcal{O}(n)\). scanr
is the righttoleft dual of scanl
. Note that the order of parameters on the accumulating function are reversed compared to scanl
.
Also note that
head (scanr f z xs) == foldr f z xs.
>>>
scanr (+) 0 [1..4]
[10,9,7,4,0]>>>
scanr (+) 42 []
[42]>>>
scanr () 100 [1..4]
[98,97,99,96,100]>>>
scanr (\nextChar reversedString > nextChar : reversedString) "foo" ['a', 'b', 'c', 'd']
["abcdfoo","bcdfoo","cdfoo","dfoo","foo"]>>>
force $ scanr (+) 0 [1..]
*** Exception: stack overflow
scanr1 :: (a > a > a) > [a] > [a] #
\(\mathcal{O}(n)\). scanr1
is a variant of scanr
that has no starting
value argument.
>>>
scanr1 (+) [1..4]
[10,9,7,4]>>>
scanr1 (+) []
[]>>>
scanr1 () [1..4]
[2,3,1,4]>>>
scanr1 (&&) [True, False, True, True]
[False,False,True,True]>>>
scanr1 () [True, True, False, False]
[True,True,False,False]>>>
force $ scanr1 (+) [1..]
*** Exception: stack overflow
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])
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 (
when take
n xs, drop
n xs)n
is not __
(splitAt __ xs = __
).
splitAt
is an instance of the more general genericSplitAt
,
in which n
may be of any integral type.
\(\mathcal{O}(1)\). Extract the elements after the head of a list, which must be nonempty.
>>>
tail [1, 2, 3]
[2,3]>>>
tail [1]
[]>>>
tail []
*** Exception: Prelude.tail: empty list
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.
>>>
unzip []
([],[])>>>
unzip [(1, 'a'), (2, 'b')]
([1,2],"ab")
zip :: [a] > [b] > [(a, b)] #
\(\mathcal{O}(\min(m,n))\). zip
takes two lists and returns a list of
corresponding pairs.
>>>
zip [1, 2] ['a', 'b']
[(1,'a'),(2,'b')]
If one input list is shorter than the other, excess elements of the longer list are discarded, even if one of the lists is infinite:
>>>
zip [1] ['a', 'b']
[(1,'a')]>>>
zip [1, 2] ['a']
[(1,'a')]>>>
zip [] [1..]
[]>>>
zip [1..] []
[]
zip
is rightlazy:
>>>
zip [] undefined
[]>>>
zip undefined []
*** Exception: Prelude.undefined ...
zip
is capable of list fusion, but it is restricted to its
first list argument and its resulting list.
zipWith :: (a > b > c) > [a] > [b] > [c] #
\(\mathcal{O}(\min(m,n))\). zipWith
generalises zip
by zipping with the
function given as the first argument, instead of a tupling function.
zipWith (,) xs ys == zip xs ys zipWith f [x1,x2,x3..] [y1,y2,y3..] == [f x1 y1, f x2 y2, f x3 y3..]
For example,
is applied to two lists to produce the list of
corresponding sums:zipWith
(+)
>>>
zipWith (+) [1, 2, 3] [4, 5, 6]
[5,7,9]
zipWith
is rightlazy:
>>>
let f = undefined
>>>
zipWith f [] undefined
[]
zipWith
is capable of list fusion, but it is restricted to its
first list argument and its resulting list.
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 the function applied
to corresponding elements, analogous to zipWith
.
It is capable of list fusion, but it is restricted to its
first list argument and its resulting list.
zipWith3 (,,) xs ys zs == zip3 xs ys zs zipWith3 f [x1,x2,x3..] [y1,y2,y3..] [z1,z2,z3..] == [f x1 y1 z1, f x2 y2 z2, f x3 y3 z3..]
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
.) If there is no legal lexeme at the
beginning of the input string, lex
"" = [("","")]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
(^^) :: (Fractional a, Integral b) => a > b > a infixr 8 #
raise a number to an integral power
fromIntegral :: (Integral a, Num b) => a > b #
general coercion from integral types
gcd :: Integral a => a > a > a #
is the nonnegative factor of both gcd
x yx
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 44
.
= gcd
0 00
.
(That is, the common divisor that is "greatest" in the divisibility
preordering.)
Note: Since for signed fixedwidth integer types,
,
the result may be negative if one of the arguments is abs
minBound
< 0
(and
necessarily is if the other is minBound
0
or
) for such types.minBound
lcm :: Integral a => a > a > a #
is the smallest positive integer that both lcm
x yx
and y
divide.
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.
showString :: String > ShowS #
utility function converting a String
to a show function that
simply prepends the string unchanged.
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]])
getContents :: IO String #
The getContents
operation returns all user input as a single string,
which is read lazily as it is needed
(same as hGetContents
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]])
readFile :: FilePath > IO String #
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
.
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. read
fails with an error
if the
parse is unsuccessful, and it is therefore discouraged from being used in
real applications. Use readMaybe
or readEither
for safe alternatives.
>>>
read "123" :: Int
123
>>>
read "hello" :: Int
*** Exception: Prelude.read: no parse
($) :: forall (r :: RuntimeRep) a (b :: TYPE r). (a > b) > a > b infixr 0 #
Application operator. This operator is redundant, since ordinary
application (f x)
means the same as (f
. However, $
x)$
has
low, rightassociative 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 higherorder situations, such as
,
or map
($
0) xs
.zipWith
($
) fs xs
Note that (
is levitypolymorphic in its result type, so that
$
)foo
where $
Truefoo :: Bool > Int#
is welltyped.
error :: forall (r :: RuntimeRep) (a :: TYPE r). HasCallStack => [Char] > a #
error
stops execution and displays an error message.
errorWithoutStackTrace :: forall (r :: RuntimeRep) (a :: TYPE r). [Char] > a #
A variant of error
that does not produce a stack trace.
Since: base4.9.0.0
undefined :: forall (r :: RuntimeRep) (a :: TYPE r). HasCallStack => a #
seq :: forall {r :: RuntimeRep} a (b :: TYPE r). a > b > b infixr 0 #
The value of seq a b
is bottom if a
is bottom, and
otherwise equal to b
. In other words, it evaluates the first
argument a
to weak head normal form (WHNF). seq
is usually
introduced to improve performance by avoiding unneeded laziness.
A note on evaluation order: the expression seq a b
does
not guarantee that a
will be evaluated before b
.
The only guarantee given by seq
is that the both a
and b
will be evaluated before seq
returns a value.
In particular, this means that b
may be evaluated before
a
. If you need to guarantee a specific order of evaluation,
you must use the function pseq
from the "parallel" package.
elem :: (Foldable t, Eq a) => a > t a > Bool infix 4 #
Does the element occur in the structure?
Note: elem
is often used in infix form.
Examples
Basic usage:
>>>
3 `elem` []
False
>>>
3 `elem` [1,2]
False
>>>
3 `elem` [1,2,3,4,5]
True
For infinite structures, the default implementation of elem
terminates if the soughtafter value exists at a finite distance
from the left side of the structure:
>>>
3 `elem` [1..]
True
>>>
3 `elem` ([4..] ++ [3])
* Hangs forever *
Since: base4.8.0.0
foldMap :: (Foldable t, Monoid m) => (a > m) > t a > m #
Map each element of the structure into a monoid, and combine the
results with (
. This fold is rightassociative and lazy in the
accumulator. For strict leftassociative folds consider <>
)foldMap'
instead.
Examples
Basic usage:
>>>
foldMap Sum [1, 3, 5]
Sum {getSum = 9}
>>>
foldMap Product [1, 3, 5]
Product {getProduct = 15}
>>>
foldMap (replicate 3) [1, 2, 3]
[1,1,1,2,2,2,3,3,3]
When a Monoid's (
is lazy in its second argument, <>
)foldMap
can
return a result even from an unbounded structure. For example, lazy
accumulation enables Data.ByteString.Builder to efficiently serialise
large data structures and produce the output incrementally:
>>>
import qualified Data.ByteString.Lazy as L
>>>
import qualified Data.ByteString.Builder as B
>>>
let bld :: Int > B.Builder; bld i = B.intDec i <> B.word8 0x20
>>>
let lbs = B.toLazyByteString $ foldMap bld [0..]
>>>
L.take 64 lbs
"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"
foldl :: Foldable t => (b > a > b) > b > t a > b #
Leftassociative fold of a structure, lazy in the accumulator. This is rarely what you want, but can work well for structures with efficient righttoleft sequencing and an operator that is lazy in its left argument.
In the case of lists, foldl
, when applied to a binary operator, a
starting value (typically the leftidentity of the operator), and a
list, reduces the list using the binary operator, from left to right:
foldl f z [x1, x2, ..., xn] == (...((z `f` x1) `f` x2) `f`...) `f` xn
Note that to produce the outermost application of the operator the
entire input list must be traversed. Like all leftassociative folds,
foldl
will diverge if given an infinite list.
If you want an efficient strict leftfold, you probably want to use
foldl'
instead of foldl
. The reason for this is that the latter
does not force the inner results (e.g. z `f` x1
in the above
example) before applying them to the operator (e.g. to (`f` x2)
).
This results in a thunk chain \(\mathcal{O}(n)\) elements long, which
then must be evaluated from the outsidein.
For a general Foldable
structure this should be semantically identical
to:
foldl f z =foldl
f z .toList
Examples
The first example is a strict fold, which in practice is best performed
with foldl'
.
>>>
foldl (+) 42 [1,2,3,4]
52
Though the result below is lazy, the input is reversed before prepending it to the initial accumulator, so corecursion begins only after traversing the entire input string.
>>>
foldl (\acc c > c : acc) "abcd" "efgh"
"hgfeabcd"
A left fold of a structure that is infinite on the right cannot terminate, even when for any finite input the fold just returns the initial accumulator:
>>>
foldl (\a _ > a) 0 $ repeat 1
* Hangs forever *
WARNING: When it comes to lists, you always want to use either foldl'
or foldr
instead.
foldl1 :: Foldable t => (a > a > a) > t a > a #
A variant of foldl
that has no base case,
and thus may only be applied to nonempty structures.
This function is nontotal and will raise a runtime exception if the structure happens to be empty.
foldl1
f =foldl1
f .toList
Examples
Basic usage:
>>>
foldl1 (+) [1..4]
10
>>>
foldl1 (+) []
*** Exception: Prelude.foldl1: empty list
>>>
foldl1 (+) Nothing
*** Exception: foldl1: empty structure
>>>
foldl1 () [1..4]
8
>>>
foldl1 (&&) [True, False, True, True]
False
>>>
foldl1 () [False, False, True, True]
True
>>>
foldl1 (+) [1..]
* Hangs forever *
foldr :: Foldable t => (a > b > b) > b > t a > b #
Rightassociative fold of a structure, lazy in the accumulator.
In the case of lists, foldr
, when applied to a binary operator, a
starting value (typically the rightidentity of the operator), and a
list, reduces the list using the binary operator, from right to left:
foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...)
Note that since the head of the resulting expression is produced by an
application of the operator to the first element of the list, given an
operator lazy in its right argument, foldr
can produce a terminating
expression from an unbounded list.
For a general Foldable
structure this should be semantically identical
to,
foldr f z =foldr
f z .toList
Examples
Basic usage:
>>>
foldr () False [False, True, False]
True
>>>
foldr () False []
False
>>>
foldr (\c acc > acc ++ [c]) "foo" ['a', 'b', 'c', 'd']
"foodcba"
Infinite structures
⚠️ Applying foldr
to infinite structures usually doesn't terminate.
It may still terminate under one of the following conditions:
 the folding function is shortcircuiting
 the folding function is lazy on its second argument
Shortcircuiting
(
shortcircuits on 
)True
values, so the following terminates
because there is a True
value finitely far from the left side:
>>>
foldr () False (True : repeat False)
True
But the following doesn't terminate:
>>>
foldr () False (repeat False ++ [True])
* Hangs forever *
Laziness in the second argument
Applying foldr
to infinite structures terminates when the operator is
lazy in its second argument (the initial accumulator is never used in
this case, and so could be left undefined
, but []
is more clear):
>>>
take 5 $ foldr (\i acc > i : fmap (+3) acc) [] (repeat 1)
[1,4,7,10,13]
foldr1 :: Foldable t => (a > a > a) > t a > a #
A variant of foldr
that has no base case,
and thus may only be applied to nonempty structures.
This function is nontotal and will raise a runtime exception if the structure happens to be empty.
Examples
Basic usage:
>>>
foldr1 (+) [1..4]
10
>>>
foldr1 (+) []
Exception: Prelude.foldr1: empty list
>>>
foldr1 (+) Nothing
*** Exception: foldr1: empty structure
>>>
foldr1 () [1..4]
2
>>>
foldr1 (&&) [True, False, True, True]
False
>>>
foldr1 () [False, False, True, True]
True
>>>
foldr1 (+) [1..]
* Hangs forever *
length :: Foldable t => t a > Int #
Returns the size/length of a finite structure as an Int
. The
default implementation just counts elements starting with the leftmost.
Instances for structures that can compute the element count faster
than via elementbyelement counting, should provide a specialised
implementation.
Examples
Basic usage:
>>>
length []
0
>>>
length ['a', 'b', 'c']
3>>>
length [1..]
* Hangs forever *
Since: base4.8.0.0
maximum :: (Foldable t, Ord a) => t a > a #
The largest element of a nonempty structure.
This function is nontotal and will raise a runtime exception if the structure happens to be empty. A structure that supports random access and maintains its elements in order should provide a specialised implementation to return the maximum in faster than linear time.
Examples
Basic usage:
>>>
maximum [1..10]
10
>>>
maximum []
*** Exception: Prelude.maximum: empty list
>>>
maximum Nothing
*** Exception: maximum: empty structure
WARNING: This function is partial for possiblyempty structures like lists.
Since: base4.8.0.0
minimum :: (Foldable t, Ord a) => t a > a #
The least element of a nonempty structure.
This function is nontotal and will raise a runtime exception if the structure happens to be empty. A structure that supports random access and maintains its elements in order should provide a specialised implementation to return the minimum in faster than linear time.
Examples
Basic usage:
>>>
minimum [1..10]
1
>>>
minimum []
*** Exception: Prelude.minimum: empty list
>>>
minimum Nothing
*** Exception: minimum: empty structure
WARNING: This function is partial for possiblyempty structures like lists.
Since: base4.8.0.0
null :: Foldable t => t a > Bool #
Test whether the structure is empty. The default implementation is Leftassociative and lazy in both the initial element and the accumulator. Thus optimised for structures where the first element can be accessed in constant time. Structures where this is not the case should have a nondefault implementation.
Examples
Basic usage:
>>>
null []
True
>>>
null [1]
False
null
is expected to terminate even for infinite structures.
The default implementation terminates provided the structure
is bounded on the left (there is a leftmost element).
>>>
null [1..]
False
Since: base4.8.0.0
product :: (Foldable t, Num a) => t a > a #
The product
function computes the product of the numbers of a
structure.
Examples
Basic usage:
>>>
product []
1
>>>
product [42]
42
>>>
product [1..10]
3628800
>>>
product [4.1, 2.0, 1.7]
13.939999999999998
>>>
product [1..]
* Hangs forever *
Since: base4.8.0.0
sum :: (Foldable t, Num a) => t a > a #
The sum
function computes the sum of the numbers of a structure.
Examples
Basic usage:
>>>
sum []
0
>>>
sum [42]
42
>>>
sum [1..10]
55
>>>
sum [4.1, 2.0, 1.7]
7.8
>>>
sum [1..]
* Hangs forever *
Since: base4.8.0.0
mapM :: (Traversable t, 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. For
a version that ignores the results see mapM_
.
Examples
sequence :: (Traversable t, Monad m) => t (m a) > m (t a) #
Evaluate each monadic action in the structure from left to
right, and collect the results. For a version that ignores the
results see sequence_
.
Examples
Basic usage:
The first two examples are instances where the input and
and output of sequence
are isomorphic.
>>>
sequence $ Right [1,2,3,4]
[Right 1,Right 2,Right 3,Right 4]
>>>
sequence $ [Right 1,Right 2,Right 3,Right 4]
Right [1,2,3,4]
The following examples demonstrate short circuit behavior
for sequence
.
>>>
sequence $ Left [1,2,3,4]
Left [1,2,3,4]
>>>
sequence $ [Left 0, Right 1,Right 2,Right 3,Right 4]
Left 0
sequenceA :: (Traversable t, Applicative f) => t (f a) > f (t a) #
Evaluate each action in the structure from left to right, and
collect the results. For a version that ignores the results
see sequenceA_
.
Examples
Basic usage:
For the first two examples we show sequenceA fully evaluating a a structure and collecting the results.
>>>
sequenceA [Just 1, Just 2, Just 3]
Just [1,2,3]
>>>
sequenceA [Right 1, Right 2, Right 3]
Right [1,2,3]
The next two example show Nothing
and Just
will short circuit
the resulting structure if present in the input. For more context,
check the Traversable
instances for Either
and Maybe
.
>>>
sequenceA [Just 1, Just 2, Just 3, Nothing]
Nothing
>>>
sequenceA [Right 1, Right 2, Right 3, Left 4]
Left 4
traverse :: (Traversable t, 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. For a version that ignores
the results see traverse_
.
Examples
Basic usage:
In the first two examples we show each evaluated action mapping to the output structure.
>>>
traverse Just [1,2,3,4]
Just [1,2,3,4]
>>>
traverse id [Right 1, Right 2, Right 3, Right 4]
Right [1,2,3,4]
In the next examples, we show that Nothing
and Left
values short
circuit the created structure.
>>>
traverse (const Nothing) [1,2,3,4]
Nothing
>>>
traverse (\x > if odd x then Just x else Nothing) [1,2,3,4]
Nothing
>>>
traverse id [Right 1, Right 2, Right 3, Right 4, Left 0]
Left 0
(*>) :: Applicative f => f a > f b > f b infixl 4 #
Sequence actions, discarding the value of the first argument.
Examples
If used in conjunction with the Applicative instance for Maybe
,
you can chain Maybe computations, with a possible "early return"
in case of Nothing
.
>>>
Just 2 *> Just 3
Just 3
>>>
Nothing *> Just 3
Nothing
Of course a more interesting use case would be to have effectful computations instead of just returning pure values.
>>>
import Data.Char
>>>
import Text.ParserCombinators.ReadP
>>>
let p = string "my name is " *> munch1 isAlpha <* eof
>>>
readP_to_S p "my name is Simon"
[("Simon","")]
(<*) :: Applicative f => f a > f b > f a infixl 4 #
Sequence actions, discarding the value of the second argument.
(<*>) :: Applicative f => f (a > b) > f a > f b infixl 4 #
Sequential application.
A few functors support an implementation of <*>
that is more
efficient than the default one.
Example
Used in combination with (
, <$>
)(
can be used to build a record.<*>
)
>>>
data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz}
>>>
produceFoo :: Applicative f => f Foo
>>>
produceBar :: Applicative f => f Bar
>>>
produceBaz :: Applicative f => f Baz
>>>
mkState :: Applicative f => f MyState
>>>
mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz
pure :: Applicative f => a > f a #
Lift a value.
liftA2 :: Applicative f => (a > b > c) > f a > f b > f c #
Lift a binary function to actions.
Some functors support an implementation of liftA2
that is more
efficient than the default one. In particular, if fmap
is an
expensive operation, it is likely better to use liftA2
than to
fmap
over the structure and then use <*>
.
This became a typeclass method in 4.10.0.0. Prior to that, it was
a function defined in terms of <*>
and fmap
.
Example
>>>
liftA2 (,) (Just 3) (Just 5)
Just (3,5)
fmap :: Functor f => (a > b) > f a > f b #
fmap
is used to apply a function of type (a > b)
to a value of type f a
,
where f is a functor, to produce a value of type f b
.
Note that for any type constructor with more than one parameter (e.g., Either
),
only the last type parameter can be modified with fmap
(e.g., b
in `Either a b`).
Some type constructors with two parameters or more have a
instance that allows
both the last and the penultimate parameters to be mapped over.Bifunctor
Examples
Convert from a
to a Maybe
IntMaybe String
using show
:
>>>
fmap show Nothing
Nothing>>>
fmap show (Just 3)
Just "3"
Convert from an
to an
Either
Int IntEither Int String
using show
:
>>>
fmap show (Left 17)
Left 17>>>
fmap show (Right 17)
Right "17"
Double each element of a list:
>>>
fmap (*2) [1,2,3]
[2,4,6]
Apply even
to the second element of a pair:
>>>
fmap even (2,2)
(2,True)
It may seem surprising that the function is only applied to the last element of the tuple
compared to the list example above which applies it to every element in the list.
To understand, remember that tuples are type constructors with multiple type parameters:
a tuple of 3 elements (a,b,c)
can also be written (,,) a b c
and its Functor
instance
is defined for Functor ((,,) a b)
(i.e., only the third parameter is free to be mapped over
with fmap
).
It explains why fmap
can be used with tuples containing values of different types as in the
following example:
>>>
fmap even ("hello", 1.0, 4)
("hello",1.0,True)
(>>) :: Monad m => 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.
'as
' can be understood as the >>
bsdo
expression
do as bs
(>>=) :: Monad m => 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.
'as
' can be understood as the >>=
bsdo
expression
do a < as bs a
mappend :: Monoid a => a > a > a #
An associative operation
NOTE: This method is redundant and has the default
implementation
since base4.11.0.0.
Should it be implemented manually, since mappend
= (<>
)mappend
is a synonym for
(<>
), it is expected that the two functions are defined the same
way. In a future GHC release mappend
will be removed from Monoid
.
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.
>>>
mconcat ["Hello", " ", "Haskell", "!"]
"Hello Haskell!"
(<>) :: Semigroup a => a > a > a infixr 6 #
An associative operation.
>>>
[1,2,3] <> [4,5,6]
[1,2,3,4,5,6]
enumFrom :: Enum a => a > [a] #
Used in Haskell's translation of [n..]
with [n..] = enumFrom n
,
a possible implementation being enumFrom n = n : enumFrom (succ n)
.
For example:
enumFrom 4 :: [Integer] = [4,5,6,7,...]
enumFrom 6 :: [Int] = [6,7,8,9,...,maxBound :: Int]
enumFromThen :: Enum a => a > a > [a] #
Used in Haskell's translation of [n,n'..]
with [n,n'..] = enumFromThen n n'
, a possible implementation being
enumFromThen n n' = n : n' : worker (f x) (f x n')
,
worker s v = v : worker s (s v)
, x = fromEnum n'  fromEnum n
and
f n y
 n > 0 = f (n  1) (succ y)
 n < 0 = f (n + 1) (pred y)
 otherwise = y
For example:
enumFromThen 4 6 :: [Integer] = [4,6,8,10...]
enumFromThen 6 2 :: [Int] = [6,2,2,6,...,minBound :: Int]
enumFromThenTo :: Enum a => a > a > a > [a] #
Used in Haskell's translation of [n,n'..m]
with
[n,n'..m] = enumFromThenTo n n' m
, a possible implementation
being enumFromThenTo n n' m = worker (f x) (c x) n m
,
x = fromEnum n'  fromEnum n
, c x = bool (>=) ((x 0)
f n y
 n > 0 = f (n  1) (succ y)
 n < 0 = f (n + 1) (pred y)
 otherwise = y
and
worker s c v m
 c v m = v : worker s c (s v) m
 otherwise = []
For example:
enumFromThenTo 4 2 6 :: [Integer] = [4,2,0,2,4,6]
enumFromThenTo 6 8 2 :: [Int] = []
enumFromTo :: Enum a => a > a > [a] #
Used in Haskell's translation of [n..m]
with
[n..m] = enumFromTo n m
, a possible implementation being
enumFromTo n m
 n <= m = n : enumFromTo (succ n) m
 otherwise = []
.
For example:
enumFromTo 6 10 :: [Int] = [6,7,8,9,10]
enumFromTo 42 1 :: [Integer] = []
atan2 :: RealFloat a => a > a > a #
a version of arctangent taking two real floatingpoint arguments.
For real floating x
and y
,
computes the angle
(from the positive xaxis) of the vector from the origin to the
point atan2
y x(x,y)
.
returns a value in the range [atan2
y xpi
,
pi
]. It follows the Common Lisp semantics for the origin when
signed zeroes are supported.
, with atan2
y 1y
in a type
that is RealFloat
, should return the same value as
.
A default definition of atan
yatan2
is provided, but implementors
can provide a more accurate implementation.
decodeFloat :: RealFloat a => a > (Integer, Int) #
The function decodeFloat
applied to a real floatingpoint
number returns the significand expressed as an Integer
and an
appropriately scaled exponent (an Int
). If
yields decodeFloat
x(m,n)
, then x
is equal in value to m*b^^n
, where b
is the floatingpoint radix, and furthermore, either m
and n
are both zero or else b^(d1) <=
, where abs
m < b^dd
is
the value of
.
In particular, floatDigits
x
. If the type
contains a negative zero, also decodeFloat
0 = (0,0)
.
The result of decodeFloat
(0.0) = (0,0)
is unspecified if either of
decodeFloat
x
or isNaN
x
is isInfinite
xTrue
.
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
is one of the two closest representable
floatingpoint numbers to encodeFloat
m nm*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
.
and for finite nonzero exponent
0 = 0x
,
.
If exponent
x = snd (decodeFloat
x) + floatDigits
xx
is a finite floatingpoint number, it is equal in value to
, where significand
x * b ^^ exponent
xb
is the
floatingpoint 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
isInfinite :: RealFloat a => a > Bool #
True
if the argument is an IEEE infinity or negative infinity
isNegativeZero :: RealFloat a => a > Bool #
True
if the argument is an IEEE negative zero
scaleFloat :: RealFloat a => Int > a > a #
multiplies a floatingpoint 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 floatingpoint radix.
The behaviour is unspecified on infinite or NaN
values.
:: Read a  
=> Int  the operator precedence of the enclosing
context (a number from 
> 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:
That is, readsPrec
parses the string produced by
showsPrec
, and delivers the value that
showsPrec
started with.
(/) :: Fractional a => a > a > a infixl 7 #
Fractional division.
fromRational :: Fractional a => Rational > a #
Conversion from a Rational
(that is
).
A floating literal stands for an application of Ratio
Integer
fromRational
to a value of type Rational
, so such literals have type
(
.Fractional
a) => a
recip :: Fractional a => a > a #
Reciprocal fraction.
mod :: Integral a => a > a > a infixl 7 #
integer modulus, satisfying
(x `div` y)*y + (x `mod` y) == x
rem :: Integral a => a > a > a infixl 7 #
integer remainder, satisfying
(x `quot` y)*y + (x `rem` y) == x
toRational :: Real a => a > Rational #
the rational equivalent of its real argument with full precision
floor :: (RealFrac a, Integral b) => a > b #
returns the greatest integer not greater than floor
xx
properFraction :: (RealFrac a, 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 asx
; andf
is a fraction with the same type and sign asx
, and with absolute value less than1
.
The default definitions of the ceiling
, floor
, truncate
and round
functions are in terms of properFraction
.
round :: (RealFrac a, Integral b) => a > b #
returns the nearest integer to round
xx
;
the even integer if x
is equidistant between two integers
truncate :: (RealFrac a, Integral b) => a > b #
returns the integer nearest truncate
xx
between zero and x
:: Show a  
=> Int  the operator precedence of the enclosing
context (a number from 
> a  the value to be converted to a 
> ShowS 
class Functor f => Applicative (f :: Type > Type) #
A functor with application, providing operations to
A minimal complete definition must include implementations of pure
and of either <*>
or liftA2
. If it defines both, then they must behave
the same as their default definitions:
(<*>
) =liftA2
id
liftA2
f x y = f<$>
x<*>
y
Further, any definition must satisfy the following:
 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:
As a consequence of these laws, the Functor
instance for f
will satisfy
It may be useful to note that supposing
forall x y. p (q x y) = f x . g y
it follows from the above that
liftA2
p (liftA2
q u v) =liftA2
f u .liftA2
g v
If f
is also a Monad
, it should satisfy
(which implies that pure
and <*>
satisfy the applicative functor laws).
Instances
Applicative ZipList  f <$> ZipList xs1 <*> ... <*> ZipList xsN = ZipList (zipWithN f xs1 ... xsN) where (\a b c > stimes c [a, b]) <$> ZipList "abcd" <*> ZipList "567" <*> ZipList [1..] = ZipList (zipWith3 (\a b c > stimes c [a, b]) "abcd" "567" [1..]) = ZipList {getZipList = ["a5","b6b6","c7c7c7"]} Since: base2.1 
Applicative Complex  Since: base4.9.0.0 
Applicative Identity  Since: base4.8.0.0 
Applicative First  Since: base4.8.0.0 
Applicative Last  Since: base4.8.0.0 
Applicative Down  Since: base4.11.0.0 
Applicative First  Since: base4.9.0.0 
Applicative Last  Since: base4.9.0.0 
Applicative Max  Since: base4.9.0.0 
Applicative Min  Since: base4.9.0.0 
Applicative Dual  Since: base4.8.0.0 
Applicative Product  Since: base4.8.0.0 
Applicative Sum  Since: base4.8.0.0 
Applicative STM  Since: base4.8.0.0 
Applicative Par1  Since: base4.9.0.0 
Applicative P  Since: base4.5.0.0 
Applicative ReadP  Since: base4.6.0.0 
Applicative ReadPrec  Since: base4.6.0.0 
Applicative IO  Since: base2.1 
Applicative NonEmpty  Since: base4.9.0.0 
Applicative Maybe  Since: base2.1 
Applicative Solo  Since: base4.15 
Applicative []  Since: base2.1 
Monad m => Applicative (WrappedMonad m)  Since: base2.1 
Defined in Control.Applicative pure :: a > WrappedMonad m a # (<*>) :: WrappedMonad m (a > b) > WrappedMonad m a > WrappedMonad m b # liftA2 :: (a > b > c) > WrappedMonad m a > WrappedMonad m b > WrappedMonad m c # (*>) :: WrappedMonad m a > WrappedMonad m b > WrappedMonad m b # (<*) :: WrappedMonad m a > WrappedMonad m b > WrappedMonad m a #  
Applicative (ST s)  Since: base2.1 
Applicative (Either e)  Since: base3.0 
Applicative (Proxy :: Type > Type)  Since: base4.7.0.0 
Applicative (U1 :: Type > Type)  Since: base4.9.0.0 
Applicative (ST s)  Since: base4.4.0.0 
Monoid a => Applicative ((,) a)  For tuples, the ("hello ", (+15)) <*> ("world!", 2002) ("hello world!",2017) Since: base2.1 
Arrow a => Applicative (WrappedArrow a b)  Since: base2.1 
Defined in Control.Applicative pure :: a0 > WrappedArrow a b a0 # (<*>) :: WrappedArrow a b (a0 > b0) > WrappedArrow a b a0 > WrappedArrow a b b0 # liftA2 :: (a0 > b0 > c) > WrappedArrow a b a0 > WrappedArrow a b b0 > WrappedArrow a b c # (*>) :: WrappedArrow a b a0 > WrappedArrow a b b0 > WrappedArrow a b b0 # (<*) :: WrappedArrow a b a0 > WrappedArrow a b b0 > WrappedArrow a b a0 #  
Monoid m => Applicative (Const m :: Type > Type)  Since: base2.0.1 
Applicative f => Applicative (Ap f)  Since: base4.12.0.0 
Applicative f => Applicative (Alt f)  Since: base4.8.0.0 
Applicative f => Applicative (Rec1 f)  Since: base4.9.0.0 
(Monoid a, Monoid b) => Applicative ((,,) a b)  Since: base4.14.0.0 
(Applicative f, Applicative g) => Applicative (Product f g)  Since: base4.9.0.0 
Defined in Data.Functor.Product  
(Applicative f, Applicative g) => Applicative (f :*: g)  Since: base4.9.0.0 
Monoid c => Applicative (K1 i c :: Type > Type)  Since: base4.12.0.0 
(Monoid a, Monoid b, Monoid c) => Applicative ((,,,) a b c)  Since: base4.14.0.0 
Defined in GHC.Base  
Applicative ((>) r)  Since: base2.1 
(Applicative f, Applicative g) => Applicative (Compose f g)  Since: base4.9.0.0 
Defined in Data.Functor.Compose  
(Applicative f, Applicative g) => Applicative (f :.: g)  Since: base4.9.0.0 
Applicative f => Applicative (M1 i c f)  Since: base4.9.0.0 
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 singleconstructor datatypes whose
constituent types are in Bounded
.
Instances
Bounded All  Since: base2.1 
Bounded Any  Since: base2.1 
Bounded IntPtr  
Bounded WordPtr  
Bounded Associativity  Since: base4.9.0.0 
Defined in GHC.Generics  
Bounded DecidedStrictness  Since: base4.9.0.0 
Defined in GHC.Generics  
Bounded SourceStrictness  Since: base4.9.0.0 
Defined in GHC.Generics  
Bounded SourceUnpackedness  Since: base4.9.0.0 
Defined in GHC.Generics  
Bounded Int16  Since: base2.1 
Bounded Int32  Since: base2.1 
Bounded Int64  Since: base2.1 
Bounded Int8  Since: base2.1 
Bounded Word16  Since: base2.1 
Bounded Word32  Since: base2.1 
Bounded Word64  Since: base2.1 
Bounded Word8  Since: base2.1 
Bounded Ordering  Since: base2.1 
Bounded ()  Since: base2.1 
Bounded Bool  Since: base2.1 
Bounded Char  Since: base2.1 
Bounded Int  Since: base2.1 
Bounded Levity  Since: base4.16.0.0 
Bounded VecCount  Since: base4.10.0.0 
Bounded VecElem  Since: base4.10.0.0 
Bounded Word  Since: base2.1 
Bounded a => Bounded (And a)  Since: base4.16 
Bounded a => Bounded (Iff a)  Since: base4.16 
Bounded a => Bounded (Ior a)  Since: base4.16 
Bounded a => Bounded (Xor a)  Since: base4.16 
Bounded a => Bounded (Identity a)  Since: base4.9.0.0 
Bounded a => Bounded (Down a)  Swaps Since: base4.14.0.0 
Bounded a => Bounded (First a)  Since: base4.9.0.0 
Bounded a => Bounded (Last a)  Since: base4.9.0.0 
Bounded a => Bounded (Max a)  Since: base4.9.0.0 
Bounded a => Bounded (Min a)  Since: base4.9.0.0 
Bounded m => Bounded (WrappedMonoid m)  Since: base4.9.0.0 
Defined in Data.Semigroup minBound :: WrappedMonoid m # maxBound :: WrappedMonoid m #  
Bounded a => Bounded (Dual a)  Since: base2.1 
Bounded a => Bounded (Product a)  Since: base2.1 
Bounded a => Bounded (Sum a)  Since: base2.1 
Bounded a => Bounded (a)  
Bounded (Proxy t)  Since: base4.7.0.0 
(Bounded a, Bounded b) => Bounded (a, b)  Since: base2.1 
Bounded a => Bounded (Const a b)  Since: base4.9.0.0 
(Applicative f, Bounded a) => Bounded (Ap f a)  Since: base4.12.0.0 
Coercible a b => Bounded (Coercion a b)  Since: base4.7.0.0 
a ~ b => Bounded (a :~: b)  Since: base4.7.0.0 
(Bounded a, Bounded b, Bounded c) => Bounded (a, b, c)  Since: base2.1 
a ~~ b => Bounded (a :~~: b)  Since: base4.10.0.0 
(Bounded a, Bounded b, Bounded c, Bounded d) => Bounded (a, b, c, d)  Since: base2.1 
(Bounded a, Bounded b, Bounded c, Bounded d, Bounded e) => Bounded (a, b, c, d, e)  Since: base2.1 
(Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f) => Bounded (a, b, c, d, e, f)  Since: base2.1 
(Bounded a, Bounded b, Bounded c, Bounded d, Bounded e, Bounded f, Bounded g) => Bounded (a, b, c, d, e, f, g)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
(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)  Since: base2.1 
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 lefttoright by fromEnum
from 0
through n1
.
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
andsucc
maxBound
should result in a runtime error.pred
minBound
fromEnum
andtoEnum
should give a runtime error if the result value is not representable in the result type. For example,
is an error.toEnum
7 ::Bool
enumFrom
andenumFromThen
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
Instances
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
.
The Haskell Report defines no laws for Eq
. However, instances are
encouraged to follow these properties:
Instances
Eq All  Since: base2.1 
Eq Any  Since: base2.1 
Eq SomeTypeRep  
Defined in Data.Typeable.Internal (==) :: SomeTypeRep > SomeTypeRep > Bool # (/=) :: SomeTypeRep > SomeTypeRep > Bool #  
Eq Version  Since: base2.1 
Eq Void  Since: base4.8.0.0 
Eq IntPtr  
Eq WordPtr  
Eq BlockReason  Since: base4.3.0.0 
Defined in GHC.Conc.Sync (==) :: BlockReason > BlockReason > Bool # (/=) :: BlockReason > BlockReason > Bool #  
Eq ThreadId  Since: base4.2.0.0 
Eq ThreadStatus  Since: base4.3.0.0 
Defined in GHC.Conc.Sync (==) :: ThreadStatus > ThreadStatus > Bool # (/=) :: ThreadStatus > ThreadStatus > Bool #  
Eq ErrorCall  Since: base4.7.0.0 
Eq ArithException  Since: base3.0 
Defined in GHC.Exception.Type (==) :: ArithException > ArithException > Bool # (/=) :: ArithException > ArithException > Bool #  
Eq Fingerprint  Since: base4.4.0.0 
Defined in GHC.Fingerprint.Type (==) :: Fingerprint > Fingerprint > Bool # (/=) :: Fingerprint > Fingerprint > Bool #  
Eq Associativity  Since: base4.6.0.0 
Defined in GHC.Generics (==) :: Associativity > Associativity > Bool # (/=) :: Associativity > Associativity > Bool #  
Eq DecidedStrictness  Since: base4.9.0.0 
Defined in GHC.Generics (==) :: DecidedStrictness > DecidedStrictness > Bool # (/=) :: DecidedStrictness > DecidedStrictness > Bool #  
Eq Fixity  Since: base4.6.0.0 
Eq SourceStrictness  Since: base4.9.0.0 
Defined in GHC.Generics (==) :: SourceStrictness > SourceStrictness > Bool # (/=) :: SourceStrictness > SourceStrictness > Bool #  
Eq SourceUnpackedness  Since: base4.9.0.0 
Defined in GHC.Generics (==) :: SourceUnpackedness > SourceUnpackedness > Bool # (/=) :: SourceUnpackedness > SourceUnpackedness > Bool #  
Eq MaskingState  Since: base4.3.0.0 
Defined in GHC.IO (==) :: MaskingState > MaskingState > Bool # (/=) :: MaskingState > MaskingState > Bool #  
Eq IODeviceType  Since: base4.2.0.0 
Defined in GHC.IO.Device (==) :: IODeviceType > IODeviceType > Bool # (/=) :: IODeviceType > IODeviceType > Bool #  
Eq SeekMode  Since: base4.2.0.0 
Eq CodingProgress  Since: base4.4.0.0 
Defined in GHC.IO.Encoding.Types (==) :: CodingProgress > CodingProgress > Bool # (/=) :: CodingProgress > CodingProgress > Bool #  
Eq ArrayException  Since: base4.2.0.0 
Defined in GHC.IO.Exception (==) :: ArrayException > ArrayException > Bool # (/=) :: ArrayException > ArrayException > Bool #  
Eq AsyncException  Since: base4.2.0.0 
Defined in GHC.IO.Exception (==) :: AsyncException > AsyncException > Bool # (/=) :: AsyncException > AsyncException > Bool #  
Eq ExitCode  
Eq IOErrorType  Since: base4.1.0.0 
Defined in GHC.IO.Exception (==) :: IOErrorType > IOErrorType > Bool # (/=) :: IOErrorType > IOErrorType > Bool #  
Eq IOException  Since: base4.1.0.0 
Defined in GHC.IO.Exception (==) :: IOException > IOException > Bool # (/=) :: IOException > IOException > Bool #  
Eq HandlePosn  Since: base4.1.0.0 
Defined in GHC.IO.Handle (==) :: HandlePosn > HandlePosn > Bool # (/=) :: HandlePosn > HandlePosn > Bool #  
Eq BufferMode  Since: base4.2.0.0 
Defined in GHC.IO.Handle.Types (==) :: BufferMode > BufferMode > Bool # (/=) :: BufferMode > BufferMode > Bool #  
Eq Handle  Since: base4.1.0.0 
Eq Newline  Since: base4.2.0.0 
Eq NewlineMode  Since: base4.2.0.0 
Defined in GHC.IO.Handle.Types (==) :: NewlineMode > NewlineMode > Bool # (/=) :: NewlineMode > NewlineMode > Bool #  
Eq IOMode  Since: base4.2.0.0 
Eq Int16  Since: base2.1 
Eq Int32  Since: base2.1 
Eq Int64  Since: base2.1 
Eq Int8  Since: base2.1 
Eq SrcLoc  Since: base4.9.0.0 
Eq Word16  Since: base2.1 
Eq Word32  Since: base2.1 
Eq Word64  Since: base2.1 
Eq Word8  Since: base2.1 
Eq Lexeme  Since: base2.1 
Eq Number  Since: base4.6.0.0 
Eq Module  
Eq Ordering  
Eq TrName  
Eq TyCon  
Eq Integer  
Eq Natural  
Eq ()  
Eq Bool  
Eq Char  
Eq Double  Note that due to the presence of
Also note that

Eq Float  Note that due to the presence of
Also note that

Eq Int  
Eq Word  
Eq a => Eq (ZipList a)  Since: base4.7.0.0 
Eq (Chan a)  Since: base4.4.0.0 
Eq a => Eq (And a)  Since: base4.16 
Eq a => Eq (Iff a)  Since: base4.16 
Eq a => Eq (Ior a)  Since: base4.16 
Eq a => Eq (Xor a)  Since: base4.16 
Eq a => Eq (Complex a)  Since: base2.1 
Eq a => Eq (Identity a)  Since: base4.8.0.0 
Eq a => Eq (First a)  Since: base2.1 
Eq a => Eq (Last a)  Since: base2.1 
Eq a => Eq (Down a)  Since: base4.6.0.0 
Eq a => Eq (First a)  Since: base4.9.0.0 
Eq a => Eq (Last a)  Since: base4.9.0.0 
Eq a => Eq (Max a)  Since: base4.9.0.0 
Eq a => Eq (Min a)  Since: base4.9.0.0 
Eq m => Eq (WrappedMonoid m)  Since: base4.9.0.0 
Defined in Data.Semigroup (==) :: WrappedMonoid m > WrappedMonoid m > Bool # (/=) :: WrappedMonoid m > WrappedMonoid m > Bool #  
Eq a => Eq (Dual a)  Since: base2.1 
Eq a => Eq (Product a)  Since: base2.1 
Eq a => Eq (Sum a)  Since: base2.1 
Eq (TVar a)  Since: base4.8.0.0 
Eq (ForeignPtr a)  Since: base2.1 
Defined in GHC.ForeignPtr (==) :: ForeignPtr a > ForeignPtr a > Bool # (/=) :: ForeignPtr a > ForeignPtr a > Bool #  
Eq p => Eq (Par1 p)  Since: base4.7.0.0 
Eq (IORef a)  Pointer equality. Since: base4.0.0.0 
Eq (MVar a)  Since: base4.1.0.0 
Eq (FunPtr a)  
Eq (Ptr a)  Since: base2.1 
Eq a => Eq (Ratio a)  Since: base2.1 
Eq (StablePtr a)  Since: base2.1 
Eq a => Eq (NonEmpty a)  Since: base4.9.0.0 
Eq a => Eq (Maybe a)  Since: base2.1 
Eq a => Eq (a)  
Eq a => Eq [a]  
(Eq a, Eq b) => Eq (Either a b)  Since: base2.1 
Eq (Proxy s)  Since: base4.7.0.0 
Eq a => Eq (Arg a b)  Since: base4.9.0.0 
Eq (TypeRep a)  Since: base2.1 
(Ix i, Eq e) => Eq (Array i e)  Since: base2.1 
Eq (U1 p)  Since: base4.9.0.0 
Eq (V1 p)  Since: base4.9.0.0 
Eq (STRef s a)  Pointer equality. Since: base2.1 
(Eq a, Eq b) => Eq (a, b)  
Eq a => Eq (Const a b)  Since: base4.9.0.0 
Eq (f a) => Eq (Ap f a)  Since: base4.12.0.0 
Eq (f a) => Eq (Alt f a)  Since: base4.8.0.0 
Eq (Coercion a b)  Since: base4.7.0.0 
Eq (a :~: b)  Since: base4.7.0.0 
Eq (STArray s i e)  Since: base2.1 
Eq (f p) => Eq (Rec1 f p)  Since: base4.7.0.0 
Eq (URec (Ptr ()) p)  Since: base4.9.0.0 
Eq (URec Char p)  Since: base4.9.0.0 
Eq (URec Double p)  Since: base4.9.0.0 
Eq (URec Float p)  
Eq (URec Int p)  Since: base4.9.0.0 
Eq (URec Word p)  Since: base4.9.0.0 
(Eq a, Eq b, Eq c) => Eq (a, b, c)  
(Eq1 f, Eq1 g, Eq a) => Eq (Product f g a)  Since: base4.9.0.0 
(Eq1 f, Eq1 g, Eq a) => Eq (Sum f g a)  Since: base4.9.0.0 
Eq (a :~~: b)  Since: base4.10.0.0 
(Eq (f p), Eq (g p)) => Eq ((f :*: g) p)  Since: base4.7.0.0 
(Eq (f p), Eq (g p)) => Eq ((f :+: g) p)  Since: base4.7.0.0 
Eq c => Eq (K1 i c p)  Since: base4.7.0.0 
(Eq a, Eq b, Eq c, Eq d) => Eq (a, b, c, d)  
(Eq1 f, Eq1 g, Eq a) => Eq (Compose f g a)  Since: base4.9.0.0 
Eq (f (g p)) => Eq ((f :.: g) p)  Since: base4.7.0.0 
Eq (f p) => Eq (M1 i c f p)  Since: base4.7.0.0 
(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 #
Trigonometric and hyperbolic functions and related functions.
The Haskell Report defines no laws for Floating
. However, (
, +
)(
and *
)exp
are customarily expected to define an exponential field and have
the following properties:
exp (a + b)
=exp a * exp b
exp (fromInteger 0)
=fromInteger 1
Instances
class Foldable (t :: TYPE LiftedRep > Type) #
The Foldable class represents data structures that can be reduced to a summary value one element at a time. Strict leftassociative folds are a good fit for spaceefficient reduction, while lazy rightassociative folds are a good fit for corecursive iteration, or for folds that shortcircuit after processing an initial subsequence of the structure's elements.
Instances can be derived automatically by enabling the DeriveFoldable
extension. For example, a derived instance for a binary tree might be:
{# LANGUAGE DeriveFoldable #} data Tree a = Empty  Leaf a  Node (Tree a) a (Tree a) deriving Foldable
A more detailed description can be found in the Overview section of Data.Foldable.
For the class laws see the Laws section of Data.Foldable.
Instances
Foldable ZipList  Since: base4.9.0.0 
Defined in Control.Applicative fold :: Monoid m => ZipList m > m # foldMap :: Monoid m => (a > m) > ZipList a > m # foldMap' :: Monoid m => (a > m) > ZipList a > m # foldr :: (a > b > b) > b > ZipList a > b # foldr' :: (a > b > b) > b > ZipList a > b # foldl :: (b > a > b) > b > ZipList a > b # foldl' :: (b > a > b) > b > ZipList a > b # foldr1 :: (a > a > a) > ZipList a > a # foldl1 :: (a > a > a) > ZipList a > a # elem :: Eq a => a > ZipList a > Bool # maximum :: Ord a => ZipList a > a # minimum :: Ord a => ZipList a > a #  
Foldable Complex  Since: base4.9.0.0 
Defined in Data.Complex fold :: Monoid m => Complex m > m # foldMap :: Monoid m => (a > m) > Complex a > m # foldMap' :: Monoid m => (a > m) > Complex a > m # foldr :: (a > b > b) > b > Complex a > b # foldr' :: (a > b > b) > b > Complex a > b # foldl :: (b > a > b) > b > Complex a > b # foldl' :: (b > a > b) > b > Complex a > b # foldr1 :: (a > a > a) > Complex a > a # foldl1 :: (a > a > a) > Complex a > a # elem :: Eq a => a > Complex a > Bool # maximum :: Ord a => Complex a > a # minimum :: Ord a => Complex a > a #  
Foldable Identity  Since: base4.8.0.0 
Defined in Data.Functor.Identity fold :: Monoid m => Identity m > m # foldMap :: Monoid m => (a > m) > Identity a > m # foldMap' :: Monoid m => (a > m) > Identity a > m # foldr :: (a > b > b) > b > Identity a > b # foldr' :: (a > b > b) > b > Identity a > b # foldl :: (b > a > b) > b > Identity a > b # foldl' :: (b > a > b) > b > Identity a > b # foldr1 :: (a > a > a) > Identity a > a # foldl1 :: (a > a > a) > Identity a > a # elem :: Eq a => a > Identity a > Bool # maximum :: Ord a => Identity a > a # minimum :: Ord a => Identity a > a #  
Foldable First  Since: base4.8.0.0 
Defined in Data.Foldable fold :: Monoid m => First m > m # foldMap :: Monoid m => (a > m) > First a > m # foldMap' :: Monoid m => (a > m) > First a > m # foldr :: (a > b > b) > b > First a > b # foldr' :: (a > b > b) > b > First a > b # foldl :: (b > a > b) > b > First a > b # foldl' :: (b > a > b) > b > First a > b # foldr1 :: (a > a > a) > First a > a # foldl1 :: (a > a > a) > First a > a # elem :: Eq a => a > First a > Bool # maximum :: Ord a => First a > a # minimum :: Ord a => First a > a #  
Foldable Last  Since: base4.8.0.0 
Defined in Data.Foldable fold :: Monoid m => Last m > m # foldMap :: Monoid m => (a > m) > Last a > m # foldMap' :: Monoid m => (a > m) > Last a > m # foldr :: (a > b > b) > b > Last a > b # foldr' :: (a > b > b) > b > Last a > b # foldl :: (b > a > b) > b > Last a > b # foldl' :: (b > a > b) > b > Last a > b # foldr1 :: (a > a > a) > Last a > a # foldl1 :: (a > a > a) > Last a > a # elem :: Eq a => a > Last a > Bool # maximum :: Ord a => Last a > a #  
Foldable Down  Since: base4.12.0.0 
Defined in Data.Foldable fold :: Monoid m => Down m > m # foldMap :: Monoid m => (a > m) > Down a > m # foldMap' :: Monoid m => (a > m) > Down a > m # foldr :: (a > b > b) > b > Down a > b # foldr' :: (a > b > b) > b > Down a > b # foldl :: (b > a > b) > b > Down a > b # foldl' :: (b > a > b) > b > Down a > b # foldr1 :: (a > a > a) > Down a > a # foldl1 :: (a > a > a) > Down a > a # elem :: Eq a => a > Down a > Bool # maximum :: Ord a => Down a > a #  
Foldable First  Since: base4.9.0.0 
Defined in Data.Semigroup fold :: Monoid m => First m > m # foldMap :: Monoid m => (a > m) > First a > m # foldMap' :: Monoid m => (a > m) > First a > m # foldr :: (a > b > b) > b > First a > b # foldr' :: (a > b > b) > b > First a > b # foldl :: (b > a > b) > b > First a > b # foldl' :: (b > a > b) > b > First a > b # foldr1 :: (a > a > a) > First a > a # foldl1 :: (a > a > a) > First a > a # elem :: Eq a => a > First a > Bool # maximum :: Ord a => First a > a # minimum :: Ord a => First a > a #  
Foldable Last  Since: base4.9.0.0 
Defined in Data.Semigroup fold :: Monoid m => Last m > m # foldMap :: Monoid m => (a > m) > Last a > m # foldMap' :: Monoid m => (a > m) > Last a > m # foldr :: (a > b > b) > b > Last a > b # foldr' :: (a > b > b) > b > Last a > b # foldl :: (b > a > b) > b > Last a > b # foldl' :: (b > a > b) > b > Last a > b # foldr1 :: (a > a > a) > Last a > a # foldl1 :: (a > a > a) > Last a > a # elem :: Eq a => a > Last a > Bool # maximum :: Ord a => Last a > a #  
Foldable Max  Since: base4.9.0.0 
Defined in Data.Semigroup fold :: Monoid m => Max m > m # foldMap :: Monoid m => (a > m) > Max a > m # foldMap' :: Monoid m => (a > m) > Max a > m # foldr :: (a > b > b) > b > Max a > b # foldr' :: (a > b > b) > b > Max a > b # foldl :: (b > a > b) > b > Max a > b # foldl' :: (b > a > b) > b > Max a > b # foldr1 :: (a > a > a) > Max a > a # foldl1 :: (a > a > a) > Max a > a # elem :: Eq a => a > Max a > Bool # maximum :: Ord a => Max a > a #  
Foldable Min  Since: base4.9.0.0 
Defined in Data.Semigroup fold :: Monoid m => Min m > m # foldMap :: Monoid m => (a > m) > Min a > m # foldMap' :: Monoid m => (a > m) > Min a > m # foldr :: (a > b > b) > b > Min a > b # foldr' :: (a > b > b) > b > Min a > b # foldl :: (b > a > b) > b > Min a > b # foldl' :: (b > a > b) > b > Min a > b # foldr1 :: (a > a > a) > Min a > a # foldl1 :: (a > a > a) > Min a > a # elem :: Eq a => a > Min a > Bool # maximum :: Ord a => Min a > a #  
Foldable Dual  Since: base4.8.0.0 
Defined in Data.Foldable fold :: Monoid m => Dual m > m # foldMap :: Monoid m => (a > m) > Dual a > m # foldMap' :: Monoid m => (a > m) > Dual a > m # foldr :: (a > b > b) > b > Dual a > b # foldr' :: (a > b > b) > b > Dual a > b # foldl :: (b > a > b) > b > Dual a > b # foldl' :: (b > a > b) > b > Dual a > b # foldr1 :: (a > a > a) > Dual a > a # foldl1 :: (a > a > a) > Dual a > a # elem :: Eq a => a > Dual a > Bool # maximum :: Ord a => Dual a > a #  
Foldable Product  Since: base4.8.0.0 
Defined in Data.Foldable fold :: Monoid m => Product m > m # foldMap :: Monoid m => (a > m) > Product a > m # foldMap' :: Monoid m => (a > m) > Product a > m # foldr :: (a > b > b) > b > Product a > b # foldr' :: (a > b > b) > b > Product a > b # foldl :: (b > a > b) > b > Product a > b # foldl' :: (b > a > b) > b > Product a > b # foldr1 :: (a > a > a) > Product a > a # foldl1 :: (a > a > a) > Product a > a # elem :: Eq a => a > Product a > Bool # maximum :: Ord a => Product a > a # minimum :: Ord a => Product a > a #  
Foldable Sum  Since: base4.8.0.0 
Defined in Data.Foldable fold :: Monoid m => Sum m > m # foldMap :: Monoid m => (a > m) > Sum a > m # foldMap' :: Monoid m => (a > m) > Sum a > m # foldr :: (a > b > b) > b > Sum a > b # foldr' :: (a > b > b) > b > Sum a > b # foldl :: (b > a > b) > b > Sum a > b # foldl' :: (b > a > b) > b > Sum a > b # foldr1 :: (a > a > a) > Sum a > a # foldl1 :: (a > a > a) > Sum a > a # elem :: Eq a => a > Sum a > Bool # maximum :: Ord a => Sum a > a #  
Foldable Par1  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => Par1 m > m # foldMap :: Monoid m => (a > m) > Par1 a > m # foldMap' :: Monoid m => (a > m) > Par1 a > m # foldr :: (a > b > b) > b > Par1 a > b # foldr' :: (a > b > b) > b > Par1 a > b # foldl :: (b > a > b) > b > Par1 a > b # foldl' :: (b > a > b) > b > Par1 a > b # foldr1 :: (a > a > a) > Par1 a > a # foldl1 :: (a > a > a) > Par1 a > a # elem :: Eq a => a > Par1 a > Bool # maximum :: Ord a => Par1 a > a #  
Foldable NonEmpty  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => NonEmpty m > m # foldMap :: Monoid m => (a > m) > NonEmpty a > m # foldMap' :: Monoid m => (a > m) > NonEmpty a > m # foldr :: (a > b > b) > b > NonEmpty a > b # foldr' :: (a > b > b) > b > NonEmpty a > b # foldl :: (b > a > b) > b > NonEmpty a > b # foldl' :: (b > a > b) > b > NonEmpty a > b # foldr1 :: (a > a > a) > NonEmpty a > a # foldl1 :: (a > a > a) > NonEmpty a > a # elem :: Eq a => a > NonEmpty a > Bool # maximum :: Ord a => NonEmpty a > a # minimum :: Ord a => NonEmpty a > a #  
Foldable Maybe  Since: base2.1 
Defined in Data.Foldable fold :: Monoid m => Maybe m > m # foldMap :: Monoid m => (a > m) > Maybe a > m # foldMap' :: Monoid m => (a > m) > Maybe a > m # foldr :: (a > b > b) > b > Maybe a > b # foldr' :: (a > b > b) > b > Maybe a > b # foldl :: (b > a > b) > b > Maybe a > b # foldl' :: (b > a > b) > b > Maybe a > b # foldr1 :: (a > a > a) > Maybe a > a # foldl1 :: (a > a > a) > Maybe a > a # elem :: Eq a => a > Maybe a > Bool # maximum :: Ord a => Maybe a > a # minimum :: Ord a => Maybe a > a #  
Foldable Solo  Since: base4.15 
Defined in Data.Foldable fold :: Monoid m => Solo m > m # foldMap :: Monoid m => (a > m) > Solo a > m # foldMap' :: Monoid m => (a > m) > Solo a > m # foldr :: (a > b > b) > b > Solo a > b # foldr' :: (a > b > b) > b > Solo a > b # foldl :: (b > a > b) > b > Solo a > b # foldl' :: (b > a > b) > b > Solo a > b # foldr1 :: (a > a > a) > Solo a > a # foldl1 :: (a > a > a) > Solo a > a # elem :: Eq a => a > Solo a > Bool # maximum :: Ord a => Solo a > a #  
Foldable []  Since: base2.1 
Defined in Data.Foldable fold :: Monoid m => [m] > m # foldMap :: Monoid m => (a > m) > [a] > m # foldMap' :: Monoid m => (a > m) > [a] > m # foldr :: (a > b > b) > b > [a] > b # foldr' :: (a > b > b) > b > [a] > b # foldl :: (b > a > b) > b > [a] > b # foldl' :: (b > a > b) > b > [a] > b # foldr1 :: (a > a > a) > [a] > a # foldl1 :: (a > a > a) > [a] > a # elem :: Eq a => a > [a] > Bool # maximum :: Ord a => [a] > a #  
Foldable (Either a)  Since: base4.7.0.0 
Defined in Data.Foldable fold :: Monoid m => Either a m > m # foldMap :: Monoid m => (a0 > m) > Either a a0 > m # foldMap' :: Monoid m => (a0 > m) > Either a a0 > m # foldr :: (a0 > b > b) > b > Either a a0 > b # foldr' :: (a0 > b > b) > b > Either a a0 > b # foldl :: (b > a0 > b) > b > Either a a0 > b # foldl' :: (b > a0 > b) > b > Either a a0 > b # foldr1 :: (a0 > a0 > a0) > Either a a0 > a0 # foldl1 :: (a0 > a0 > a0) > Either a a0 > a0 # toList :: Either a a0 > [a0] # length :: Either a a0 > Int # elem :: Eq a0 => a0 > Either a a0 > Bool # maximum :: Ord a0 => Either a a0 > a0 # minimum :: Ord a0 => Either a a0 > a0 #  
Foldable (Proxy :: TYPE LiftedRep > Type)  Since: base4.7.0.0 
Defined in Data.Foldable fold :: Monoid m => Proxy m > m # foldMap :: Monoid m => (a > m) > Proxy a > m # foldMap' :: Monoid m => (a > m) > Proxy a > m # foldr :: (a > b > b) > b > Proxy a > b # foldr' :: (a > b > b) > b > Proxy a > b # foldl :: (b > a > b) > b > Proxy a > b # foldl' :: (b > a > b) > b > Proxy a > b # foldr1 :: (a > a > a) > Proxy a > a # foldl1 :: (a > a > a) > Proxy a > a # elem :: Eq a => a > Proxy a > Bool # maximum :: Ord a => Proxy a > a # minimum :: Ord a => Proxy a > a #  
Foldable (Arg a)  Since: base4.9.0.0 
Defined in Data.Semigroup fold :: Monoid m => Arg a m > m # foldMap :: Monoid m => (a0 > m) > Arg a a0 > m # foldMap' :: Monoid m => (a0 > m) > Arg a a0 > m # foldr :: (a0 > b > b) > b > Arg a a0 > b # foldr' :: (a0 > b > b) > b > Arg a a0 > b # foldl :: (b > a0 > b) > b > Arg a a0 > b # foldl' :: (b > a0 > b) > b > Arg a a0 > b # foldr1 :: (a0 > a0 > a0) > Arg a a0 > a0 # foldl1 :: (a0 > a0 > a0) > Arg a a0 > a0 # elem :: Eq a0 => a0 > Arg a a0 > Bool # maximum :: Ord a0 => Arg a a0 > a0 # minimum :: Ord a0 => Arg a a0 > a0 #  
Foldable (Array i)  Since: base4.8.0.0 
Defined in Data.Foldable fold :: Monoid m => Array i m > m # foldMap :: Monoid m => (a > m) > Array i a > m # foldMap' :: Monoid m => (a > m) > Array i a > m # foldr :: (a > b > b) > b > Array i a > b # foldr' :: (a > b > b) > b > Array i a > b # foldl :: (b > a > b) > b > Array i a > b # foldl' :: (b > a > b) > b > Array i a > b # foldr1 :: (a > a > a) > Array i a > a # foldl1 :: (a > a > a) > Array i a > a # elem :: Eq a => a > Array i a > Bool # maximum :: Ord a => Array i a > a # minimum :: Ord a => Array i a > a #  
Foldable (U1 :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => U1 m > m # foldMap :: Monoid m => (a > m) > U1 a > m # foldMap' :: Monoid m => (a > m) > U1 a > m # foldr :: (a > b > b) > b > U1 a > b # foldr' :: (a > b > b) > b > U1 a > b # foldl :: (b > a > b) > b > U1 a > b # foldl' :: (b > a > b) > b > U1 a > b # foldr1 :: (a > a > a) > U1 a > a # foldl1 :: (a > a > a) > U1 a > a # elem :: Eq a => a > U1 a > Bool # maximum :: Ord a => U1 a > a #  
Foldable (UAddr :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => UAddr m > m # foldMap :: Monoid m => (a > m) > UAddr a > m # foldMap' :: Monoid m => (a > m) > UAddr a > m # foldr :: (a > b > b) > b > UAddr a > b # foldr' :: (a > b > b) > b > UAddr a > b # foldl :: (b > a > b) > b > UAddr a > b # foldl' :: (b > a > b) > b > UAddr a > b # foldr1 :: (a > a > a) > UAddr a > a # foldl1 :: (a > a > a) > UAddr a > a # elem :: Eq a => a > UAddr a > Bool # maximum :: Ord a => UAddr a > a # minimum :: Ord a => UAddr a > a #  
Foldable (UChar :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => UChar m > m # foldMap :: Monoid m => (a > m) > UChar a > m # foldMap' :: Monoid m => (a > m) > UChar a > m # foldr :: (a > b > b) > b > UChar a > b # foldr' :: (a > b > b) > b > UChar a > b # foldl :: (b > a > b) > b > UChar a > b # foldl' :: (b > a > b) > b > UChar a > b # foldr1 :: (a > a > a) > UChar a > a # foldl1 :: (a > a > a) > UChar a > a # elem :: Eq a => a > UChar a > Bool # maximum :: Ord a => UChar a > a # minimum :: Ord a => UChar a > a #  
Foldable (UDouble :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => UDouble m > m # foldMap :: Monoid m => (a > m) > UDouble a > m # foldMap' :: Monoid m => (a > m) > UDouble a > m # foldr :: (a > b > b) > b > UDouble a > b # foldr' :: (a > b > b) > b > UDouble a > b # foldl :: (b > a > b) > b > UDouble a > b # foldl' :: (b > a > b) > b > UDouble a > b # foldr1 :: (a > a > a) > UDouble a > a # foldl1 :: (a > a > a) > UDouble a > a # elem :: Eq a => a > UDouble a > Bool # maximum :: Ord a => UDouble a > a # minimum :: Ord a => UDouble a > a #  
Foldable (UFloat :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => UFloat m > m # foldMap :: Monoid m => (a > m) > UFloat a > m # foldMap' :: Monoid m => (a > m) > UFloat a > m # foldr :: (a > b > b) > b > UFloat a > b # foldr' :: (a > b > b) > b > UFloat a > b # foldl :: (b > a > b) > b > UFloat a > b # foldl' :: (b > a > b) > b > UFloat a > b # foldr1 :: (a > a > a) > UFloat a > a # foldl1 :: (a > a > a) > UFloat a > a # elem :: Eq a => a > UFloat a > Bool # maximum :: Ord a => UFloat a > a # minimum :: Ord a => UFloat a > a #  
Foldable (UInt :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => UInt m > m # foldMap :: Monoid m => (a > m) > UInt a > m # foldMap' :: Monoid m => (a > m) > UInt a > m # foldr :: (a > b > b) > b > UInt a > b # foldr' :: (a > b > b) > b > UInt a > b # foldl :: (b > a > b) > b > UInt a > b # foldl' :: (b > a > b) > b > UInt a > b # foldr1 :: (a > a > a) > UInt a > a # foldl1 :: (a > a > a) > UInt a > a # elem :: Eq a => a > UInt a > Bool # maximum :: Ord a => UInt a > a #  
Foldable (UWord :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => UWord m > m # foldMap :: Monoid m => (a > m) > UWord a > m # foldMap' :: Monoid m => (a > m) > UWord a > m # foldr :: (a > b > b) > b > UWord a > b # foldr' :: (a > b > b) > b > UWord a > b # foldl :: (b > a > b) > b > UWord a > b # foldl' :: (b > a > b) > b > UWord a > b # foldr1 :: (a > a > a) > UWord a > a # foldl1 :: (a > a > a) > UWord a > a # elem :: Eq a => a > UWord a > Bool # maximum :: Ord a => UWord a > a # minimum :: Ord a => UWord a > a #  
Foldable (V1 :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => V1 m > m # foldMap :: Monoid m => (a > m) > V1 a > m # foldMap' :: Monoid m => (a > m) > V1 a > m # foldr :: (a > b > b) > b > V1 a > b # foldr' :: (a > b > b) > b > V1 a > b # foldl :: (b > a > b) > b > V1 a > b # foldl' :: (b > a > b) > b > V1 a > b # foldr1 :: (a > a > a) > V1 a > a # foldl1 :: (a > a > a) > V1 a > a # elem :: Eq a => a > V1 a > Bool # maximum :: Ord a => V1 a > a #  
Foldable ((,) a)  Since: base4.7.0.0 
Defined in Data.Foldable fold :: Monoid m => (a, m) > m # foldMap :: Monoid m => (a0 > m) > (a, a0) > m # foldMap' :: Monoid m => (a0 > m) > (a, a0) > m # foldr :: (a0 > b > b) > b > (a, a0) > b # foldr' :: (a0 > b > b) > b > (a, a0) > b # foldl :: (b > a0 > b) > b > (a, a0) > b # foldl' :: (b > a0 > b) > b > (a, a0) > b # foldr1 :: (a0 > a0 > a0) > (a, a0) > a0 # foldl1 :: (a0 > a0 > a0) > (a, a0) > a0 # elem :: Eq a0 => a0 > (a, a0) > Bool # maximum :: Ord a0 => (a, a0) > a0 # minimum :: Ord a0 => (a, a0) > a0 #  
Foldable (Const m :: TYPE LiftedRep > Type)  Since: base4.7.0.0 
Defined in Data.Functor.Const fold :: Monoid m0 => Const m m0 > m0 # foldMap :: Monoid m0 => (a > m0) > Const m a > m0 # foldMap' :: Monoid m0 => (a > m0) > Const m a > m0 # foldr :: (a > b > b) > b > Const m a > b # foldr' :: (a > b > b) > b > Const m a > b # foldl :: (b > a > b) > b > Const m a > b # foldl' :: (b > a > b) > b > Const m a > b # foldr1 :: (a > a > a) > Const m a > a # foldl1 :: (a > a > a) > Const m a > a # elem :: Eq a => a > Const m a > Bool # maximum :: Ord a => Const m a > a # minimum :: Ord a => Const m a > a #  
Foldable f => Foldable (Ap f)  Since: base4.12.0.0 
Defined in Data.Foldable fold :: Monoid m => Ap f m > m # foldMap :: Monoid m => (a > m) > Ap f a > m # foldMap' :: Monoid m => (a > m) > Ap f a > m # foldr :: (a > b > b) > b > Ap f a > b # foldr' :: (a > b > b) > b > Ap f a > b # foldl :: (b > a > b) > b > Ap f a > b # foldl' :: (b > a > b) > b > Ap f a > b # foldr1 :: (a > a > a) > Ap f a > a # foldl1 :: (a > a > a) > Ap f a > a # elem :: Eq a => a > Ap f a > Bool # maximum :: Ord a => Ap f a > a #  
Foldable f => Foldable (Alt f)  Since: base4.12.0.0 
Defined in Data.Foldable fold :: Monoid m => Alt f m > m # foldMap :: Monoid m => (a > m) > Alt f a > m # foldMap' :: Monoid m => (a > m) > Alt f a > m # foldr :: (a > b > b) > b > Alt f a > b # foldr' :: (a > b > b) > b > Alt f a > b # foldl :: (b > a > b) > b > Alt f a > b # foldl' :: (b > a > b) > b > Alt f a > b # foldr1 :: (a > a > a) > Alt f a > a # foldl1 :: (a > a > a) > Alt f a > a # elem :: Eq a => a > Alt f a > Bool # maximum :: Ord a => Alt f a > a # minimum :: Ord a => Alt f a > a #  
Foldable f => Foldable (Rec1 f)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => Rec1 f m > m # foldMap :: Monoid m => (a > m) > Rec1 f a > m # foldMap' :: Monoid m => (a > m) > Rec1 f a > m # foldr :: (a > b > b) > b > Rec1 f a > b # foldr' :: (a > b > b) > b > Rec1 f a > b # foldl :: (b > a > b) > b > Rec1 f a > b # foldl' :: (b > a > b) > b > Rec1 f a > b # foldr1 :: (a > a > a) > Rec1 f a > a # foldl1 :: (a > a > a) > Rec1 f a > a # elem :: Eq a => a > Rec1 f a > Bool # maximum :: Ord a => Rec1 f a > a # minimum :: Ord a => Rec1 f a > a #  
(Foldable f, Foldable g) => Foldable (Product f g)  Since: base4.9.0.0 
Defined in Data.Functor.Product fold :: Monoid m => Product f g m > m # foldMap :: Monoid m => (a > m) > Product f g a > m # foldMap' :: Monoid m => (a > m) > Product f g a > m # foldr :: (a > b > b) > b > Product f g a > b # foldr' :: (a > b > b) > b > Product f g a > b # foldl :: (b > a > b) > b > Product f g a > b # foldl' :: (b > a > b) > b > Product f g a > b # foldr1 :: (a > a > a) > Product f g a > a # foldl1 :: (a > a > a) > Product f g a > a # toList :: Product f g a > [a] # null :: Product f g a > Bool # length :: Product f g a > Int # elem :: Eq a => a > Product f g a > Bool # maximum :: Ord a => Product f g a > a # minimum :: Ord a => Product f g a > a #  
(Foldable f, Foldable g) => Foldable (Sum f g)  Since: base4.9.0.0 
Defined in Data.Functor.Sum fold :: Monoid m => Sum f g m > m # foldMap :: Monoid m => (a > m) > Sum f g a > m # foldMap' :: Monoid m => (a > m) > Sum f g a > m # foldr :: (a > b > b) > b > Sum f g a > b # foldr' :: (a > b > b) > b > Sum f g a > b # foldl :: (b > a > b) > b > Sum f g a > b # foldl' :: (b > a > b) > b > Sum f g a > b # foldr1 :: (a > a > a) > Sum f g a > a # foldl1 :: (a > a > a) > Sum f g a > a # elem :: Eq a => a > Sum f g a > Bool # maximum :: Ord a => Sum f g a > a # minimum :: Ord a => Sum f g a > a #  
(Foldable f, Foldable g) => Foldable (f :*: g)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => (f :*: g) m > m # foldMap :: Monoid m => (a > m) > (f :*: g) a > m # foldMap' :: Monoid m => (a > m) > (f :*: g) a > m # foldr :: (a > b > b) > b > (f :*: g) a > b # foldr' :: (a > b > b) > b > (f :*: g) a > b # foldl :: (b > a > b) > b > (f :*: g) a > b # foldl' :: (b > a > b) > b > (f :*: g) a > b # foldr1 :: (a > a > a) > (f :*: g) a > a # foldl1 :: (a > a > a) > (f :*: g) a > a # toList :: (f :*: g) a > [a] # length :: (f :*: g) a > Int # elem :: Eq a => a > (f :*: g) a > Bool # maximum :: Ord a => (f :*: g) a > a # minimum :: Ord a => (f :*: g) a > a #  
(Foldable f, Foldable g) => Foldable (f :+: g)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => (f :+: g) m > m # foldMap :: Monoid m => (a > m) > (f :+: g) a > m # foldMap' :: Monoid m => (a > m) > (f :+: g) a > m # foldr :: (a > b > b) > b > (f :+: g) a > b # foldr' :: (a > b > b) > b > (f :+: g) a > b # foldl :: (b > a > b) > b > (f :+: g) a > b # foldl' :: (b > a > b) > b > (f :+: g) a > b # foldr1 :: (a > a > a) > (f :+: g) a > a # foldl1 :: (a > a > a) > (f :+: g) a > a # toList :: (f :+: g) a > [a] # length :: (f :+: g) a > Int # elem :: Eq a => a > (f :+: g) a > Bool # maximum :: Ord a => (f :+: g) a > a # minimum :: Ord a => (f :+: g) a > a #  
Foldable (K1 i c :: TYPE LiftedRep > Type)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => K1 i c m > m # foldMap :: Monoid m => (a > m) > K1 i c a > m # foldMap' :: Monoid m => (a > m) > K1 i c a > m # foldr :: (a > b > b) > b > K1 i c a > b # foldr' :: (a > b > b) > b > K1 i c a > b # foldl :: (b > a > b) > b > K1 i c a > b # foldl' :: (b > a > b) > b > K1 i c a > b # foldr1 :: (a > a > a) > K1 i c a > a # foldl1 :: (a > a > a) > K1 i c a > a # elem :: Eq a => a > K1 i c a > Bool # maximum :: Ord a => K1 i c a > a # minimum :: Ord a => K1 i c a > a #  
(Foldable f, Foldable g) => Foldable (Compose f g)  Since: base4.9.0.0 
Defined in Data.Functor.Compose fold :: Monoid m => Compose f g m > m # foldMap :: Monoid m => (a > m) > Compose f g a > m # foldMap' :: Monoid m => (a > m) > Compose f g a > m # foldr :: (a > b > b) > b > Compose f g a > b # foldr' :: (a > b > b) > b > Compose f g a > b # foldl :: (b > a > b) > b > Compose f g a > b # foldl' :: (b > a > b) > b > Compose f g a > b # foldr1 :: (a > a > a) > Compose f g a > a # foldl1 :: (a > a > a) > Compose f g a > a # toList :: Compose f g a > [a] # null :: Compose f g a > Bool # length :: Compose f g a > Int # elem :: Eq a => a > Compose f g a > Bool # maximum :: Ord a => Compose f g a > a # minimum :: Ord a => Compose f g a > a #  
(Foldable f, Foldable g) => Foldable (f :.: g)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => (f :.: g) m > m # foldMap :: Monoid m => (a > m) > (f :.: g) a > m # foldMap' :: Monoid m => (a > m) > (f :.: g) a > m # foldr :: (a > b > b) > b > (f :.: g) a > b # foldr' :: (a > b > b) > b > (f :.: g) a > b # foldl :: (b > a > b) > b > (f :.: g) a > b # foldl' :: (b > a > b) > b > (f :.: g) a > b # foldr1 :: (a > a > a) > (f :.: g) a > a # foldl1 :: (a > a > a) > (f :.: g) a > a # toList :: (f :.: g) a > [a] # length :: (f :.: g) a > Int # elem :: Eq a => a > (f :.: g) a > Bool # maximum :: Ord a => (f :.: g) a > a # minimum :: Ord a => (f :.: g) a > a #  
Foldable f => Foldable (M1 i c f)  Since: base4.9.0.0 
Defined in Data.Foldable fold :: Monoid m => M1 i c f m > m # foldMap :: Monoid m => (a > m) > M1 i c f a > m # foldMap' :: Monoid m => (a > m) > M1 i c f a > m # foldr :: (a > b > b) > b > M1 i c f a > b # foldr' :: (a > b > b) > b > M1 i c f a > b # foldl :: (b > a > b) > b > M1 i c f a > b # foldl' :: (b > a > b) > b > 