Safe Haskell | None |
---|---|
Language | Haskell2010 |
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 mono
- class MonoFunctor mono where
- class MonoFoldable mono where
- ofoldMap :: Monoid m => (Element mono -> m) -> mono -> m
- ofoldr :: (Element mono -> b -> b) -> b -> mono -> b
- ofoldl' :: (a -> Element mono -> a) -> a -> mono -> a
- otoList :: mono -> [Element mono]
- oall :: (Element mono -> Bool) -> mono -> Bool
- oany :: (Element mono -> Bool) -> mono -> Bool
- onull :: mono -> Bool
- olength :: mono -> Int
- olength64 :: mono -> Int64
- ocompareLength :: Integral i => mono -> i -> Ordering
- otraverse_ :: (MonoFoldable mono, Applicative f) => (Element mono -> f b) -> mono -> f ()
- ofor_ :: (MonoFoldable mono, Applicative f) => mono -> (Element mono -> f b) -> f ()
- omapM_ :: (MonoFoldable mono, Monad m) => (Element mono -> m ()) -> mono -> m ()
- oforM_ :: (MonoFoldable mono, Monad m) => mono -> (Element mono -> m ()) -> m ()
- ofoldlM :: (MonoFoldable mono, Monad m) => (a -> Element mono -> m a) -> a -> mono -> m a
- ofoldMap1Ex :: Semigroup m => (Element mono -> m) -> mono -> m
- ofoldr1Ex :: (Element mono -> Element mono -> Element mono) -> mono -> Element mono
- ofoldl1Ex' :: (Element mono -> Element mono -> Element mono) -> mono -> Element mono
- headEx :: mono -> Element mono
- lastEx :: mono -> Element mono
- unsafeHead :: mono -> Element mono
- unsafeLast :: mono -> Element mono
- maximumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono
- minimumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono
- headMay :: MonoFoldable mono => mono -> Maybe (Element mono)
- lastMay :: MonoFoldable mono => mono -> Maybe (Element mono)
- osum :: (MonoFoldable mono, Num (Element mono)) => mono -> Element mono
- oproduct :: (MonoFoldable mono, Num (Element mono)) => mono -> Element mono
- oand :: (Element mono ~ Bool, MonoFoldable mono) => mono -> Bool
- oor :: (Element mono ~ Bool, MonoFoldable mono) => mono -> Bool
- class (MonoFoldable mono, Monoid mono) => MonoFoldableMonoid mono where
- oconcatMap :: (Element mono -> mono) -> mono -> mono
- class (MonoFoldable mono, Eq (Element mono)) => MonoFoldableEq mono where
- class (MonoFoldable mono, Ord (Element mono)) => MonoFoldableOrd mono where
- maximumMay :: MonoFoldableOrd mono => mono -> Maybe (Element mono)
- maximumByMay :: MonoFoldable mono => (Element mono -> Element mono -> Ordering) -> mono -> Maybe (Element mono)
- minimumMay :: MonoFoldableOrd mono => mono -> Maybe (Element mono)
- minimumByMay :: MonoFoldable mono => (Element mono -> Element mono -> Ordering) -> mono -> Maybe (Element mono)
- class (MonoFunctor mono, MonoFoldable mono) => MonoTraversable mono where
- ofor :: (MonoTraversable mono, Applicative f) => mono -> (Element mono -> f (Element mono)) -> f mono
- oforM :: (MonoTraversable mono, Monad f) => mono -> (Element mono -> f (Element mono)) -> f mono
- ofoldlUnwrap :: MonoFoldable mono => (x -> Element mono -> x) -> x -> (x -> b) -> mono -> b
- ofoldMUnwrap :: (Monad m, MonoFoldable mono) => (x -> Element mono -> m x) -> m x -> (x -> m b) -> mono -> m b
- class MonoPointed mono where
Documentation
type family Element mono Source
Type family for getting the type of the elements of a monomorphic container.
type Element ByteString = Word8 | |
type Element ByteString = Word8 | |
type Element IntSet = Int | |
type Element Text = Char | |
type Element Text = Char | |
type Element [a] = a | |
type Element (IO a) = a | |
type Element (ZipList a) = a | |
type Element (Maybe a) = a | |
type Element (IntMap a) = a | |
type Element (Set e) = e | |
type Element (Tree a) = a | |
type Element (Seq a) = a | |
type Element (ViewL a) = a | |
type Element (ViewR a) = a | |
type Element (Identity a) = a | |
type Element (Vector a) = a | |
type Element (NonEmpty a) = a | |
type Element (Vector a) = a | |
type Element (HashSet e) = e | |
type Element (Vector a) = a | |
type Element (Option a) = a | |
type Element (DList a) = a | |
type Element (r -> a) = a | |
type Element (Either a b) = b | |
type Element (a, b) = b | |
type Element (Const m a) = a | |
type Element (WrappedMonad m a) = a | |
type Element (Map k v) = v | |
type Element (MaybeT m a) = a | |
type Element (ListT m a) = a | |
type Element (IdentityT m a) = a | |
type Element (HashMap k v) = v | |
type Element (WrappedApplicative f a) = a | |
type Element (MaybeApply f a) = a | |
type Element (MinLen nat mono) = Element mono | |
type Element (WrappedArrow a b c) = c | |
type Element (WriterT w m a) = a | |
type Element (WriterT w m a) = a | |
type Element (StateT s m a) = a | |
type Element (StateT s m a) = a | |
type Element (ReaderT r m a) = a | |
type Element (ErrorT e m a) = a | |
type Element (ContT r m a) = a | |
type Element (Compose f g a) = a | |
type Element (Product f g a) = a | |
type Element (Cokleisli w a b) = b | |
type Element (Static f a b) = b | |
type Element (RWST r w s m a) = a | |
type Element (RWST r w s m a) = a |
class MonoFunctor mono where Source
Monomorphic containers that can be mapped over.
Nothing
class MonoFoldable mono where Source
Monomorphic containers that can be folded.
Nothing
ofoldMap :: Monoid m => (Element mono -> m) -> mono -> m Source
Map each element of a monomorphic container to a Monoid
and combine the results.
ofoldr :: (Element mono -> b -> b) -> b -> mono -> b Source
Right-associative fold of a monomorphic container.
ofoldl' :: (a -> Element mono -> a) -> a -> mono -> a Source
Strict left-associative fold of a monomorphic container.
otoList :: mono -> [Element mono] Source
Convert a monomorphic container to a list.
oall :: (Element mono -> Bool) -> mono -> Bool Source
Are all of the elements in a monomorphic container
converted to booleans True
?
oany :: (Element mono -> Bool) -> mono -> Bool Source
Are any of the elements in a monomorphic container
converted to booleans True
?
Is the monomorphic container empty?
Length of a monomorphic container, returns a Int
.
olength64 :: mono -> Int64 Source
Length of a monomorphic container, returns a Int64
.
ocompareLength :: Integral i => mono -> i -> Ordering Source
Compare the length of a monomorphic container and a given number.
otraverse_ :: (MonoFoldable mono, Applicative f) => (Element mono -> f b) -> mono -> f () Source
Map each element of a monomorphic container to an action, evaluate these actions from left to right, and ignore the results.
ofor_ :: (MonoFoldable mono, Applicative f) => mono -> (Element mono -> f b) -> f () Source
ofor_
is otraverse_
with its arguments flipped.
omapM_ :: (MonoFoldable mono, Monad m) => (Element mono -> m ()) -> mono -> m () Source
Map each element of a monomorphic container to a monadic action, evaluate these actions from left to right, and ignore the results.
oforM_ :: (MonoFoldable mono, Monad m) => mono -> (Element mono -> m ()) -> m () Source
ofoldlM :: (MonoFoldable mono, Monad m) => (a -> Element mono -> m a) -> a -> mono -> m a Source
Monadic fold over the elements of a monomorphic container, associating to the left.
ofoldMap1Ex :: Semigroup m => (Element mono -> m) -> mono -> m Source
Map each element of a monomorphic container to a semigroup, and combine the results.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
ofoldr1Ex :: (Element mono -> Element mono -> Element mono) -> mono -> Element mono Source
Right-associative fold of a monomorphic container with no base element.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
ofoldl1Ex' :: (Element mono -> Element mono -> Element mono) -> mono -> Element mono Source
Strict left-associative fold of a monomorphic container with no base element.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
headEx :: mono -> Element mono Source
Get the first element of a monomorphic container.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
lastEx :: mono -> Element mono Source
Get the last element of a monomorphic container.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
unsafeHead :: mono -> Element mono Source
Equivalent to headEx
.
unsafeLast :: mono -> Element mono Source
Equivalent to lastEx
.
maximumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono Source
Get the minimum element of a monomorphic container, using a supplied element ordering function.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
minimumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono Source
Get the maximum element of a monomorphic container, using a supplied element ordering function.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
MonoFoldable ByteString | |
MonoFoldable ByteString | |
MonoFoldable IntSet | |
MonoFoldable Text | |
MonoFoldable Text | |
MonoFoldable [a] | |
MonoFoldable (Maybe a) | |
MonoFoldable (IntMap a) | |
MonoFoldable (Set e) | |
MonoFoldable (Tree a) | |
MonoFoldable (Seq a) | |
MonoFoldable (ViewL a) | |
MonoFoldable (ViewR a) | |
MonoFoldable (Identity a) | |
Storable a => MonoFoldable (Vector a) | |
MonoFoldable (NonEmpty a) | |
MonoFoldable (Vector a) | |
MonoFoldable (HashSet e) | |
Unbox a => MonoFoldable (Vector a) | |
MonoFoldable (Option a) | |
MonoFoldable (DList a) | |
MonoFoldable (Either a b) | |
MonoFoldable (Map k v) | |
MonoFoldable (HashMap k v) | |
MonoFoldable mono => MonoFoldable (MinLen nat mono) |
headMay :: MonoFoldable mono => mono -> Maybe (Element mono) Source
lastMay :: MonoFoldable mono => mono -> Maybe (Element mono) Source
osum :: (MonoFoldable mono, Num (Element mono)) => mono -> Element mono Source
osum
computes the sum of the numbers of a monomorphic container.
oproduct :: (MonoFoldable mono, Num (Element mono)) => mono -> Element mono Source
oproduct
computes the product of the numbers of a monomorphic container.
oand :: (Element mono ~ Bool, MonoFoldable mono) => mono -> Bool Source
Are all of the elements True
?
Since 0.6.0
oor :: (Element mono ~ Bool, MonoFoldable mono) => mono -> Bool Source
Are any of the elements True
?
Since 0.6.0
class (MonoFoldable mono, Monoid mono) => MonoFoldableMonoid mono where Source
A typeclass for monomorphic containers that are Monoid
s.
Nothing
oconcatMap :: (Element mono -> mono) -> mono -> mono Source
Map a function over a monomorphic container and combine the results.
MonoFoldableMonoid ByteString | |
MonoFoldableMonoid ByteString | |
MonoFoldableMonoid Text | |
MonoFoldableMonoid Text | |
(MonoFoldable (t a), Monoid (t a)) => MonoFoldableMonoid (t a) |
class (MonoFoldable mono, Eq (Element mono)) => MonoFoldableEq mono where Source
A typeclass for monomorphic containers whose elements
are an instance of Eq
.
Nothing
oelem :: Element mono -> mono -> Bool Source
Checks if the monomorphic container includes the supplied element.
onotElem :: Element mono -> mono -> Bool Source
Checks if the monomorphic container does not include the supplied element.
MonoFoldableEq ByteString | |
MonoFoldableEq ByteString | |
MonoFoldableEq IntSet | |
MonoFoldableEq Text | |
MonoFoldableEq Text | |
Eq a => MonoFoldableEq [a] | |
Eq a => MonoFoldableEq (Maybe a) | |
Eq a => MonoFoldableEq (IntMap a) | |
(Eq a, Ord a) => MonoFoldableEq (Set a) | |
Eq a => MonoFoldableEq (Tree a) | |
Eq a => MonoFoldableEq (Seq a) | |
Eq a => MonoFoldableEq (ViewL a) | |
Eq a => MonoFoldableEq (ViewR a) | |
Eq a => MonoFoldableEq (Identity a) | |
(Eq a, Storable a) => MonoFoldableEq (Vector a) | |
Eq a => MonoFoldableEq (NonEmpty a) | |
Eq a => MonoFoldableEq (Vector a) | |
Eq a => MonoFoldableEq (HashSet a) | |
(Eq a, Unbox a) => MonoFoldableEq (Vector a) | |
Eq a => MonoFoldableEq (Option a) | |
Eq a => MonoFoldableEq (DList a) | |
Eq b => MonoFoldableEq (Either a b) | |
Eq v => MonoFoldableEq (Map k v) | |
Eq v => MonoFoldableEq (HashMap k v) |
class (MonoFoldable mono, Ord (Element mono)) => MonoFoldableOrd mono where Source
A typeclass for monomorphic containers whose elements
are an instance of Ord
.
Nothing
maximumEx :: mono -> Element mono Source
Get the minimum element of a monomorphic container.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
minimumEx :: mono -> Element mono Source
Get the maximum element of a monomorphic container.
Note: this is a partial function. On an empty MonoFoldable
, it will
throw an exception.
See Data.NonNull for a total version of this function.
MonoFoldableOrd ByteString | |
MonoFoldableOrd ByteString | |
MonoFoldableOrd IntSet | |
MonoFoldableOrd Text | |
MonoFoldableOrd Text | |
Ord a => MonoFoldableOrd [a] | |
Ord a => MonoFoldableOrd (Maybe a) | |
Ord a => MonoFoldableOrd (IntMap a) | |
Ord e => MonoFoldableOrd (Set e) | |
Ord a => MonoFoldableOrd (Tree a) | |
Ord a => MonoFoldableOrd (Seq a) | |
Ord a => MonoFoldableOrd (ViewL a) | |
Ord a => MonoFoldableOrd (ViewR a) | |
Ord a => MonoFoldableOrd (Identity a) | |
(Ord a, Storable a) => MonoFoldableOrd (Vector a) | |
Ord a => MonoFoldableOrd (NonEmpty a) | |
Ord a => MonoFoldableOrd (Vector a) | |
Ord e => MonoFoldableOrd (HashSet e) | |
(Unbox a, Ord a) => MonoFoldableOrd (Vector a) | |
Ord a => MonoFoldableOrd (Option a) | |
Ord b => MonoFoldableOrd (Either a b) | |
Ord v => MonoFoldableOrd (Map k v) | |
Ord v => MonoFoldableOrd (HashMap k v) | |
MonoFoldableOrd mono => MonoFoldableOrd (MinLen nat mono) |
maximumMay :: MonoFoldableOrd mono => mono -> Maybe (Element mono) Source
maximumByMay :: MonoFoldable mono => (Element mono -> Element mono -> Ordering) -> mono -> Maybe (Element mono) Source
Safe version of maximumByEx
.
Returns Nothing
instead of throwing an exception when
encountering an empty monomorphic container.
minimumMay :: MonoFoldableOrd mono => mono -> Maybe (Element mono) Source
minimumByMay :: MonoFoldable mono => (Element mono -> Element mono -> Ordering) -> mono -> Maybe (Element mono) Source
Safe version of minimumByEx
.
Returns Nothing
instead of throwing an exception when
encountering an empty monomorphic container.
class (MonoFunctor mono, MonoFoldable mono) => MonoTraversable mono where Source
Monomorphic containers that can be traversed from left to right.
Nothing
otraverse :: Applicative f => (Element mono -> f (Element mono)) -> mono -> f mono Source
Map each element of a monomorphic container to an action, evaluate these actions from left to right, and collect the results.
omapM :: Monad m => (Element mono -> m (Element mono)) -> mono -> m mono Source
Map each element of a monomorphic container to a monadic action, evaluate these actions from left to right, and collect the results.
MonoTraversable ByteString | |
MonoTraversable ByteString | |
MonoTraversable Text | |
MonoTraversable Text | |
MonoTraversable [a] | |
MonoTraversable (Maybe a) | |
MonoTraversable (IntMap a) | |
MonoTraversable (Tree a) | |
MonoTraversable (Seq a) | |
MonoTraversable (ViewL a) | |
MonoTraversable (ViewR a) | |
MonoTraversable (Identity a) | |
Storable a => MonoTraversable (Vector a) | |
MonoTraversable (NonEmpty a) | |
MonoTraversable (Vector a) | |
Unbox a => MonoTraversable (Vector a) | |
MonoTraversable (Option a) | |
MonoTraversable (DList a) | |
MonoTraversable (Either a b) | |
MonoTraversable (Map k v) | |
MonoTraversable (HashMap k v) | |
MonoTraversable mono => MonoTraversable (MinLen nat mono) |
ofor :: (MonoTraversable mono, Applicative f) => mono -> (Element mono -> f (Element mono)) -> f mono Source
oforM :: (MonoTraversable mono, Monad f) => mono -> (Element mono -> f (Element mono)) -> f mono Source
ofoldlUnwrap :: MonoFoldable mono => (x -> Element mono -> x) -> x -> (x -> b) -> mono -> b Source
A strict left fold, together with an unwrap function.
This is convenient when the accumulator value is not the same as the final
expected type. It is provided mainly for integration with the foldl
package, to be used in conjunction with purely
.
Since 0.3.1
ofoldMUnwrap :: (Monad m, MonoFoldable mono) => (x -> Element mono -> m x) -> m x -> (x -> m b) -> mono -> m b Source
A monadic strict left fold, together with an unwrap function.
Similar to foldlUnwrap
, but allows monadic actions. To be used with
impurely
from foldl
.
Since 0.3.1
class MonoPointed mono where Source
Typeclass for monomorphic containers that an element can be lifted into.
For any MonoFunctor
, the following law holds:
omap
f .opoint
=opoint
. f
Nothing
opoint :: Element mono -> mono Source
Lift an element into a monomorphic container.
opoint
is the same as pure
for an Applicative
MonoPointed ByteString | |
MonoPointed ByteString | |
MonoPointed IntSet | |
MonoPointed Text | |
MonoPointed Text | |
MonoPointed [a] | |
MonoPointed (Maybe a) | |
MonoPointed (Set a) | |
MonoPointed (Seq a) | |
MonoPointed (Identity a) | |
Storable a => MonoPointed (Vector a) | |
MonoPointed (NonEmpty a) | |
MonoPointed (Vector a) | |
Hashable a => MonoPointed (HashSet a) | |
Unbox a => MonoPointed (Vector a) | |
MonoPointed (Option a) | |
MonoPointed (DList a) | |
MonoPointed (Either a b) | |
MonoPointed mono => MonoPointed (MinLen (Succ Zero) mono) | |
MonoPointed mono => MonoPointed (MinLen Zero mono) |