| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Data.Functor
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 bJust "1" -- (Int -> String) -> Maybe Int -> Maybe String
>>>fmap show Nothing -- (a -> b) -> f a -> f bNothing -- (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 StringJust "1">>>show <$> (Just 1) -- (Int -> String) -> Maybe Int -> Maybe StringJust "1"
Documentation
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 [] # | 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 Methods fmap :: (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 Methods fmap :: (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 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) # | 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 ' can be understood as the
$> bdo expression
do as pure b
with an inferred Functor constraint.
Examples
Replace the contents of a with a constant
Maybe IntString:
>>>Nothing $> "foo"Nothing>>>Just 90210 $> "foo"Just "foo"
Replace the contents of an
with a constant Either Int IntString, 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 to a Maybe Int using Maybe
Stringshow:
>>>show <$> NothingNothing>>>show <$> Just 3Just "3"
Convert from an to an
Either Int IntEither IntString using show:
>>>show <$> Left 17Left 17>>>show <$> Right 17Right "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)
void :: Functor f => f a -> f () Source #
discards or ignores the result of evaluation, such
as the return value of an void valueIO action.
Using ApplicativeDo: '' can be understood as the
void asdo expression
do as pure ()
with an inferred Functor constraint.
Examples
Replace the contents of a with unit:Maybe Int
>>>void NothingNothing>>>void (Just 3)Just ()
Replace the contents of an
with unit, resulting in an Either Int Int: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