Copyright | (c) The University of Glasgow 1992-2002 |
---|---|
License | see libraries/base/LICENSE |
Maintainer | cvs-ghc@haskell.org |
Stability | internal |
Portability | non-portable (GHC extensions) |
Safe Haskell | Unsafe |
Language | Haskell2010 |
Basic data types and classes.
Synopsis
- augment :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a] -> [a]
- (++) :: [a] -> [a] -> [a]
- build :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a]
- foldr :: (a -> b -> b) -> b -> [a] -> b
- eqString :: String -> String -> Bool
- bindIO :: IO a -> (a -> IO b) -> IO b
- returnIO :: a -> IO a
- otherwise :: Bool
- assert :: Bool -> a -> a
- thenIO :: IO a -> IO b -> IO b
- breakpoint :: a -> a
- breakpointCond :: Bool -> a -> a
- map :: (a -> b) -> [a] -> [b]
- ($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b
- join :: Monad m => m (m a) -> m a
- class Applicative m => Monad m where
- class Functor f where
- class Functor f => Applicative f where
- class Semigroup a where
- class Semigroup a => Monoid a where
- data Opaque = forall a. O a
- type String = [Char]
- data NonEmpty a = a :| [a]
- class (Alternative m, Monad m) => MonadPlus m where
- class Applicative f => Alternative f where
- (<**>) :: Applicative f => f a -> f (a -> b) -> f b
- liftA :: Applicative f => (a -> b) -> f a -> f b
- liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
- (=<<) :: Monad m => (a -> m b) -> m a -> m b
- when :: Applicative f => Bool -> f () -> f ()
- sequence :: Monad m => [m a] -> m [a]
- mapM :: Monad m => (a -> m b) -> [a] -> m [b]
- liftM :: Monad m => (a1 -> r) -> m a1 -> m r
- liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
- liftM3 :: Monad m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
- liftM4 :: Monad m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
- liftM5 :: Monad m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
- ap :: Monad m => m (a -> b) -> m a -> m b
- mapFB :: (elt -> lst -> lst) -> (a -> elt) -> a -> lst -> lst
- unsafeChr :: Int -> Char
- ord :: Char -> Int
- minInt :: Int
- maxInt :: Int
- id :: a -> a
- const :: a -> b -> a
- (.) :: (b -> c) -> (a -> b) -> a -> c
- flip :: (a -> b -> c) -> b -> a -> c
- ($!) :: forall r a (b :: TYPE r). (a -> b) -> a -> b
- until :: (a -> Bool) -> (a -> a) -> a -> a
- asTypeOf :: a -> a -> a
- failIO :: String -> IO a
- unIO :: IO a -> State# RealWorld -> (# State# RealWorld, a #)
- getTag :: a -> Int#
- quotInt :: Int -> Int -> Int
- remInt :: Int -> Int -> Int
- divInt :: Int -> Int -> Int
- modInt :: Int -> Int -> Int
- quotRemInt :: Int -> Int -> (Int, Int)
- divModInt :: Int -> Int -> (Int, Int)
- divModInt# :: Int# -> Int# -> (# Int#, Int# #)
- shiftL# :: Word# -> Int# -> Word#
- shiftRL# :: Word# -> Int# -> Word#
- iShiftL# :: Int# -> Int# -> Int#
- iShiftRA# :: Int# -> Int# -> Int#
- iShiftRL# :: Int# -> Int# -> Int#
- module GHC.Classes
- module GHC.CString
- module GHC.Magic
- module GHC.Types
- module GHC.Prim
- module GHC.Prim.Ext
- module GHC.Err
- module GHC.Maybe
Documentation
(++) :: [a] -> [a] -> [a] infixr 5 Source #
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.
foldr :: (a -> b -> b) -> b -> [a] -> b Source #
foldr
, applied to a binary operator, a starting value (typically
the right-identity 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)...)
eqString :: String -> String -> Bool Source #
This String
equality predicate is used when desugaring
pattern-matches against strings.
assert :: Bool -> a -> a Source #
If the first argument evaluates to True
, then the result is the
second argument. Otherwise an AssertionFailed
exception
is raised, containing a String
with the source file and line number of the
call to assert
.
Assertions can normally be turned on or off with a compiler flag
(for GHC, assertions are normally on unless optimisation is turned on
with -O
or the -fignore-asserts
option is given). When assertions are turned off, the first
argument to assert
is ignored, and the second argument is
returned as the result.
breakpoint :: a -> a Source #
breakpointCond :: Bool -> a -> a Source #
map :: (a -> b) -> [a] -> [b] Source #
\(\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]
($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0 Source #
Application operator. This operator is redundant, since ordinary
application (f x)
means the same as (f
. However, $
x)$
has
low, right-associative binding precedence, so it sometimes allows
parentheses to be omitted; for example:
f $ g $ h x = f (g (h x))
It is also useful in higher-order situations, such as
,
or map
($
0) xs
.zipWith
($
) fs xs
Note that (
is levity-polymorphic in its result type, so that
$
)foo
where $
Truefoo :: Bool -> Int#
is well-typed.
join :: Monad m => m (m a) -> m a Source #
The join
function is the conventional monad join operator. It
is used to remove one level of monadic structure, projecting its
bound argument into the outer level.
'
' can be understood as the join
bssdo
expression
do bs <- bss bs
Examples
A common use of join
is to run an IO
computation returned from
an STM
transaction, since STM
transactions
can't perform IO
directly. Recall that
atomically
:: STM a -> IO a
is used to run STM
transactions atomically. So, by
specializing the types of atomically
and join
to
atomically
:: STM (IO b) -> IO (IO b)join
:: IO (IO b) -> IO b
we can compose them as
join
.atomically
:: STM (IO b) -> IO b
class Applicative m => Monad m where Source #
The Monad
class defines the basic operations over a monad,
a concept from a branch of mathematics known as category theory.
From the perspective of a Haskell programmer, however, it is best to
think of a monad as an abstract datatype of actions.
Haskell's do
expressions provide a convenient syntax for writing
monadic expressions.
Instances of Monad
should satisfy the following:
- Left identity
return
a>>=
k = k a- Right identity
m
>>=
return
= m- Associativity
m
>>=
(\x -> k x>>=
h) = (m>>=
k)>>=
h
Furthermore, the Monad
and Applicative
operations should relate as follows:
The above laws imply:
and that pure
and (<*>
) satisfy the applicative functor laws.
The instances of Monad
for lists, Maybe
and IO
defined in the Prelude satisfy these laws.
(>>=) :: forall a b. m a -> (a -> m b) -> m b infixl 1 Source #
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
(>>) :: forall a b. m a -> m b -> m b infixl 1 Source #
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
Inject a value into the monadic type.
Instances
Monad [] Source # | Since: base-2.1 |
Monad Maybe Source # | Since: base-2.1 |
Monad IO Source # | Since: base-2.1 |
Monad Par1 Source # | Since: base-4.9.0.0 |
Monad NonEmpty Source # | Since: base-4.9.0.0 |
Monad NoIO Source # | Since: base-4.4.0.0 |
Monad ReadP Source # | Since: base-2.1 |
Monad ReadPrec Source # | Since: base-2.1 |
Monad Down Source # | Since: base-4.11.0.0 |
Monad Product Source # | Since: base-4.8.0.0 |
Monad Sum Source # | Since: base-4.8.0.0 |
Monad Dual Source # | Since: base-4.8.0.0 |
Monad Last Source # | Since: base-4.8.0.0 |
Monad First Source # | Since: base-4.8.0.0 |
Monad STM Source # | Since: base-4.3.0.0 |
Monad Identity Source # | Since: base-4.8.0.0 |
Monad Option Source # | Since: base-4.9.0.0 |
Monad Last Source # | Since: base-4.9.0.0 |
Monad First Source # | Since: base-4.9.0.0 |
Monad Max Source # | Since: base-4.9.0.0 |
Monad Min Source # | Since: base-4.9.0.0 |
Monad Complex Source # | Since: base-4.9.0.0 |
Monad (Either e) Source # | Since: base-4.4.0.0 |
Monad (U1 :: Type -> Type) Source # | Since: base-4.9.0.0 |
Monoid a => Monad ((,) a) Source # | Since: base-4.9.0.0 |
Monad (ST s) Source # | Since: base-2.1 |
Monad (Proxy :: Type -> Type) Source # | Since: base-4.7.0.0 |
ArrowApply a => Monad (ArrowMonad a) Source # | Since: base-2.1 |
Defined in Control.Arrow (>>=) :: ArrowMonad a a0 -> (a0 -> ArrowMonad a b) -> ArrowMonad a b Source # (>>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Source # return :: a0 -> ArrowMonad a a0 Source # | |
Monad m => Monad (WrappedMonad m) Source # | Since: base-4.7.0.0 |
Defined in Control.Applicative (>>=) :: WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b Source # (>>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Source # return :: a -> WrappedMonad m a Source # | |
Monad (ST s) Source # | Since: base-2.1 |
Monad f => Monad (Rec1 f) Source # | Since: base-4.9.0.0 |
(Monoid a, Monoid b) => Monad ((,,) a b) Source # | Since: base-4.14.0.0 |
Monad f => Monad (Alt f) Source # | Since: base-4.8.0.0 |
Monad f => Monad (Ap f) Source # | Since: base-4.12.0.0 |
Monad m => Monad (Kleisli m a) Source # | Since: base-4.14.0.0 |
Monad ((->) r :: Type -> Type) Source # | Since: base-2.1 |
(Monad f, Monad g) => Monad (f :*: g) Source # | Since: base-4.9.0.0 |
(Monoid a, Monoid b, Monoid c) => Monad ((,,,) a b c) Source # | Since: base-4.14.0.0 |
(Monad f, Monad g) => Monad (Product f g) Source # | Since: base-4.9.0.0 |
Monad f => Monad (M1 i c f) Source # | Since: base-4.9.0.0 |
class Functor f where Source #
A type f
is a Functor if it provides a function fmap
which, given any types a
and b
lets you apply any function from (a -> b)
to turn an f a
into an f b
, preserving the
structure of f
. Furthermore f
needs to adhere to the following:
Note, that the second law follows from the free theorem of the type fmap
and
the first law, so you need only check that the former condition holds.
fmap :: (a -> b) -> f a -> f b Source #
Using ApplicativeDo
: '
' can be understood as
the fmap
f asdo
expression
do a <- as pure (f a)
with an inferred Functor
constraint.
Instances
Functor [] Source # | Since: base-2.1 |
Functor Maybe Source # | Since: base-2.1 |
Functor IO Source # | Since: base-2.1 |
Functor Par1 Source # | Since: base-4.9.0.0 |
Functor NonEmpty Source # | Since: base-4.9.0.0 |
Functor NoIO Source # | Since: base-4.8.0.0 |
Functor ReadP Source # | Since: base-2.1 |
Functor ReadPrec Source # | Since: base-2.1 |
Functor Down Source # | Since: base-4.11.0.0 |
Functor Product Source # | Since: base-4.8.0.0 |
Functor Sum Source # | Since: base-4.8.0.0 |
Functor Dual Source # | Since: base-4.8.0.0 |
Functor Last Source # | Since: base-4.8.0.0 |
Functor First Source # | Since: base-4.8.0.0 |
Functor STM Source # | Since: base-4.3.0.0 |
Functor Handler Source # | Since: base-4.6.0.0 |
Functor Identity Source # | Since: base-4.8.0.0 |
Functor ZipList Source # | Since: base-2.1 |
Functor ArgDescr Source # | Since: base-4.6.0.0 |
Functor OptDescr Source # | Since: base-4.6.0.0 |
Functor ArgOrder Source # | Since: base-4.6.0.0 |
Functor Option Source # | Since: base-4.9.0.0 |
Functor Last Source # | Since: base-4.9.0.0 |
Functor First Source # | Since: base-4.9.0.0 |
Functor Max Source # | Since: base-4.9.0.0 |
Functor Min Source # | Since: base-4.9.0.0 |
Functor Complex Source # | Since: base-4.9.0.0 |
Functor (Either a) Source # | Since: base-3.0 |
Functor (V1 :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor (U1 :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor ((,) a) Source # | Since: base-2.1 |
Functor (ST s) Source # | Since: base-2.1 |
Functor (Array i) Source # | Since: base-2.1 |
Functor (Proxy :: Type -> Type) Source # | Since: base-4.7.0.0 |
Arrow a => Functor (ArrowMonad a) Source # | Since: base-4.6.0.0 |
Defined in Control.Arrow fmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source # (<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # | |
Monad m => Functor (WrappedMonad m) Source # | Since: base-2.1 |
Defined in Control.Applicative fmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source # (<$) :: a -> WrappedMonad m b -> WrappedMonad m a Source # | |
Functor (ST s) Source # | Since: base-2.1 |
Functor (Arg a) Source # | Since: base-4.9.0.0 |
Functor f => Functor (Rec1 f) Source # | Since: base-4.9.0.0 |
Functor (URec Char :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor (URec Double :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor (URec Float :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor (URec Int :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor (URec Word :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor (URec (Ptr ()) :: Type -> Type) Source # | Since: base-4.9.0.0 |
Functor ((,,) a b) Source # | Since: base-4.14.0.0 |
Functor f => Functor (Alt f) Source # | Since: base-4.8.0.0 |
Functor f => Functor (Ap f) Source # | Since: base-4.12.0.0 |
Functor (Const m :: Type -> Type) Source # | Since: base-2.1 |
Functor m => Functor (Kleisli m a) Source # | Since: base-4.14.0.0 |
Arrow a => Functor (WrappedArrow a b) Source # | Since: base-2.1 |
Defined in Control.Applicative fmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source # (<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source # | |
Functor ((->) r :: Type -> Type) Source # | Since: base-2.1 |
Functor (K1 i c :: Type -> Type) Source # | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :+: g) Source # | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :*: g) Source # | Since: base-4.9.0.0 |
Functor ((,,,) a b c) Source # | Since: base-4.14.0.0 |
(Functor f, Functor g) => Functor (Sum f g) Source # | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (Product f g) Source # | Since: base-4.9.0.0 |
Functor f => Functor (M1 i c f) Source # | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :.: g) Source # | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (Compose f g) Source # | Since: base-4.9.0.0 |
class Functor f => Applicative f where Source #
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).
Lift a value.
(<*>) :: f (a -> b) -> f a -> f b infixl 4 Source #
Sequential application.
A few functors support an implementation of <*>
that is more
efficient than the default one.
Using ApplicativeDo
: 'fs
' can be understood as
the <*>
asdo
expression
do f <- fs a <- as pure (f a)
liftA2 :: (a -> b -> c) -> f a -> f b -> f c Source #
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
.
Using ApplicativeDo
: '
' can be understood
as the liftA2
f as bsdo
expression
do a <- as b <- bs pure (f a b)
(*>) :: f a -> f b -> f b infixl 4 Source #
Sequence actions, discarding the value of the first argument.
'as
' can be understood as the *>
bsdo
expression
do as bs
This is a tad complicated for our ApplicativeDo
extension
which will give it a Monad
constraint. For an Applicative
constraint we write it of the form
do _ <- as b <- bs pure b
(<*) :: f a -> f b -> f a infixl 4 Source #
Sequence actions, discarding the value of the second argument.
Using ApplicativeDo
: 'as
' can be understood as
the <*
bsdo
expression
do a <- as bs pure a
Instances
Applicative [] Source # | Since: base-2.1 |
Applicative Maybe Source # | Since: base-2.1 |
Applicative IO Source # | Since: base-2.1 |
Applicative Par1 Source # | Since: base-4.9.0.0 |
Applicative NonEmpty Source # | Since: base-4.9.0.0 |
Applicative NoIO Source # | Since: base-4.8.0.0 |
Applicative ReadP Source # | Since: base-4.6.0.0 |
Applicative ReadPrec Source # | Since: base-4.6.0.0 |
Defined in Text.ParserCombinators.ReadPrec | |
Applicative Down Source # | Since: base-4.11.0.0 |
Applicative Product Source # | Since: base-4.8.0.0 |
Defined in Data.Semigroup.Internal | |
Applicative Sum Source # | Since: base-4.8.0.0 |
Applicative Dual Source # | Since: base-4.8.0.0 |
Applicative Last Source # | Since: base-4.8.0.0 |
Applicative First Source # | Since: base-4.8.0.0 |
Applicative STM Source # | Since: base-4.8.0.0 |
Applicative Identity Source # | Since: base-4.8.0.0 |
Defined in Data.Functor.Identity | |
Applicative ZipList Source # | 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: base-2.1 |
Applicative Option Source # | Since: base-4.9.0.0 |
Applicative Last Source # | Since: base-4.9.0.0 |
Applicative First Source # | Since: base-4.9.0.0 |
Applicative Max Source # | Since: base-4.9.0.0 |
Applicative Min Source # | Since: base-4.9.0.0 |
Applicative Complex Source # | Since: base-4.9.0.0 |
Applicative (Either e) Source # | Since: base-3.0 |
Defined in Data.Either | |
Applicative (U1 :: Type -> Type) Source # | Since: base-4.9.0.0 |
Monoid a => Applicative ((,) a) Source # | For tuples, the ("hello ", (+15)) <*> ("world!", 2002) ("hello world!",2017) Since: base-2.1 |
Applicative (ST s) Source # | Since: base-4.4.0.0 |
Applicative (Proxy :: Type -> Type) Source # | Since: base-4.7.0.0 |
Arrow a => Applicative (ArrowMonad a) Source # | Since: base-4.6.0.0 |
Defined in Control.Arrow pure :: a0 -> ArrowMonad a a0 Source # (<*>) :: ArrowMonad a (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source # liftA2 :: (a0 -> b -> c) -> ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a c Source # (*>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Source # (<*) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # | |
Monad m => Applicative (WrappedMonad m) Source # | Since: base-2.1 |
Defined in Control.Applicative pure :: a -> WrappedMonad m a Source # (<*>) :: WrappedMonad m (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source # liftA2 :: (a -> b -> c) -> WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m c Source # (*>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Source # (<*) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m a Source # | |
Applicative (ST s) Source # | Since: base-2.1 |
Applicative f => Applicative (Rec1 f) Source # | Since: base-4.9.0.0 |
(Monoid a, Monoid b) => Applicative ((,,) a b) Source # | Since: base-4.14.0.0 |
Defined in GHC.Base | |
Applicative f => Applicative (Alt f) Source # | Since: base-4.8.0.0 |
Applicative f => Applicative (Ap f) Source # | Since: base-4.12.0.0 |
Monoid m => Applicative (Const m :: Type -> Type) Source # | Since: base-2.0.1 |
Applicative m => Applicative (Kleisli m a) Source # | Since: base-4.14.0.0 |
Defined in Control.Arrow pure :: a0 -> Kleisli m a a0 Source # (<*>) :: Kleisli m a (a0 -> b) -> Kleisli m a a0 -> Kleisli m a b Source # liftA2 :: (a0 -> b -> c) -> Kleisli m a a0 -> Kleisli m a b -> Kleisli m a c Source # (*>) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a b Source # (<*) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a a0 Source # | |
Arrow a => Applicative (WrappedArrow a b) Source # | Since: base-2.1 |
Defined in Control.Applicative pure :: a0 -> WrappedArrow a b a0 Source # (<*>) :: WrappedArrow a b (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source # liftA2 :: (a0 -> b0 -> c) -> WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b c Source # (*>) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b b0 Source # (<*) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source # | |
Applicative ((->) r :: Type -> Type) Source # | Since: base-2.1 |
Monoid c => Applicative (K1 i c :: Type -> Type) Source # | Since: base-4.12.0.0 |
(Applicative f, Applicative g) => Applicative (f :*: g) Source # | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
(Monoid a, Monoid b, Monoid c) => Applicative ((,,,) a b c) Source # | Since: base-4.14.0.0 |
Defined in GHC.Base pure :: a0 -> (a, b, c, a0) Source # (<*>) :: (a, b, c, a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Source # liftA2 :: (a0 -> b0 -> c0) -> (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, c0) Source # (*>) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, b0) Source # (<*) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, a0) Source # | |
(Applicative f, Applicative g) => Applicative (Product f g) Source # | Since: base-4.9.0.0 |
Defined in Data.Functor.Product pure :: a -> Product f g a Source # (<*>) :: Product f g (a -> b) -> Product f g a -> Product f g b Source # liftA2 :: (a -> b -> c) -> Product f g a -> Product f g b -> Product f g c Source # (*>) :: Product f g a -> Product f g b -> Product f g b Source # (<*) :: Product f g a -> Product f g b -> Product f g a Source # | |
Applicative f => Applicative (M1 i c f) Source # | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
(Applicative f, Applicative g) => Applicative (f :.: g) Source # | Since: base-4.9.0.0 |
Defined in GHC.Generics | |
(Applicative f, Applicative g) => Applicative (Compose f g) Source # | Since: base-4.9.0.0 |
Defined in Data.Functor.Compose pure :: a -> Compose f g a Source # (<*>) :: Compose f g (a -> b) -> Compose f g a -> Compose f g b Source # liftA2 :: (a -> b -> c) -> Compose f g a -> Compose f g b -> Compose f g c Source # (*>) :: Compose f g a -> Compose f g b -> Compose f g b Source # (<*) :: Compose f g a -> Compose f g b -> Compose f g a Source # |
class Semigroup a where Source #
The class of semigroups (types with an associative binary operation).
Instances should satisfy the following:
Since: base-4.9.0.0
(<>) :: a -> a -> a infixr 6 Source #
An associative operation.
>>>
[1,2,3] <> [4,5,6]
[1,2,3,4,5,6]
sconcat :: NonEmpty a -> a Source #
Reduce a non-empty list with <>
The default definition should be sufficient, but this can be overridden for efficiency.
>>>
import Data.List.NonEmpty
>>>
sconcat $ "Hello" :| [" ", "Haskell", "!"]
"Hello Haskell!"
stimes :: Integral b => b -> a -> a Source #
Repeat a value n
times.
Given that this works on a Semigroup
it is allowed to fail if
you request 0 or fewer repetitions, and the default definition
will do so.
By making this a member of the class, idempotent semigroups
and monoids can upgrade this to execute in \(\mathcal{O}(1)\) by
picking stimes =
or stimesIdempotent
stimes =
respectively.stimesIdempotentMonoid
>>>
stimes 4 [1]
[1,1,1,1]
Instances
class Semigroup a => Monoid a where Source #
The class of monoids (types with an associative binary operation that has an identity). Instances should satisfy the following:
- Right identity
x
<>
mempty
= x- Left identity
mempty
<>
x = x- Associativity
x
(<>
(y<>
z) = (x<>
y)<>
zSemigroup
law)- Concatenation
mconcat
=foldr
(<>
)mempty
The method names refer to the monoid of lists under concatenation, but there are many other instances.
Some types can be viewed as a monoid in more than one way,
e.g. both addition and multiplication on numbers.
In such cases we often define newtype
s and make those instances
of Monoid
, e.g. Sum
and Product
.
NOTE: Semigroup
is a superclass of Monoid
since base-4.11.0.0.
Identity of mappend
>>>
"Hello world" <> mempty
"Hello world"
mappend :: a -> a -> a Source #
An associative operation
NOTE: This method is redundant and has the default
implementation
since base-4.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
.
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!"
Instances
Monoid Ordering Source # | Since: base-2.1 |
Monoid () Source # | Since: base-2.1 |
Monoid Any Source # | Since: base-2.1 |
Monoid All Source # | Since: base-2.1 |
Monoid Lifetime Source # |
Since: base-4.8.0.0 |
Monoid Event Source # | Since: base-4.4.0.0 |
Monoid [a] Source # | Since: base-2.1 |
Semigroup a => Monoid (Maybe a) Source # | Lift a semigroup into Since 4.11.0: constraint on inner Since: base-2.1 |
Monoid a => Monoid (IO a) Source # | Since: base-4.9.0.0 |
Monoid p => Monoid (Par1 p) Source # | Since: base-4.12.0.0 |
Monoid a => Monoid (Down a) Source # | Since: base-4.11.0.0 |
Num a => Monoid (Product a) Source # | Since: base-2.1 |
Num a => Monoid (Sum a) Source # | Since: base-2.1 |
Monoid (Endo a) Source # | Since: base-2.1 |
Monoid a => Monoid (Dual a) Source # | Since: base-2.1 |
Monoid (Last a) Source # | Since: base-2.1 |
Monoid (First a) Source # | Since: base-2.1 |
Monoid a => Monoid (Identity a) Source # | Since: base-4.9.0.0 |
Semigroup a => Monoid (Option a) Source # | Since: base-4.9.0.0 |
Monoid m => Monoid (WrappedMonoid m) Source # | Since: base-4.9.0.0 |
Defined in Data.Semigroup mempty :: WrappedMonoid m Source # mappend :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source # mconcat :: [WrappedMonoid m] -> WrappedMonoid m Source # | |
(Ord a, Bounded a) => Monoid (Max a) Source # | Since: base-4.9.0.0 |
(Ord a, Bounded a) => Monoid (Min a) Source # | Since: base-4.9.0.0 |
Monoid (Equivalence a) Source # | |
Defined in Data.Functor.Contravariant mempty :: Equivalence a Source # mappend :: Equivalence a -> Equivalence a -> Equivalence a Source # mconcat :: [Equivalence a] -> Equivalence a Source # | |
Monoid (Comparison a) Source # | |
Defined in Data.Functor.Contravariant mempty :: Comparison a Source # mappend :: Comparison a -> Comparison a -> Comparison a Source # mconcat :: [Comparison a] -> Comparison a Source # | |
Monoid (Predicate a) Source # | |
Monoid b => Monoid (a -> b) Source # | Since: base-2.1 |
Monoid (U1 p) Source # | Since: base-4.12.0.0 |
(Monoid a, Monoid b) => Monoid (a, b) Source # | Since: base-2.1 |
Monoid a => Monoid (ST s a) Source # | Since: base-4.11.0.0 |
Monoid (Proxy s) Source # | Since: base-4.7.0.0 |
Monoid a => Monoid (Op a b) Source # | |
Monoid (f p) => Monoid (Rec1 f p) Source # | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) Source # | Since: base-2.1 |
Alternative f => Monoid (Alt f a) Source # | Since: base-4.8.0.0 |
(Applicative f, Monoid a) => Monoid (Ap f a) Source # | Since: base-4.12.0.0 |
Monoid a => Monoid (Const a b) Source # | Since: base-4.9.0.0 |
Monoid c => Monoid (K1 i c p) Source # | Since: base-4.12.0.0 |
(Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p) Source # | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) Source # | Since: base-2.1 |
Monoid (f p) => Monoid (M1 i c f p) Source # | Since: base-4.12.0.0 |
Monoid (f (g p)) => Monoid ((f :.: g) p) Source # | Since: base-4.12.0.0 |
(Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e) Source # | Since: base-2.1 |
Non-empty (and non-strict) list type.
Since: base-4.9.0.0
a :| [a] infixr 5 |
Instances
class (Alternative m, Monad m) => MonadPlus m where Source #
Monads that also support choice and failure.
Nothing
The identity of mplus
. It should also satisfy the equations
mzero >>= f = mzero v >> mzero = mzero
The default definition is
mzero = empty
mplus :: m a -> m a -> m a Source #
An associative operation. The default definition is
mplus = (<|>
)
Instances
MonadPlus [] Source # | Since: base-2.1 |
MonadPlus Maybe Source # | Since: base-2.1 |
MonadPlus IO Source # | Since: base-4.9.0.0 |
MonadPlus ReadP Source # | Since: base-2.1 |
MonadPlus ReadPrec Source # | Since: base-2.1 |
MonadPlus STM Source # | Since: base-4.3.0.0 |
MonadPlus Option Source # | Since: base-4.9.0.0 |
MonadPlus (U1 :: Type -> Type) Source # | Since: base-4.9.0.0 |
MonadPlus (Proxy :: Type -> Type) Source # | Since: base-4.9.0.0 |
(ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) Source # | Since: base-4.6.0.0 |
Defined in Control.Arrow mzero :: ArrowMonad a a0 Source # mplus :: ArrowMonad a a0 -> ArrowMonad a a0 -> ArrowMonad a a0 Source # | |
MonadPlus f => MonadPlus (Rec1 f) Source # | Since: base-4.9.0.0 |
MonadPlus f => MonadPlus (Alt f) Source # | Since: base-4.8.0.0 |
MonadPlus f => MonadPlus (Ap f) Source # | Since: base-4.12.0.0 |
MonadPlus m => MonadPlus (Kleisli m a) Source # | Since: base-4.14.0.0 |
(MonadPlus f, MonadPlus g) => MonadPlus (f :*: g) Source # | Since: base-4.9.0.0 |
(MonadPlus f, MonadPlus g) => MonadPlus (Product f g) Source # | Since: base-4.9.0.0 |
MonadPlus f => MonadPlus (M1 i c f) Source # | Since: base-4.9.0.0 |
class Applicative f => Alternative f where Source #
A monoid on applicative functors.
If defined, some
and many
should be the least solutions
of the equations:
The identity of <|>
(<|>) :: f a -> f a -> f a infixl 3 Source #
An associative binary operation
One or more.
Zero or more.
Instances
(<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 Source #
liftA :: Applicative f => (a -> b) -> f a -> f b Source #
liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d Source #
Lift a ternary function to actions.
Using ApplicativeDo
: '
' can be understood
as the liftA3
f as bs csdo
expression
do a <- as b <- bs c <- cs pure (f a b c)
(=<<) :: Monad m => (a -> m b) -> m a -> m b infixr 1 Source #
Same as >>=
, but with the arguments interchanged.
when :: Applicative f => Bool -> f () -> f () Source #
Conditional execution of Applicative
expressions. For example,
when debug (putStrLn "Debugging")
will output the string Debugging
if the Boolean value debug
is True
, and otherwise do nothing.
sequence :: Monad m => [m a] -> m [a] Source #
Evaluate each action in the sequence from left to right, and collect the results.
liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r Source #
Promote a function to a monad, scanning the monadic arguments from left to right. For example,
liftM2 (+) [0,1] [0,2] = [0,2,1,3] liftM2 (+) (Just 1) Nothing = Nothing
liftM3 :: Monad m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r Source #
Promote a function to a monad, scanning the monadic arguments from
left to right (cf. liftM2
).
liftM4 :: Monad m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r Source #
Promote a function to a monad, scanning the monadic arguments from
left to right (cf. liftM2
).
liftM5 :: Monad m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r Source #
Promote a function to a monad, scanning the monadic arguments from
left to right (cf. liftM2
).
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 Source #
takes its (first) two arguments in the reverse order of flip
ff
.
>>>
flip (++) "hello" "world"
"worldhello"
($!) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0 Source #
Strict (call-by-value) 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.
until :: (a -> Bool) -> (a -> a) -> a -> a Source #
yields the result of applying until
p ff
until p
holds.
Returns the tag of a constructor application; this function is used by the deriving code for Eq, Ord and Enum.
shiftL# :: Word# -> Int# -> Word# Source #
Shift the argument left by the specified number of bits (which must be non-negative).
shiftRL# :: Word# -> Int# -> Word# Source #
Shift the argument right by the specified number of bits (which must be non-negative). The RL means "right, logical" (as opposed to RA for arithmetic) (although an arithmetic right shift wouldn't make sense for Word#)
iShiftL# :: Int# -> Int# -> Int# Source #
Shift the argument left by the specified number of bits (which must be non-negative).
iShiftRA# :: Int# -> Int# -> Int# Source #
Shift the argument right (signed) by the specified number of bits (which must be non-negative). The RA means "right, arithmetic" (as opposed to RL for logical)
iShiftRL# :: Int# -> Int# -> Int# Source #
Shift the argument right (unsigned) by the specified number of bits (which must be non-negative). The RL means "right, logical" (as opposed to RA for arithmetic)
module GHC.Classes
module GHC.CString
module GHC.Magic
module GHC.Types
module GHC.Prim
module GHC.Prim.Ext
module GHC.Err
module GHC.Maybe