base-4.13.0.0: Basic libraries

Description

The Functor, Monad and MonadPlus classes, with some useful operations on monads.

Synopsis

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:

Identity
fmap id == id
Composition
fmap (f . g) == fmap f . fmap g

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.

Methods

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

#### Instances

Instances details
 Functor [] Source # Since: 2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> [a] -> [b] Source #(<$) :: a -> [b] -> [a] Source # Source # Since: 2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> Maybe a -> Maybe b Source #(<$) :: a -> Maybe b -> Maybe a Source # Source # Since: 2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> IO a -> IO b Source #(<$) :: a -> IO b -> IO a Source # Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> Par1 a -> Par1 b Source #(<$) :: a -> Par1 b -> Par1 a Source # Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> NonEmpty a -> NonEmpty b Source #(<$) :: a -> NonEmpty b -> NonEmpty a Source # Source # Since: 4.8.0.0 Instance detailsDefined in GHC.GHCi Methodsfmap :: (a -> b) -> NoIO a -> NoIO b Source #(<$) :: a -> NoIO b -> NoIO a Source # Source # Since: 2.1 Instance detailsDefined in Text.ParserCombinators.ReadP Methodsfmap :: (a -> b) -> ReadP a -> ReadP b Source #(<$) :: a -> ReadP b -> ReadP a Source # Source # Since: 2.1 Instance detailsDefined in Text.ParserCombinators.ReadPrec Methodsfmap :: (a -> b) -> ReadPrec a -> ReadPrec b Source #(<$) :: a -> ReadPrec b -> ReadPrec a Source # Source # Since: 4.11.0.0 Instance detailsDefined in Data.Ord Methodsfmap :: (a -> b) -> Down a -> Down b Source #(<$) :: a -> Down b -> Down a Source # Source # Since: 4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Product a -> Product b Source #(<$) :: a -> Product b -> Product a Source # Source # Since: 4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Sum a -> Sum b Source #(<$) :: a -> Sum b -> Sum a Source # Source # Since: 4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Dual a -> Dual b Source #(<$) :: a -> Dual b -> Dual a Source # Source # Since: 4.8.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> Last a -> Last b Source #(<$) :: a -> Last b -> Last a Source # Source # Since: 4.8.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # Source # Since: 4.3.0.0 Instance detailsDefined in GHC.Conc.Sync Methodsfmap :: (a -> b) -> STM a -> STM b Source #(<$) :: a -> STM b -> STM a Source # Source # Since: 4.6.0.0 Instance detailsDefined in Control.Exception Methodsfmap :: (a -> b) -> Handler a -> Handler b Source #(<$) :: a -> Handler b -> Handler a Source # Source # Since: 4.8.0.0 Instance detailsDefined in Data.Functor.Identity Methodsfmap :: (a -> b) -> Identity a -> Identity b Source #(<$) :: a -> Identity b -> Identity a Source # Source # Since: 2.1 Instance detailsDefined in Control.Applicative Methodsfmap :: (a -> b) -> ZipList a -> ZipList b Source #(<$) :: a -> ZipList b -> ZipList a Source # Source # Since: 4.6.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> ArgDescr a -> ArgDescr b Source #(<$) :: a -> ArgDescr b -> ArgDescr a Source # Source # Since: 4.6.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> OptDescr a -> OptDescr b Source #(<$) :: a -> OptDescr b -> OptDescr a Source # Source # Since: 4.6.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> ArgOrder a -> ArgOrder b Source #(<$) :: a -> ArgOrder b -> ArgOrder a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Option a -> Option b Source #(<$) :: a -> Option b -> Option a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Last a -> Last b Source #(<$) :: a -> Last b -> Last a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Max a -> Max b Source #(<$) :: a -> Max b -> Max a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Min a -> Min b Source #(<$) :: a -> Min b -> Min a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Data.Complex Methodsfmap :: (a -> b) -> Complex a -> Complex b Source #(<$) :: a -> Complex b -> Complex a Source # Source # Since: 3.0 Instance detailsDefined in Data.Either Methodsfmap :: (a0 -> b) -> Either a a0 -> Either a b Source #(<$) :: a0 -> Either a b -> Either a a0 Source # Functor (V1 :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> V1 a -> V1 b Source #(<$) :: a -> V1 b -> V1 a Source # Functor (U1 :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> U1 a -> U1 b Source #(<$) :: a -> U1 b -> U1 a Source # Functor ((,) a) Source # Since: 2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a0 -> b) -> (a, a0) -> (a, b) Source #(<$) :: a0 -> (a, b) -> (a, a0) Source # Functor (ST s) Source # Since: 2.1 Instance detailsDefined in GHC.ST Methodsfmap :: (a -> b) -> ST s a -> ST s b Source #(<$) :: a -> ST s b -> ST s a Source # Functor (Array i) Source # Since: 2.1 Instance detailsDefined in GHC.Arr Methodsfmap :: (a -> b) -> Array i a -> Array i b Source #(<$) :: a -> Array i b -> Array i a Source # Functor (Proxy :: Type -> Type) Source # Since: 4.7.0.0 Instance detailsDefined in Data.Proxy Methodsfmap :: (a -> b) -> Proxy a -> Proxy b Source #(<$) :: a -> Proxy b -> Proxy a Source # Arrow a => Functor (ArrowMonad a) Source # Since: 4.6.0.0 Instance detailsDefined in Control.Arrow Methodsfmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source #(<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # Monad m => Functor (WrappedMonad m) Source # Since: 2.1 Instance detailsDefined in Control.Applicative Methodsfmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source #(<$) :: a -> WrappedMonad m b -> WrappedMonad m a Source # Functor (ST s) Source # Since: 2.1 Instance detailsDefined in Control.Monad.ST.Lazy.Imp Methodsfmap :: (a -> b) -> ST s a -> ST s b Source #(<$) :: a -> ST s b -> ST s a Source # Functor (Arg a) Source # Since: 4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a0 -> b) -> Arg a a0 -> Arg a b Source #(<$) :: a0 -> Arg a b -> Arg a a0 Source # Functor f => Functor (Rec1 f) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> Rec1 f a -> Rec1 f b Source #(<$) :: a -> Rec1 f b -> Rec1 f a Source # Functor (URec Char :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Char a -> URec Char b Source #(<$) :: a -> URec Char b -> URec Char a Source # Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Double a -> URec Double b Source #(<$) :: a -> URec Double b -> URec Double a Source # Functor (URec Float :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Float a -> URec Float b Source #(<$) :: a -> URec Float b -> URec Float a Source # Functor (URec Int :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Int a -> URec Int b Source #(<$) :: a -> URec Int b -> URec Int a Source # Functor (URec Word :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec Word a -> URec Word b Source #(<$) :: a -> URec Word b -> URec Word a Source # Functor (URec (Ptr ()) :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> URec (Ptr ()) a -> URec (Ptr ()) b Source #(<$) :: a -> URec (Ptr ()) b -> URec (Ptr ()) a Source # Functor f => Functor (Alt f) Source # Since: 4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Alt f a -> Alt f b Source #(<$) :: a -> Alt f b -> Alt f a Source # Functor f => Functor (Ap f) Source # Since: 4.12.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> Ap f a -> Ap f b Source #(<$) :: a -> Ap f b -> Ap f a Source # Functor (Const m :: Type -> Type) Source # Since: 2.1 Instance detailsDefined in Data.Functor.Const Methodsfmap :: (a -> b) -> Const m a -> Const m b Source #(<$) :: a -> Const m b -> Const m a Source # Arrow a => Functor (WrappedArrow a b) Source # Since: 2.1 Instance detailsDefined in Control.Applicative Methodsfmap :: (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: 2.1 Instance detailsDefined in GHC.Base Methodsfmap :: (a -> b) -> (r -> a) -> r -> b Source #(<$) :: a -> (r -> b) -> r -> a Source # Functor (K1 i c :: Type -> Type) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> K1 i c a -> K1 i c b Source #(<$) :: a -> K1 i c b -> K1 i c a Source # (Functor f, Functor g) => Functor (f :+: g) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> (f :+: g) a -> (f :+: g) b Source #(<$) :: a -> (f :+: g) b -> (f :+: g) a Source # (Functor f, Functor g) => Functor (f :*: g) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> (f :*: g) a -> (f :*: g) b Source #(<$) :: a -> (f :*: g) b -> (f :*: g) a Source # (Functor f, Functor g) => Functor (Sum f g) Source # Since: 4.9.0.0 Instance detailsDefined in Data.Functor.Sum Methodsfmap :: (a -> b) -> Sum f g a -> Sum f g b Source #(<$) :: a -> Sum f g b -> Sum f g a Source # (Functor f, Functor g) => Functor (Product f g) Source # Since: 4.9.0.0 Instance detailsDefined in Data.Functor.Product Methodsfmap :: (a -> b) -> Product f g a -> Product f g b Source #(<$) :: a -> Product f g b -> Product f g a Source # Functor f => Functor (M1 i c f) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> M1 i c f a -> M1 i c f b Source #(<$) :: a -> M1 i c f b -> M1 i c f a Source # (Functor f, Functor g) => Functor (f :.: g) Source # Since: 4.9.0.0 Instance detailsDefined in GHC.Generics Methodsfmap :: (a -> b) -> (f :.: g) a -> (f :.: g) b Source #(<$) :: a -> (f :.: g) b -> (f :.: g) a Source # (Functor f, Functor g) => Functor (Compose f g) Source # Since: 4.9.0.0 Instance detailsDefined in Data.Functor.Compose Methodsfmap :: (a -> b) -> Compose f g a -> Compose f g b Source #(<$) :: a -> Compose f g b -> Compose f g a Source #

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:

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

