Safe Haskell | None |
---|
Type classes mirroring standard typeclasses, but working with monomorphic containers.
The motivation is that some commonly used data types (i.e., ByteString
and
Text
) do not allow for instances of typeclasses like Functor
and
Foldable
, since they are monomorphic structures. This module allows both
monomorphic and polymorphic data types to be instances of the same
typeclasses.
All of the laws for the polymorphic typeclasses apply to their monomorphic
cousins. Thus, even though a MonoFunctor
instance for Set
could
theoretically be defined, it is omitted since it could violate the functor
law of omap f . omap g = omap (f . g)
.
Note that all typeclasses have been prefixed with Mono
, and functions have
been prefixed with o
. The mnemonic for o
is "only one," or alternatively
"it's mono, but m is overused in Haskell, so we'll use the second letter
instead." (Agreed, it's not a great mangling scheme, input is welcome!)
- type family Element mofu
- class MonoFunctor mofu where
- class MonoFoldable mofo where
- ofoldMap :: Monoid m => (Element mofo -> m) -> mofo -> m
- ofoldr :: (Element mofo -> b -> b) -> b -> mofo -> b
- ofoldl' :: (a -> Element mofo -> a) -> a -> mofo -> a
- otoList :: mofo -> [Element mofo]
- oall :: (Element mofo -> Bool) -> mofo -> Bool
- oany :: (Element mofo -> Bool) -> mofo -> Bool
- onull :: mofo -> Bool
- olength :: mofo -> Int
- olength64 :: mofo -> Int64
- ocompareLength :: Integral i => mofo -> i -> Ordering
- otraverse_ :: (MonoFoldable mofo, Applicative f) => (Element mofo -> f b) -> mofo -> f ()
- ofor_ :: (MonoFoldable mofo, Applicative f) => mofo -> (Element mofo -> f b) -> f ()
- omapM_ :: (MonoFoldable mofo, Monad m) => (Element mofo -> m b) -> mofo -> m ()
- oforM_ :: (MonoFoldable mofo, Monad m) => mofo -> (Element mofo -> m b) -> m ()
- ofoldlM :: (MonoFoldable mofo, Monad m) => (a -> Element mofo -> m a) -> a -> mofo -> m a
- osum :: (MonoFoldable mofo, Num (Element mofo)) => mofo -> Element mofo
- oproduct :: (MonoFoldable mofo, Num (Element mofo)) => mofo -> Element mofo
- class (MonoFoldable mofo, Monoid mofo) => MonoFoldableMonoid mofo where
- oconcatMap :: (Element mofo -> mofo) -> mofo -> mofo
- class (MonoFunctor mot, MonoFoldable mot) => MonoTraversable mot where
- ofor :: (MonoTraversable mot, Applicative f) => mot -> (Element mot -> f (Element mot)) -> f mot
- oforM :: (MonoTraversable mot, Monad f) => mot -> (Element mot -> f (Element mot)) -> f mot
Documentation
class MonoFunctor mofu whereSource
class MonoFoldable mofo whereSource
ofoldMap :: Monoid m => (Element mofo -> m) -> mofo -> mSource
ofoldr :: (Element mofo -> b -> b) -> b -> mofo -> bSource
ofoldl' :: (a -> Element mofo -> a) -> a -> mofo -> aSource
otoList :: mofo -> [Element mofo]Source
oall :: (Element mofo -> Bool) -> mofo -> BoolSource
oany :: (Element mofo -> Bool) -> mofo -> BoolSource
olength64 :: mofo -> Int64Source
ocompareLength :: Integral i => mofo -> i -> OrderingSource
otraverse_ :: (MonoFoldable mofo, Applicative f) => (Element mofo -> f b) -> mofo -> f ()Source
ofor_ :: (MonoFoldable mofo, Applicative f) => mofo -> (Element mofo -> f b) -> f ()Source
omapM_ :: (MonoFoldable mofo, Monad m) => (Element mofo -> m b) -> mofo -> m ()Source
oforM_ :: (MonoFoldable mofo, Monad m) => mofo -> (Element mofo -> m b) -> m ()Source
ofoldlM :: (MonoFoldable mofo, Monad m) => (a -> Element mofo -> m a) -> a -> mofo -> m aSource
MonoFoldable ByteString | |
MonoFoldable ByteString | |
MonoFoldable IntSet | |
MonoFoldable Text | |
MonoFoldable Text | |
MonoFoldable [a] | |
MonoFoldable (Maybe a) | |
MonoFoldable (Tree a) | |
MonoFoldable (Seq a) | |
MonoFoldable (ViewL a) | |
MonoFoldable (ViewR a) | |
MonoFoldable (IntMap a) | |
MonoFoldable (Set e) | |
MonoFoldable (Option a) | |
MonoFoldable (NonEmpty a) | |
MonoFoldable (Identity a) | |
MonoFoldable (HashSet e) | |
MonoFoldable (Vector a) | |
Unbox a => MonoFoldable (Vector a) | |
Storable a => MonoFoldable (Vector a) | |
MonoFoldable (Map k v) | |
MonoFoldable (HashMap k v) |
osum :: (MonoFoldable mofo, Num (Element mofo)) => mofo -> Element mofoSource
The sum
function computes the sum of the numbers of a structure.
oproduct :: (MonoFoldable mofo, Num (Element mofo)) => mofo -> Element mofoSource
The product
function computes the product of the numbers of a structure.
class (MonoFoldable mofo, Monoid mofo) => MonoFoldableMonoid mofo whereSource
oconcatMap :: (Element mofo -> mofo) -> mofo -> mofoSource
MonoFoldableMonoid ByteString | |
MonoFoldableMonoid ByteString | |
MonoFoldableMonoid Text | |
MonoFoldableMonoid Text | |
(MonoFoldable (t a), Monoid (t a)) => MonoFoldableMonoid (t a) |
class (MonoFunctor mot, MonoFoldable mot) => MonoTraversable mot whereSource
otraverse :: Applicative f => (Element mot -> f (Element mot)) -> mot -> f motSource
omapM :: Monad m => (Element mot -> m (Element mot)) -> mot -> m motSource
MonoTraversable ByteString | |
MonoTraversable ByteString | |
MonoTraversable Text | |
MonoTraversable Text | |
MonoTraversable [a] | |
MonoTraversable (Maybe a) | |
MonoTraversable (Tree a) | |
MonoTraversable (Seq a) | |
MonoTraversable (ViewL a) | |
MonoTraversable (ViewR a) | |
MonoTraversable (IntMap a) | |
MonoTraversable (Option a) | |
MonoTraversable (NonEmpty a) | |
MonoTraversable (Identity a) | |
MonoTraversable (Vector a) | |
Unbox a => MonoTraversable (Vector a) | |
Storable a => MonoTraversable (Vector a) | |
MonoTraversable (Map k v) | |
MonoTraversable (HashMap k v) |
ofor :: (MonoTraversable mot, Applicative f) => mot -> (Element mot -> f (Element mot)) -> f motSource