Safe Haskell | None |
---|---|
Language | Haskell2010 |
Utilities for functors.
Synopsis
- (<.>) :: Functor m => (b -> c) -> (a -> m b) -> a -> m c
- for :: Functor m => m a -> (a -> b) -> m b
- class Functor t => Decoration t where
- traverseF :: Functor m => (a -> m b) -> t a -> m (t b)
- distributeF :: Functor m => t (m a) -> m (t a)
- dmap :: Decoration t => (a -> b) -> t a -> t b
- dget :: Decoration t => t a -> a
- (<$>) :: Functor f => (a -> b) -> f a -> f b
- ($>) :: Functor f => f a -> b -> f b
- (<&>) :: Functor m => m a -> (a -> b) -> m b
Documentation
(<.>) :: Functor m => (b -> c) -> (a -> m b) -> a -> m c infixr 9 Source #
Composition: pure function after functorial (monadic) function.
for :: Functor m => m a -> (a -> b) -> m b Source #
The true pure for
loop.
for
is a misnomer, it should be forA
.
class Functor t => Decoration t where Source #
A decoration is a functor that is traversable into any functor.
The Functor
superclass is given because of the limitations
of the Haskell class system.
traverseF
actually implies functoriality.
Minimal complete definition: traverseF
or distributeF
.
Nothing
traverseF :: Functor m => (a -> m b) -> t a -> m (t b) Source #
traverseF
is the defining property.
distributeF :: Functor m => t (m a) -> m (t a) Source #
Decorations commute into any functor.
Instances
Decoration Identity Source # | The identity functor is a decoration. |
Decoration Ranged Source # | |
Decoration Arg Source # | |
Decoration WithOrigin Source # | |
Defined in Agda.Syntax.Common traverseF :: Functor m => (a -> m b) -> WithOrigin a -> m (WithOrigin b) Source # distributeF :: Functor m => WithOrigin (m a) -> m (WithOrigin a) Source # | |
Decoration WithHiding Source # | |
Defined in Agda.Syntax.Common traverseF :: Functor m => (a -> m b) -> WithHiding a -> m (WithHiding b) Source # distributeF :: Functor m => WithHiding (m a) -> m (WithHiding a) Source # | |
Decoration Abs Source # | |
Decoration Open Source # | |
Decoration Masked Source # | |
Decoration ((,) a) Source # | A typical decoration is pairing with some stuff. |
Defined in Agda.Utils.Functor | |
Decoration (Named name) Source # | |
Decoration (Blocked' t) Source # | |
Decoration (Type'' t) Source # | |
Decoration (Dom' t) Source # | |
(Decoration d, Decoration t) => Decoration (Compose d t) Source # | Decorations compose. (Thus, they form a category.) |
dmap :: Decoration t => (a -> b) -> t a -> t b Source #
Any decoration is traversable with traverse = traverseF
.
Just like any Traversable
is a functor, so is
any decoration, given by just traverseF
, a functor.
dget :: Decoration t => t a -> a Source #
Any decoration is a lens. set
is a special case of dmap
.
(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 #
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)
($>) :: Functor f => f a -> b -> f b infixl 4 #
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
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