The above laws imply:

• fmap f xs  =  xs >>= return . f
• (>>) = (*>)

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.

(>>) :: 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.

return :: a -> m a Source #

Inject a value into the monadic type.

#### Instances

Instances details

When a value is bound in do-notation, the pattern on the left hand side of <- might not match. In this case, this class provides a function to recover.

A Monad without a MonadFail instance may only be used in conjunction with pattern that always match, such as newtypes, tuples, data types with only a single data constructor, and irrefutable patterns (~pat).

Instances of MonadFail should satisfy the following law: fail s should be a left zero for >>=,

fail s >>= f  =  fail s


If your Monad is also MonadPlus, a popular definition is

fail _ = mzero


Since: 4.9.0.0

Methods

fail :: String -> m a Source #

#### Instances

Instances details
 Source # Since: 4.9.0.0 Instance detailsDefined in Control.Monad.Fail Methodsfail :: String -> [a] Source # Source # Since: 4.9.0.0 Instance detailsDefined in Control.Monad.Fail Methods Source # Since: 4.9.0.0 Instance detailsDefined in Control.Monad.Fail Methodsfail :: String -> IO a Source # Source # Since: 4.9.0.0 Instance detailsDefined in Text.ParserCombinators.ReadP Methods Source # Since: 4.9.0.0 Instance detailsDefined in Text.ParserCombinators.ReadPrec Methods MonadFail (ST s) Source # Since: 4.11.0.0 Instance detailsDefined in GHC.ST Methodsfail :: String -> ST s a Source # MonadFail (ST s) Source # Since: 4.10 Instance detailsDefined in Control.Monad.ST.Lazy.Imp Methodsfail :: String -> ST s a Source # MonadFail f => MonadFail (Ap f) Source # Since: 4.12.0.0 Instance detailsDefined in Data.Monoid Methodsfail :: String -> Ap f a Source #

