Data.Functor
Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | [email protected] |
Stability | provisional |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Description
A type f
is a Functor if it provides a function fmap
which, given any types a
and b
, lets you apply any function of type (a -> b)
to turn an f a
into an f b
, preserving the structure of f
.
Examples
>>> fmap show (Just 1) -- (a -> b) -> f a -> f b Just "1" -- (Int -> String) -> Maybe Int -> Maybe String
>>> fmap show Nothing -- (a -> b) -> f a -> f b Nothing -- (Int -> String) -> Maybe Int -> Maybe String
>>> fmap show [1,2,3] -- (a -> b) -> f a -> f b ["1", "2", "3"] -- (Int -> String) -> [Int] -> [String]
>>> fmap show [] -- (a -> b) -> f a -> f b [] -- (Int -> String) -> [Int] -> [String]
The fmap
function is also available as the infix operator <$>
:
>>> fmap show (Just 1) -- (Int -> String) -> Maybe Int -> Maybe String Just "1" >>> show <$> (Just 1) -- (Int -> String) -> Maybe Int -> Maybe String Just "1"
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
: 'fmap f as
' can be understood as the do
expression
do a <- as pure (f a)
with an inferred Functor
constraint.
(<$) :: 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.
Using ApplicativeDo
: 'a <$ bs
' can be understood as the do
expression
do bs pure a
with an inferred Functor
constraint.
Instances
Functor [] | Since: base-2.1 |
Functor Maybe | Since: base-2.1 |
Functor IO | Since: base-2.1 |
Functor Par1 | Since: base-4.9.0.0 |
Functor NonEmpty | Since: base-4.9.0.0 |
Functor NoIO | Since: base-4.8.0.0 |
Functor ReadP | Since: base-2.1 |
Functor ReadPrec | Since: base-2.1 |
Functor Down | Since: base-4.11.0.0 |
Functor Product | Since: base-4.8.0.0 |
Functor Sum | Since: base-4.8.0.0 |
Functor Dual | Since: base-4.8.0.0 |
Functor Last | Since: base-4.8.0.0 |
Functor First | Since: base-4.8.0.0 |
Functor STM | Since: base-4.3.0.0 |
Functor Handler | Since: base-4.6.0.0 |
Functor Identity | Since: base-4.8.0.0 |
Functor ZipList | Since: base-2.1 |
Functor ArgDescr | Since: base-4.6.0.0 |
Functor OptDescr | Since: base-4.6.0.0 |
Functor ArgOrder | Since: base-4.6.0.0 |
Functor Option | Since: base-4.9.0.0 |
Functor Last | Since: base-4.9.0.0 |
Functor First | Since: base-4.9.0.0 |
Functor Max | Since: base-4.9.0.0 |
Functor Min | Since: base-4.9.0.0 |
Functor Complex | Since: base-4.9.0.0 |
Functor (Either a) | Since: base-3.0 |
Functor (V1 :: Type -> Type) | Since: base-4.9.0.0 |
Functor (U1 :: Type -> Type) | Since: base-4.9.0.0 |
Functor ((,) a) | Since: base-2.1 |
Functor (ST s) | Since: base-2.1 |
Functor (Array i) | Since: base-2.1 |
Functor (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Arrow a => Functor (ArrowMonad a) | Since: base-4.6.0.0 |
Defined 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) | Since: base-2.1 |
Defined in Control.Applicative Methodsfmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source (<$) :: a -> WrappedMonad m b -> WrappedMonad m a Source | |
Functor (ST s) | Since: base-2.1 |
Functor (Arg a) | Since: base-4.9.0.0 |
Functor f => Functor (Rec1 f) | Since: base-4.9.0.0 |
Functor (URec Char :: Type -> Type) | Since: base-4.9.0.0 |
Functor (URec Double :: Type -> Type) | Since: base-4.9.0.0 |
Functor (URec Float :: Type -> Type) | Since: base-4.9.0.0 |
Functor (URec Int :: Type -> Type) | Since: base-4.9.0.0 |
Functor (URec Word :: Type -> Type) | Since: base-4.9.0.0 |
Functor (URec (Ptr ()) :: Type -> Type) | Since: base-4.9.0.0 |
Functor ((,,) a b) | Since: base-4.14.0.0 |
Functor f => Functor (Alt f) | Since: base-4.8.0.0 |
Functor f => Functor (Ap f) | Since: base-4.12.0.0 |
Functor (Const m :: Type -> Type) | Since: base-2.1 |
Functor m => Functor (Kleisli m a) | Since: base-4.14.0.0 |
Arrow a => Functor (WrappedArrow a b) | Since: base-2.1 |
Defined 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) | Since: base-2.1 |
Functor (K1 i c :: Type -> Type) | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :+: g) | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :*: g) | Since: base-4.9.0.0 |
Functor ((,,,) a b c) | Since: base-4.14.0.0 |
(Functor f, Functor g) => Functor (Sum f g) | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (Product f g) | Since: base-4.9.0.0 |
Functor f => Functor (M1 i c f) | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (f :.: g) | Since: base-4.9.0.0 |
(Functor f, Functor g) => Functor (Compose f g) | Since: base-4.9.0.0 |
($>) :: Functor f => f a -> b -> f b infixl 4 Source
Flipped version of <$
.
Using ApplicativeDo
: 'as $> b
' can be understood as the do
expression
do as pure b
with an inferred Functor
constraint.
Examples
Replace the contents of a Maybe Int
with a constant String
:
>>> Nothing $> "foo" Nothing >>> Just 90210 $> "foo" Just "foo"
Replace the contents of an Either Int Int
with a constant String
, resulting in an Either
Int String
:
>>> Left 8675309 $> "foo" Left 8675309 >>> Right 8675309 $> "foo" Right "foo"
Replace each element of a list with a constant String
:
>>> [1,2,3] $> "foo" ["foo","foo","foo"]
Replace the second element of a pair with a constant String
:
>>> (1,2) $> "foo" (1,"foo")
Since: base-4.7.0.0
(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 Source
An infix synonym for fmap
.
The name of this operator is an allusion to $
. Note the similarities between their types:
($) :: (a -> b) -> a -> b (<$>) :: Functor f => (a -> b) -> f a -> f b
Whereas $
is function application, <$>
is function application lifted over a Functor
.
Examples
Convert from a Maybe Int
to a Maybe
String
using show
:
>>> show <$> Nothing Nothing >>> show <$> Just 3 Just "3"
Convert from an Either Int Int
to an Either Int
String
using show
:
>>> show <$> Left 17 Left 17 >>> show <$> Right 17 Right "17"
Double each element of a list:
>>> (*2) <$> [1,2,3] [2,4,6]
Apply even
to the second element of a pair:
>>> even <$> (2,2) (2,True)
(<&>) :: Functor f => f a -> (a -> b) -> f b infixl 1 Source
Flipped version of <$>
.
(<&>) = flip fmap
Examples
Apply (+1)
to a list, a Just
and a Right
:
>>> Just 2 <&> (+1) Just 3
>>> [1,2,3] <&> (+1) [2,3,4]
>>> Right 3 <&> (+1) Right 4
Since: base-4.11.0.0
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.
Using ApplicativeDo
: 'void as
' can be understood as the do
expression
do as pure ()
with an inferred Functor
constraint.
Examples
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
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Functor.html