| Copyright | (C) 2011-2015 Edward Kmett |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Safe-Inferred |
| Language | Haskell98 |
Data.Bifunctor.Apply
Contents
Description
- class Bifunctor p where
- class Bifunctor p => Biapply p where
- (<<$>>) :: (a -> b) -> a -> b
- (<<..>>) :: Biapply p => p a c -> p (a -> b) (c -> d) -> p b d
- bilift2 :: Biapply w => (a -> b -> c) -> (d -> e -> f) -> w a d -> w b e -> w c f
- bilift3 :: Biapply w => (a -> b -> c -> d) -> (e -> f -> g -> h) -> w a e -> w b f -> w c g -> w d h
Biappliable bifunctors
class Bifunctor p where
Minimal definition either bimap or first and second
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:
bimapidid≡id
If you supply first and second, ensure:
firstid≡idsecondid≡id
If you supply both, you should also ensure:
bimapf g ≡firstf.secondg
These ensure by parametricity:
bimap(f.g) (h.i) ≡bimapf h.bimapg ifirst(f.g) ≡firstf.firstgsecond(f.g) ≡secondf.secondg
Methods
bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
first :: (a -> b) -> p a c -> p b c
second :: (b -> c) -> p a b -> p a c
Instances
| Bifunctor Either | |
| Bifunctor (,) | |
| Bifunctor Const | |
| Bifunctor Arg | |
| Bifunctor ((,,) x) | |
| Bifunctor p => Bifunctor (WrappedBifunctor p) | |
| Functor g => Bifunctor (Joker g) | |
| Bifunctor p => Bifunctor (Flip p) | |
| Functor f => Bifunctor (Clown f) | |
| Bifunctor (Tagged *) | |
| Bifunctor ((,,,) x y) | |
| (Functor f, Bifunctor p) => Bifunctor (Tannen f p) | |
| (Bifunctor f, Bifunctor g) => Bifunctor (Product f g) | |
| Bifunctor ((,,,,) x y z) | |
| (Bifunctor p, Functor f, Functor g) => Bifunctor (Biff p f g) | |
| Bifunctor ((,,,,,) x y z w) | |
| Bifunctor ((,,,,,,) x y z w v) |
class Bifunctor p => Biapply p where Source
Minimal complete definition
Methods
(<<.>>) :: p (a -> b) (c -> d) -> p a c -> p b d infixl 4 Source
Instances
| Biapply (,) | |
| Biapply Const | |
| Biapply Arg | |
| Semigroup x => Biapply ((,,) x) | |
| Biapply p => Biapply (WrappedBifunctor p) | |
| Apply g => Biapply (Joker g) | |
| Biapply p => Biapply (Flip p) | |
| Apply f => Biapply (Clown f) | |
| Biapply (Tagged *) | |
| (Semigroup x, Semigroup y) => Biapply ((,,,) x y) | |
| (Apply f, Biapply p) => Biapply (Tannen f p) | |
| (Biapply p, Biapply q) => Biapply (Product p q) | |
| (Semigroup x, Semigroup y, Semigroup z) => Biapply ((,,,,) x y z) | |
| (Biapply p, Apply f, Apply g) => Biapply (Biff p f g) |
(<<$>>) :: (a -> b) -> a -> b infixl 4