Monads that also support choice and failure.

Minimal complete definition

Nothing

Methods

mzero :: m a Source #

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

Instances details

# Functions

## Naming conventions

The functions in this library use the following naming conventions:

• A postfix 'M' always stands for a function in the Kleisli category: The monad type constructor m is added to function results (modulo currying) and nowhere else. So, for example,
filter  ::              (a ->   Bool) -> [a] ->   [a]
filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
• A postfix '_' changes the result type from (m a) to (m ()). Thus, for example:
sequence  :: Monad m => [m a] -> m [a]
sequence_ :: Monad m => [m a] -> m ()
• A prefix 'm' generalizes an existing function to a monadic form. Thus, for example:
filter  ::                (a -> Bool) -> [a] -> [a]
mfilter :: MonadPlus m => (a -> Bool) -> m a -> m a

## Basic Monad functions

mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) Source #

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

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

Map each element of a structure to a monadic action, evaluate these actions from left to right, and ignore the results. For a version that doesn't ignore the results see mapM.

As of base 4.8.0.0, mapM_ is just traverse_, specialized to Monad.

forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b) Source #

forM is mapM with its arguments flipped. For a version that ignores the results see forM_.

forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m () Source #

forM_ is mapM_ with its arguments flipped. For a version that doesn't ignore the results see forM.

As of base 4.8.0.0, forM_ is just for_, specialized to Monad.

sequence :: (Traversable t, Monad m) => t (m a) -> m (t a) Source #

Evaluate each monadic action in the structure from left to right, and collect the results. For a version that ignores the results see sequence_.

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

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.

As of base 4.8.0.0, sequence_ is just sequenceA_, specialized to Monad.

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

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

