| 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 |
GHC.Base
Description
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
returna>>=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.
Minimal complete definition
Methods
(>>=) :: 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 Methods (>>=) :: 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 Methods (>>=) :: 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.
Minimal complete definition
Methods
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 Methods 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 Methods 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 Methods 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:
(<*>) =liftA2id
liftA2f x y = f<$>x<*>y
Further, any definition must satisfy the following:
- Identity
pureid<*>v = v- Composition
pure(.)<*>u<*>v<*>w = u<*>(v<*>w)- Homomorphism
puref<*>purex =pure(f x)- Interchange
u
<*>purey =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
liftA2p (liftA2q u v) =liftA2f u .liftA2g v
If f is also a Monad, it should satisfy
(which implies that pure and <*> satisfy the applicative functor laws).
Methods
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 |
Defined in GHC.Base | |
| 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 |
Defined in Control.Applicative | |
| 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 Methods 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 Methods 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 |
Defined in Data.Functor.Const | |
| Applicative m => Applicative (Kleisli m a) Source # | Since: base-4.14.0.0 |
Defined in Control.Arrow Methods 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 Methods 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 Methods 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 Methods 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 Methods 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
Minimal complete definition
Methods
(<>) :: 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 stimesIdempotentstimes =
respectively.stimesIdempotentMonoid
>>>stimes 4 [1][1,1,1,1]
Instances
| Semigroup Ordering Source # | Since: base-4.9.0.0 |
| Semigroup () Source # | Since: base-4.9.0.0 |
| Semigroup Any Source # | Since: base-4.9.0.0 |
| Semigroup All Source # | Since: base-4.9.0.0 |
| Semigroup Lifetime Source # | Since: base-4.10.0.0 |
| Semigroup Event Source # | Since: base-4.10.0.0 |
| Semigroup Void Source # | Since: base-4.9.0.0 |
| Semigroup [a] Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Maybe a) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (IO a) Source # | Since: base-4.10.0.0 |
| Semigroup p => Semigroup (Par1 p) Source # | Since: base-4.12.0.0 |
| Semigroup (NonEmpty a) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Down a) Source # | Since: base-4.11.0.0 |
| Num a => Semigroup (Product a) Source # | Since: base-4.9.0.0 |
| Num a => Semigroup (Sum a) Source # | Since: base-4.9.0.0 |
| Semigroup (Endo a) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Dual a) Source # | Since: base-4.9.0.0 |
| Semigroup (Last a) Source # | Since: base-4.9.0.0 |
| Semigroup (First a) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Identity a) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Option a) Source # | Since: base-4.9.0.0 |
| Monoid m => Semigroup (WrappedMonoid m) Source # | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methods (<>) :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source # sconcat :: NonEmpty (WrappedMonoid m) -> WrappedMonoid m Source # stimes :: Integral b => b -> WrappedMonoid m -> WrappedMonoid m Source # | |
| Semigroup (Last a) Source # | Since: base-4.9.0.0 |
| Semigroup (First a) Source # | Since: base-4.9.0.0 |
| Ord a => Semigroup (Max a) Source # | Since: base-4.9.0.0 |
| Ord a => Semigroup (Min a) Source # | Since: base-4.9.0.0 |
| Semigroup (Equivalence a) Source # | |
Defined in Data.Functor.Contravariant Methods (<>) :: Equivalence a -> Equivalence a -> Equivalence a Source # sconcat :: NonEmpty (Equivalence a) -> Equivalence a Source # stimes :: Integral b => b -> Equivalence a -> Equivalence a Source # | |
| Semigroup (Comparison a) Source # | |
Defined in Data.Functor.Contravariant Methods (<>) :: Comparison a -> Comparison a -> Comparison a Source # sconcat :: NonEmpty (Comparison a) -> Comparison a Source # stimes :: Integral b => b -> Comparison a -> Comparison a Source # | |
| Semigroup (Predicate a) Source # | |
| Semigroup b => Semigroup (a -> b) Source # | Since: base-4.9.0.0 |
| Semigroup (Either a b) Source # | Since: base-4.9.0.0 |
| Semigroup (V1 p) Source # | Since: base-4.12.0.0 |
| Semigroup (U1 p) Source # | Since: base-4.12.0.0 |
| (Semigroup a, Semigroup b) => Semigroup (a, b) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (ST s a) Source # | Since: base-4.11.0.0 |
| Semigroup (Proxy s) Source # | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Op a b) Source # | |
| Semigroup (f p) => Semigroup (Rec1 f p) Source # | Since: base-4.12.0.0 |
| (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) Source # | Since: base-4.9.0.0 |
| Alternative f => Semigroup (Alt f a) Source # | Since: base-4.9.0.0 |
| (Applicative f, Semigroup a) => Semigroup (Ap f a) Source # | Since: base-4.12.0.0 |
| Semigroup a => Semigroup (Const a b) Source # | Since: base-4.9.0.0 |
| Semigroup c => Semigroup (K1 i c p) Source # | Since: base-4.12.0.0 |
| (Semigroup (f p), Semigroup (g p)) => Semigroup ((f :*: g) p) Source # | Since: base-4.12.0.0 |
| (Semigroup a, Semigroup b, Semigroup c, Semigroup d) => Semigroup (a, b, c, d) Source # | Since: base-4.9.0.0 |
| Semigroup (f p) => Semigroup (M1 i c f p) Source # | Since: base-4.12.0.0 |
| Semigroup (f (g p)) => Semigroup ((f :.: g) p) Source # | Since: base-4.12.0.0 |
| (Semigroup a, Semigroup b, Semigroup c, Semigroup d, Semigroup e) => Semigroup (a, b, c, d, e) Source # | Since: base-4.9.0.0 |
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)<>zSemigrouplaw)- 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 newtypes and make those instances
of Monoid, e.g. Sum and Product.
NOTE: Semigroup is a superclass of Monoid since base-4.11.0.0.
Minimal complete definition
Methods
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 Methods 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 Methods 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 Methods 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
Constructors
| a :| [a] infixr 5 |
Instances
| Monad NonEmpty Source # | Since: base-4.9.0.0 |
| Functor NonEmpty Source # | Since: base-4.9.0.0 |
| MonadFix NonEmpty Source # | Since: base-4.9.0.0 |
| Applicative NonEmpty Source # | Since: base-4.9.0.0 |
Defined in GHC.Base | |
| Foldable NonEmpty Source # | Since: base-4.9.0.0 |
Defined in Data.Foldable Methods fold :: Monoid m => NonEmpty m -> m Source # foldMap :: Monoid m => (a -> m) -> NonEmpty a -> m Source # foldMap' :: Monoid m => (a -> m) -> NonEmpty a -> m Source # foldr :: (a -> b -> b) -> b -> NonEmpty a -> b Source # foldr' :: (a -> b -> b) -> b -> NonEmpty a -> b Source # foldl :: (b -> a -> b) -> b -> NonEmpty a -> b Source # foldl' :: (b -> a -> b) -> b -> NonEmpty a -> b Source # foldr1 :: (a -> a -> a) -> NonEmpty a -> a Source # foldl1 :: (a -> a -> a) -> NonEmpty a -> a Source # toList :: NonEmpty a -> [a] Source # null :: NonEmpty a -> Bool Source # length :: NonEmpty a -> Int Source # elem :: Eq a => a -> NonEmpty a -> Bool Source # maximum :: Ord a => NonEmpty a -> a Source # minimum :: Ord a => NonEmpty a -> a Source # | |
| Traversable NonEmpty Source # | Since: base-4.9.0.0 |
Defined in Data.Traversable | |
| MonadZip NonEmpty Source # | Since: base-4.9.0.0 |
| Show1 NonEmpty Source # | Since: base-4.10.0.0 |
| Read1 NonEmpty Source # | Since: base-4.10.0.0 |
Defined in Data.Functor.Classes Methods liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (NonEmpty a) Source # liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [NonEmpty a] Source # liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (NonEmpty a) Source # liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [NonEmpty a] Source # | |
| Ord1 NonEmpty Source # | Since: base-4.10.0.0 |
Defined in Data.Functor.Classes | |
| Eq1 NonEmpty Source # | Since: base-4.10.0.0 |
| IsList (NonEmpty a) Source # | Since: base-4.9.0.0 |
| Eq a => Eq (NonEmpty a) Source # | Since: base-4.9.0.0 |
| Data a => Data (NonEmpty a) Source # | Since: base-4.9.0.0 |
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NonEmpty a -> c (NonEmpty a) Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NonEmpty a) Source # toConstr :: NonEmpty a -> Constr Source # dataTypeOf :: NonEmpty a -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NonEmpty a)) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NonEmpty a)) Source # gmapT :: (forall b. Data b => b -> b) -> NonEmpty a -> NonEmpty a Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source # gmapQ :: (forall d. Data d => d -> u) -> NonEmpty a -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> NonEmpty a -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source # | |
| Ord a => Ord (NonEmpty a) Source # | Since: base-4.9.0.0 |
Defined in GHC.Base Methods compare :: NonEmpty a -> NonEmpty a -> Ordering Source # (<) :: NonEmpty a -> NonEmpty a -> Bool Source # (<=) :: NonEmpty a -> NonEmpty a -> Bool Source # (>) :: NonEmpty a -> NonEmpty a -> Bool Source # (>=) :: NonEmpty a -> NonEmpty a -> Bool Source # | |
| Read a => Read (NonEmpty a) Source # | Since: base-4.11.0.0 |
| Show a => Show (NonEmpty a) Source # | Since: base-4.11.0.0 |
| Generic (NonEmpty a) Source # | Since: base-4.6.0.0 |
| Semigroup (NonEmpty a) Source # | Since: base-4.9.0.0 |
| Generic1 NonEmpty Source # | Since: base-4.6.0.0 |
| type Rep (NonEmpty a) Source # | |
Defined in GHC.Generics type Rep (NonEmpty a) = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'LeftAssociative 9) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a]))) | |
| type Item (NonEmpty a) Source # | |
| type Rep1 NonEmpty Source # | |
Defined in GHC.Generics type Rep1 NonEmpty = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'LeftAssociative 9) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 []))) | |
class (Alternative m, Monad m) => MonadPlus m where Source #
Monads that also support choice and failure.
Minimal complete definition
Nothing
Methods
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 Methods 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:
Methods
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