base-4.20.0.0: Core data structures and operations

Description

Deprecated: This module now contains no instances and will be removed in the future

This module is DEPRECATED and will be removed in the future!

Functor and Monad instances for (->) r and Functor instances for (,) a and Either a.

Synopsis

# Documentation

class Functor (f :: Type -> Type) 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. See these articles by School of Haskell or David Luposchainsky for an explanation.

Minimal complete definition

fmap

Methods

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

fmap is used to apply a function of type (a -> b) to a value of type f a, where f is a functor, to produce a value of type f b. Note that for any type constructor with more than one parameter (e.g., Either), only the last type parameter can be modified with fmap (e.g., b in Either a b).

Some type constructors with two parameters or more have a Bifunctor instance that allows both the last and the penultimate parameters to be mapped over.

#### Examples

Expand

Convert from a Maybe Int to a Maybe String using show:

>>> fmap show Nothing
Nothing
>>> fmap show (Just 3)
Just "3"


Convert from an Either Int Int to an Either Int String using show:

>>> fmap show (Left 17)
Left 17
>>> fmap show (Right 17)
Right "17"


Double each element of a list:

>>> fmap (*2) [1,2,3]
[2,4,6]


Apply even to the second element of a pair:

>>> fmap even (2,2)
(2,True)


It may seem surprising that the function is only applied to the last element of the tuple compared to the list example above which applies it to every element in the list. To understand, remember that tuples are type constructors with multiple type parameters: a tuple of 3 elements (a,b,c) can also be written (,,) a b c and its Functor instance is defined for Functor ((,,) a b) (i.e., only the third parameter is free to be mapped over with fmap).

It explains why fmap can be used with tuples containing values of different types as in the following example:

>>> fmap even ("hello", 1.0, 4)
("hello",1.0,True)


