Copyright | KONISHI Yohuske 2015, Conor McBride and Ross Paterson 2005 |
---|---|
License | BSD-style (see the LICENSE file in the distribution) |
Maintainer | ocean0yohsuke@gmail.com |
Stability | experimental |
Portability | --- |
Safe Haskell | Safe |
Language | Haskell2010 |
This module is made of
, distilling most function names polluted with action kind of concepts into crystalized(static) ones.
Another reason I put this module is for the case if GHC would parse Traversable
((->) r)
as a data constructor someday.
- class Functor c => Commutative c where
- commute :: Applicative f => c (f a) -> f (c a)
- commuteMap :: (Applicative f, Commutative c) => (a -> f b) -> c a -> f (c b)
- commuteFor :: (Applicative f, Commutative c) => c a -> (a -> f b) -> f (c b)
- fmapDefault :: Commutative t => (a -> b) -> t a -> t b
- foldMapDefault :: (Commutative t, Monoid m) => (a -> m) -> t a -> m
The Commutative
class
class Functor c => Commutative c where Source
commute :: Applicative f => c (f a) -> f (c a) Source
This method is the same for
just except the name.
The only difference is the name "commute", that is to say from which no action kind of concepts smell.sequenceA
Commutative [] Source | |
Commutative Maybe Source | |
Commutative (Either a) Source | |
Commutative ((,) a) Source | |
Commutative (Const m) Source |
Utility functions
commuteMap :: (Applicative f, Commutative c) => (a -> f b) -> c a -> f (c b) Source
Do fmap f
then commute, the same for
.traverse
commuteFor :: (Applicative f, Commutative c) => c a -> (a -> f b) -> f (c b) Source
The auguments-flipped function for
, the same for commuteMap
.for
General definitions for superclass methods
fmapDefault :: Commutative t => (a -> b) -> t a -> t b Source
This function may be used as a value for fmap
in a Functor
instance, provided that commute
is defined. (Using
fmapDefault
with a Commutative
instance will result in infinite recursion.)
foldMapDefault :: (Commutative t, Monoid m) => (a -> m) -> t a -> m Source