(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c infixr 1 Source #

Left-to-right composition of Kleisli arrows.

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

Right-to-left composition of Kleisli arrows. (>=>), with the arguments flipped.

Note how this operator resembles function composition (.):

(.)   ::            (b ->   c) -> (a ->   b) -> a ->   c
(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c

forever :: Applicative f => f a -> f b Source #

Repeat an action indefinitely.

#### Examples

Expand

A common use of forever is to process input from network sockets, Handles, and channels (e.g. MVar and Chan).

For example, here is how we might implement an echo server, using forever both to listen for client connections on a network socket and to echo client input on client connection handles:

echoServer :: Socket -> IO ()
echoServer socket = forever $do client <- accept socket forkFinally (echo client) (\_ -> hClose client) where echo :: Handle -> IO () echo client = forever$
hGetLine client >>= hPutStrLn client


void :: Functor f => f a -> f () Source #

void value discards or ignores the result of evaluation, such as the return value of an IO action.

#### Examples

Expand

Replace the contents of a Maybe Int with unit:

>>> void Nothing
Nothing
>>> void (Just 3)
Just ()


Replace the contents of an Either Int Int with unit, resulting in an Either Int ():

>>> void (Left 8675309)
Left 8675309
>>> void (Right 8675309)
Right ()


Replace every element of a list with unit:

>>> void [1,2,3]
[(),(),()]


Replace the second element of a pair with unit:

>>> void (1,2)
(1,())


Discard the result of an IO action:

>>> mapM print [1,2]
1
2
[(),()]
>>> void $mapM print [1,2] 1 2  ## Generalisations of list functions 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. #### Examples Expand 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  to run an STM transaction and the IO action it returns. msum :: (Foldable t, MonadPlus m) => t (m a) -> m a Source # The sum of a collection of actions, generalizing concat. As of base 4.8.0.0, msum is just asum, specialized to MonadPlus. mfilter :: MonadPlus m => (a -> Bool) -> m a -> m a Source # Direct MonadPlus equivalent of filter. #### Examples Expand The filter function is just mfilter specialized to the list monad: filter = ( mfilter :: (a -> Bool) -> [a] -> [a] )  An example using mfilter with the Maybe monad: >>> mfilter odd (Just 1) Just 1 >>> mfilter odd (Just 2) Nothing  filterM :: Applicative m => (a -> m Bool) -> [a] -> m [a] Source # This generalizes the list-based filter function. mapAndUnzipM :: Applicative m => (a -> m (b, c)) -> [a] -> m ([b], [c]) Source # The mapAndUnzipM function maps its first argument over a list, returning the result as a pair of lists. This function is mainly used with complicated data structures or a state monad. zipWithM :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m [c] Source # The zipWithM function generalizes zipWith to arbitrary applicative functors. zipWithM_ :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m () Source # zipWithM_ is the extension of zipWithM which ignores the final result. foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b Source # The foldM function is analogous to foldl, except that its result is encapsulated in a monad. Note that foldM works from left-to-right over the list arguments. This could be an issue where (>>) and the folded function' are not commutative. foldM f a1 [x1, x2, ..., xm] == do a2 <- f a1 x1 a3 <- f a2 x2 ... f am xm If right-to-left evaluation is required, the input list should be reversed. Note: foldM is the same as foldlM foldM_ :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m () Source # Like foldM, but discards the result. replicateM :: Applicative m => Int -> m a -> m [a] Source # replicateM n act performs the action n times, gathering the results. replicateM_ :: Applicative m => Int -> m a -> m () Source # Like replicateM, but discards the result. ## Conditional execution of monadic expressions guard :: Alternative f => Bool -> f () Source # Conditional failure of Alternative computations. Defined by guard True = pure () guard False = empty  #### Examples Expand Common uses of guard include conditionally signaling an error in an error monad and conditionally rejecting the current choice in an Alternative-based parser. As an example of signaling an error in the error monad Maybe, consider a safe division function safeDiv x y that returns Nothing when the denominator y is zero and Just (x div y) otherwise. For example: >>> safeDiv 4 0 Nothing >>> safeDiv 4 2 Just 2  A definition of safeDiv using guards, but not guard: safeDiv :: Int -> Int -> Maybe Int safeDiv x y | y /= 0 = Just (x div y) | otherwise = Nothing  A definition of safeDiv using guard and Monad do-notation: safeDiv :: Int -> Int -> Maybe Int safeDiv x y = do guard (y /= 0) return (x div y)  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. unless :: Applicative f => Bool -> f () -> f () Source # The reverse of when. ## Monadic lifting operators liftM :: Monad m => (a1 -> r) -> m a1 -> m r Source # Promote a function to a monad. 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). ap :: Monad m => m (a -> b) -> m a -> m b Source # In many situations, the liftM operations can be replaced by uses of ap, which promotes function application. return f ap x1 ap ... ap xn is equivalent to liftMn f x1 x2 ... xn ## Strict monadic functions (<$!>) :: Monad m => (a -> b) -> m a -> m b infixl 4 Source #

Strict version of <\$>`.

Since: 4.8.0.0