(<$) :: a -> f b -> f a infixl 4 Source # Replace all locations in the input with the same value. The default definition is fmap . const, but this may be overridden with a more efficient version. #### Examples Expand Perform a computation with Maybe and replace the result with a constant value if it is Just: >>> 'a' <$ Just 2
Just 'a'
>>> 'a' <$Nothing Nothing  #### Instances Instances details  Source # Since: base-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: base-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: base-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: base-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: base-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: base-4.7.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> ArgDescr a -> ArgDescr b Source #(<$) :: a -> ArgDescr b -> ArgDescr a Source # Source # Since: base-4.7.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> ArgOrder a -> ArgOrder b Source #(<$) :: a -> ArgOrder b -> ArgOrder a Source # Source # Since: base-4.7.0.0 Instance detailsDefined in System.Console.GetOpt Methodsfmap :: (a -> b) -> OptDescr a -> OptDescr b Source #(<$) :: a -> OptDescr b -> OptDescr a Source # @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a -> b) -> NonEmpty a -> NonEmpty b Source #(<$) :: a -> NonEmpty b -> NonEmpty a Source # @since base-4.3.0.0 Instance detailsDefined in GHC.Internal.Conc.Sync Methodsfmap :: (a -> b) -> STM a -> STM b Source #(<$) :: a -> STM b -> STM a Source # @since base-4.6.0.0 Instance detailsDefined in GHC.Internal.Control.Exception Methodsfmap :: (a -> b) -> Handler a -> Handler b Source #(<$) :: a -> Handler b -> Handler a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Functor.Identity Methodsfmap :: (a -> b) -> Identity a -> Identity b Source #(<$) :: a -> Identity b -> Identity a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Monoid Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Monoid Methodsfmap :: (a -> b) -> Last a -> Last b Source #(<$) :: a -> Last b -> Last a Source # @since base-4.11.0.0 Instance detailsDefined in GHC.Internal.Data.Ord Methodsfmap :: (a -> b) -> Down a -> Down b Source #(<$) :: a -> Down b -> Down a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Dual a -> Dual b Source #(<$) :: a -> Dual b -> Dual a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Product a -> Product b Source #(<$) :: a -> Product b -> Product a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Sum a -> Sum b Source #(<$) :: a -> Sum b -> Sum a Source # @since base-2.01 Instance detailsDefined in GHC.Internal.Functor.ZipList Methodsfmap :: (a -> b) -> ZipList a -> ZipList b Source #(<$) :: a -> ZipList b -> ZipList a Source # @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.GHCi Methodsfmap :: (a -> b) -> NoIO a -> NoIO b Source #(<$) :: a -> NoIO b -> NoIO a Source # @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> Par1 a -> Par1 b Source #(<$) :: a -> Par1 b -> Par1 a Source # @since base-4.8.0.0 Instance details Methodsfmap :: (a -> b) -> P a -> P b Source #(<$) :: a -> P b -> P a Source # @since base-2.01 Instance details Methodsfmap :: (a -> b) -> ReadP a -> ReadP b Source #(<$) :: a -> ReadP b -> ReadP a Source # @since base-2.01 Instance details Methodsfmap :: (a -> b) -> ReadPrec a -> ReadPrec b Source #(<$) :: a -> ReadPrec b -> ReadPrec a Source # @since base-2.01 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a -> b) -> IO a -> IO b Source #(<$) :: a -> IO b -> IO a Source # @since base-2.01 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a -> b) -> Maybe a -> Maybe b Source #(<$) :: a -> Maybe b -> Maybe a Source # @since base-4.15 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a -> b) -> Solo a -> Solo b Source #(<$) :: a -> Solo b -> Solo a Source # @since base-2.01 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a -> b) -> [a] -> [b] Source #(<$) :: a -> [b] -> [a] Source # Monad m => Functor (WrappedMonad m) Source # Since: base-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 (Arg a) Source # Since: base-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 (Array i) @since base-2.01 Instance detailsDefined in GHC.Internal.Arr Methodsfmap :: (a -> b) -> Array i a -> Array i b Source #(<$) :: a -> Array i b -> Array i a Source # Arrow a => Functor (ArrowMonad a) @since base-4.6.0.0 Instance detailsDefined in GHC.Internal.Control.Arrow Methodsfmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source #(<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # Functor (ST s) @since base-2.01 Instance detailsDefined in GHC.Internal.Control.Monad.ST.Lazy.Imp Methodsfmap :: (a -> b) -> ST s a -> ST s b Source #(<$) :: a -> ST s b -> ST s a Source # @since base-3.0 Instance detailsDefined in GHC.Internal.Data.Either Methodsfmap :: (a0 -> b) -> Either a a0 -> Either a b Source #(<$) :: a0 -> Either a b -> Either a a0 Source # @since base-4.0 Instance detailsDefined in GHC.Internal.Data.Functor.Utils Methodsfmap :: (a -> b) -> StateL s a -> StateL s b Source #(<$) :: a -> StateL s b -> StateL s a Source # @since base-4.0 Instance detailsDefined in GHC.Internal.Data.Functor.Utils Methodsfmap :: (a -> b) -> StateR s a -> StateR s b Source #(<$) :: a -> StateR s b -> StateR s a Source # Functor (Proxy :: Type -> Type) @since base-4.7.0.0 Instance detailsDefined in GHC.Internal.Data.Proxy Methodsfmap :: (a -> b) -> Proxy a -> Proxy b Source #(<$) :: a -> Proxy b -> Proxy a Source # Functor (U1 :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> U1 a -> U1 b Source #(<$) :: a -> U1 b -> U1 a Source # Functor (V1 :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> V1 a -> V1 b Source #(<$) :: a -> V1 b -> V1 a Source # Functor (ST s) @since base-2.01 Instance detailsDefined in GHC.Internal.ST Methodsfmap :: (a -> b) -> ST s a -> ST s b Source #(<$) :: a -> ST s b -> ST s a Source # Functor ((,) a) @since base-2.01 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a0 -> b) -> (a, a0) -> (a, b) Source #(<$) :: a0 -> (a, b) -> (a, a0) Source # Arrow a => Functor (WrappedArrow a b) Source # Since: base-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 m => Functor (Kleisli m a) @since base-4.14.0.0 Instance detailsDefined in GHC.Internal.Control.Arrow Methodsfmap :: (a0 -> b) -> Kleisli m a a0 -> Kleisli m a b Source #(<$) :: a0 -> Kleisli m a b -> Kleisli m a a0 Source # Functor (Const m :: Type -> Type) @since base-2.01 Instance detailsDefined in GHC.Internal.Data.Functor.Const Methodsfmap :: (a -> b) -> Const m a -> Const m b Source #(<$) :: a -> Const m b -> Const m a Source # Monad m => Functor (StateT s m) @since base-4.18.0.0 Instance detailsDefined in GHC.Internal.Data.Functor.Utils Methodsfmap :: (a -> b) -> StateT s m a -> StateT s m b Source #(<$) :: a -> StateT s m b -> StateT s m a Source # Functor f => Functor (Ap f) @since base-4.12.0.0 Instance detailsDefined in GHC.Internal.Data.Monoid Methodsfmap :: (a -> b) -> Ap f a -> Ap f b Source #(<$) :: a -> Ap f b -> Ap f a Source # Functor f => Functor (Alt f) @since base-4.8.0.0 Instance detailsDefined in GHC.Internal.Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Alt f a -> Alt f b Source #(<$) :: a -> Alt f b -> Alt f a Source # (Generic1 f, Functor (Rep1 f)) => Functor (Generically1 f) @since base-4.17.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> Generically1 f a -> Generically1 f b Source #(<$) :: a -> Generically1 f b -> Generically1 f a Source # Functor f => Functor (Rec1 f) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> Rec1 f a -> Rec1 f b Source #(<$) :: a -> Rec1 f b -> Rec1 f a Source # Functor (URec (Ptr ()) :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> URec (Ptr ()) a -> URec (Ptr ()) b Source #(<$) :: a -> URec (Ptr ()) b -> URec (Ptr ()) a Source # Functor (URec Char :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> URec Char a -> URec Char b Source #(<$) :: a -> URec Char b -> URec Char a Source # @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> URec Double a -> URec Double b Source #(<$) :: a -> URec Double b -> URec Double a Source # Functor (URec Float :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> URec Float a -> URec Float b Source #(<$) :: a -> URec Float b -> URec Float a Source # Functor (URec Int :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> URec Int a -> URec Int b Source #(<$) :: a -> URec Int b -> URec Int a Source # Functor (URec Word :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> URec Word a -> URec Word b Source #(<$) :: a -> URec Word b -> URec Word a Source # Functor ((,,) a b) @since base-4.14.0.0 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a0 -> b0) -> (a, b, a0) -> (a, b, b0) Source #(<$) :: a0 -> (a, b, b0) -> (a, b, a0) Source # (Functor f, Functor g) => Functor (Product f g) Source # Since: base-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 g) => Functor (Sum f g) Source # Since: base-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 (f :*: g) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.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) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> (f :+: g) a -> (f :+: g) b Source #(<$) :: a -> (f :+: g) b -> (f :+: g) a Source # Functor (K1 i c :: Type -> Type) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> K1 i c a -> K1 i c b Source #(<$) :: a -> K1 i c b -> K1 i c a Source # Functor ((,,,) a b c) @since base-4.14.0.0 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Source #(<$) :: a0 -> (a, b, c, b0) -> (a, b, c, a0) Source # Functor ((->) r) @since base-2.01 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a -> b) -> (r -> a) -> r -> b Source #(<$) :: a -> (r -> b) -> r -> a Source # (Functor f, Functor g) => Functor (Compose f g) Source # Since: base-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 # (Functor f, Functor g) => Functor (f :.: g) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.Generics Methodsfmap :: (a -> b) -> (f :.: g) a -> (f :.: g) b Source #(<$) :: a -> (f :.: g) b -> (f :.: g) a Source # Functor f => Functor (M1 i c f) @since base-4.9.0.0 Instance detailsDefined in GHC.Internal.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 ((,,,,) a b c d) @since base-4.18.0.0 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, d, a0) -> (a, b, c, d, b0) Source #(<$) :: a0 -> (a, b, c, d, b0) -> (a, b, c, d, a0) Source # Functor ((,,,,,) a b c d e) @since base-4.18.0.0 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, d, e, a0) -> (a, b, c, d, e, b0) Source #(<$) :: a0 -> (a, b, c, d, e, b0) -> (a, b, c, d, e, a0) Source # Functor ((,,,,,,) a b c d e f) @since base-4.18.0.0 Instance detailsDefined in GHC.Internal.Base Methodsfmap :: (a0 -> b0) -> (a, b, c, d, e, f, a0) -> (a, b, c, d, e, f, b0) Source #(<$) :: a0 -> (a, b, c, d, e, f, b0) -> (a, b, c, d, e, f, a0) Source #

class Applicative m => Monad (m :: Type -> Type) 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
• m1 <*> m2 = m1 >>= (\x1 -> m2 >>= (\x2 -> return (x1 x2)))

The above laws imply:

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

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

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

Minimal complete definition

(>>=)

Methods

(>>=) :: 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 >>= bs' can be understood as the do expression

do a <- as
bs a


An alternative name for this function is 'bind', but some people may refer to it as 'flatMap', which results from it being equivialent to

\x f -> join (fmap f x) :: Monad m => m a -> (a -> m b) -> m b

which can be seen as mapping a value with Monad m => m a -> m (m b) and then 'flattening' m (m b) to m b using join.

(>>) :: 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 >> bs' can be understood as the do expression

do as
bs


or in terms of (>>=) as

as >>= const bs

return :: a -> m a Source #

Inject a value into the monadic type. This function should not be different from its default implementation as pure. The justification for the existence of this function is merely historic.

#### Instances

Instances details