Functor module:Data -is:module

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. See https://www.schoolofhaskell.com/user/edwardk/snippets/fmap or https://github.com/quchen/articles/blob/master/second_functor_law.md for an explanation.
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.
An invariant version of Functor, equivalent to Invariant.
Linear Data Functors should be thought of as containers holding values of type a over which you are able to apply a linear function of type a %1-> b on each value of type a in the functor and consume a given functor of type f a.
An adapter newtype, suitable for DerivingVia. Its Eq1, Ord1, Read1, and Show1 instances leverage Generic1-based defaults.
A Functor with an additional index. Instances must satisfy a modified form of the Functor laws:
imap f . imap g ≡ imap (\i -> f i . g i)
imap (\_ a -> a) ≡ id
Barbie-types that can be mapped over. Instances of FunctorB should satisfy the following laws:
bmap id = id
bmap f . bmap g = bmap (f . g)
There is a default bmap implementation for Generic types, so instances can derived automatically.
Functor from indexed-types to indexed-types. Instances of FunctorT should satisfy the following laws:
tmap id = id
tmap f . tmap g = tmap (f . g)
There is a default tmap implementation for Generic types, so instances can derived automatically.
Formally, the class Profunctor represents a profunctor from Hask -> Hask. Intuitively it is a bifunctor where the first argument is contravariant and the second argument is covariant. You can define a Profunctor by either defining dimap or by defining both lmap and rmap. If you supply dimap, you should ensure that:
dimap id idid
If you supply lmap and rmap, ensure:
lmap idid
rmap idid
If you supply both, you should also ensure:
dimap f g ≡ lmap f . rmap g
These ensure by parametricity:
dimap (f . g) (h . i) ≡ dimap g h . dimap f i
lmap (f . g) ≡ lmap g . lmap f
rmap (f . g) ≡ rmap f . rmap g
Laws:
unit . counitid
counit . unitid
ProfunctorFunctor has a polymorphic kind since 5.6.
Generates a Bifunctor instance declaration for the given data type or data family instance.
Like deriveBifunctor, but takes an Options argument.
Make a Functor over the second argument of a Bifunctor.
A bifunctor is a type constructor that takes two type arguments and is a functor in both arguments. That is, unlike with Functor, a type constructor such as Either does not need to be partially applied for a Bifunctor instance, and the methods in this class permit mapping functions over the Left value or the Right value, or both at the same time. Formally, the class Bifunctor represents a bifunctor from Hask -> Hask. Intuitively it is a bifunctor where both the first and second arguments are covariant. You can define a Bifunctor by either defining bimap or by defining both first and second. If you supply bimap, you should ensure that:
bimap id idid
If you supply first and second, ensure:
first idid
second idid
If you supply both, you should also ensure:
bimap f g ≡ first f . second g
These ensure by parametricity:
bimap  (f . g) (h . i) ≡ bimap f h . bimap g i
first  (f . g) ≡ first  f . first  g
second (f . g) ≡ second f . second g