Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Synopsis
-
class
Functor
(f ::
Type
->
Type
)
where
- fmap :: (a -> b) -> f a -> f b
- ($>) :: Functor f => f a -> b -> f b
- (<$) :: Functor f => a -> f b -> f a
- (<$>) :: Functor f => (a -> b) -> f a -> f b
- (<<$>>) :: ( Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
- (<&>) :: Functor f => f a -> (a -> b) -> f b
- void :: Functor f => f a -> f ()
- foreach :: Functor f => f a -> (a -> b) -> f b
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:
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.
fmap :: (a -> b) -> f a -> f b Source #
Using
ApplicativeDo
: '
' can be understood as
the
fmap
f as
do
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 Async | |
Functor Concurrently | |
Defined in Control.Concurrent.Async fmap :: (a -> b) -> Concurrently a -> Concurrently b Source # (<$) :: a -> Concurrently b -> Concurrently a Source # |
|
Functor Complex |
Since: base-4.9.0.0 |
Functor Min |
Since: base-4.9.0.0 |
Functor Max |
Since: base-4.9.0.0 |
Functor First |
Since: base-4.9.0.0 |
Functor Last |
Since: base-4.9.0.0 |
Functor Option |
Since: base-4.9.0.0 |
Functor ZipList |
Since: base-2.1 |
Functor Identity |
Since: base-4.8.0.0 |
Functor Handler |
Since: base-4.6.0.0 |
Functor STM |
Since: base-4.3.0.0 |
Functor First |
Since: base-4.8.0.0 |
Functor Last |
Since: base-4.8.0.0 |
Functor Dual |
Since: base-4.8.0.0 |
Functor Sum |
Since: base-4.8.0.0 |
Functor Product |
Since: base-4.8.0.0 |
Functor Down |
Since: base-4.11.0.0 |
Functor ReadP |
Since: base-2.1 |
Functor NonEmpty |
Since: base-4.9.0.0 |
Functor IntMap | |
Functor Seq | |
Functor FingerTree | |
Defined in Data.Sequence.Internal fmap :: (a -> b) -> FingerTree a -> FingerTree b Source # (<$) :: a -> FingerTree b -> FingerTree a Source # |
|
Functor Digit | |
Functor Node | |
Functor Elem | |
Functor ViewL | |
Functor ViewR | |
Functor P |
Since: base-4.8.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 ( Arg a) |
Since: base-4.9.0.0 |
Monad m => Functor ( WrappedMonad m) |
Since: base-2.1 |
Defined in Control.Applicative fmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source # (<$) :: a -> WrappedMonad m b -> WrappedMonad m a Source # |
|
Arrow a => Functor ( ArrowMonad a) |
Since: base-4.6.0.0 |
Defined in Control.Arrow fmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source # (<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # |
|
Functor ( Proxy :: Type -> Type ) |
Since: base-4.7.0.0 |
Functor ( Map k) | |
Functor m => Functor ( ListT m) | |
Functor m => Functor ( MaybeT m) | |
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 |
Arrow a => Functor ( WrappedArrow a b) |
Since: base-2.1 |
Defined in Control.Applicative fmap :: (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 |
Functor ( Const m :: Type -> Type ) |
Since: base-2.1 |
Functor f => Functor ( Ap f) |
Since: base-4.12.0.0 |
Functor f => Functor ( Alt f) |
Since: base-4.8.0.0 |
( Applicative f, Monad f) => Functor ( WhenMissing f x) |
Since: containers-0.5.9 |
Defined in Data.IntMap.Internal fmap :: (a -> b) -> WhenMissing f x a -> WhenMissing f x b Source # (<$) :: a -> WhenMissing f x b -> WhenMissing f x a Source # |
|
Functor m => Functor ( IdentityT m) | |
Functor m => Functor ( ErrorT e m) | |
Functor m => Functor ( ExceptT e m) | |
Functor m => Functor ( ReaderT r m) | |
Functor m => Functor ( StateT s m) | |
Functor m => Functor ( StateT s m) | |
Functor m => Functor ( WriterT w m) | |
Functor m => Functor ( WriterT w m) | |
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 ( Product f g) |
Since: base-4.9.0.0 |
( Functor f, Functor g) => Functor ( Sum f g) |
Since: base-4.9.0.0 |
Functor f => Functor ( WhenMatched f x y) |
Since: containers-0.5.9 |
Defined in Data.IntMap.Internal fmap :: (a -> b) -> WhenMatched f x y a -> WhenMatched f x y b Source # (<$) :: a -> WhenMatched f x y b -> WhenMatched f x y a Source # |
|
( Applicative f, Monad f) => Functor ( WhenMissing f k x) |
Since: containers-0.5.9 |
Defined in Data.Map.Internal fmap :: (a -> b) -> WhenMissing f k x a -> WhenMissing f k x b Source # (<$) :: a -> WhenMissing f k x b -> WhenMissing f k x a Source # |
|
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 => Functor ( WhenMatched f k x y) |
Since: containers-0.5.9 |
Defined in Data.Map.Internal fmap :: (a -> b) -> WhenMatched f k x y a -> WhenMatched f k x y b Source # (<$) :: a -> WhenMatched f k x y b -> WhenMatched f k x y a Source # |
|
Functor m => Functor ( RWST r w s m) | |
Functor m => Functor ( RWST r w s m) | |
($>) :: Functor f => f a -> b -> f b infixl 4 Source #
Flipped version of
<$
.
Using
ApplicativeDo
: '
as
' can be understood as the
$>
b
do
expression
do as pure b
with an inferred
Functor
constraint.
Examples
Replace the contents of a
with a constant
Maybe
Int
String
:
>>>
Nothing $> "foo"
Nothing>>>
Just 90210 $> "foo"
Just "foo"
Replace the contents of an
with a constant
Either
Int
Int
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
to a
Maybe
Int
using
Maybe
String
show
:
>>>
show <$> Nothing
Nothing>>>
show <$> Just 3
Just "3"
Convert from an
to an
Either
Int
Int
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)
void :: Functor f => f a -> f () Source #
discards or ignores the result of evaluation, such
as the return value of an
void
value
IO
action.
Using
ApplicativeDo
: '
' can be understood as the
void
as
do
expression
do as pure ()
with an inferred
Functor
constraint.
Examples
Replace the contents of a
with unit:
Maybe
Int
>>>
void Nothing
Nothing>>>
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