empty-monad-0.1.0.1: A container that always has no values.

CopyrightVadim Vinnik 2017
LicenseBSD3
Maintainervadim.vinnik@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Data.Empty

Description

An always empty data structure, i.e. a degenerate container that contains no elements but is aware of the (missing) elements' type, and is a first-class citizen of a number of type classes. E.g. fmapping of any function over Empty is also Empty, two Empty container can be mappended that gives Empty again etc.

Synopsis

Documentation

data Empty a Source #

the empty container

Constructors

Empty 

Instances

Monad Empty Source # 

Methods

(>>=) :: Empty a -> (a -> Empty b) -> Empty b #

(>>) :: Empty a -> Empty b -> Empty b #

return :: a -> Empty a #

fail :: String -> Empty a #

Functor Empty Source # 

Methods

fmap :: (a -> b) -> Empty a -> Empty b #

(<$) :: a -> Empty b -> Empty a #

Applicative Empty Source # 

Methods

pure :: a -> Empty a #

(<*>) :: Empty (a -> b) -> Empty a -> Empty b #

(*>) :: Empty a -> Empty b -> Empty b #

(<*) :: Empty a -> Empty b -> Empty a #

Foldable Empty Source # 

Methods

fold :: Monoid m => Empty m -> m #

foldMap :: Monoid m => (a -> m) -> Empty a -> m #

foldr :: (a -> b -> b) -> b -> Empty a -> b #

foldr' :: (a -> b -> b) -> b -> Empty a -> b #

foldl :: (b -> a -> b) -> b -> Empty a -> b #

foldl' :: (b -> a -> b) -> b -> Empty a -> b #

foldr1 :: (a -> a -> a) -> Empty a -> a #

foldl1 :: (a -> a -> a) -> Empty a -> a #

toList :: Empty a -> [a] #

null :: Empty a -> Bool #

length :: Empty a -> Int #

elem :: Eq a => a -> Empty a -> Bool #

maximum :: Ord a => Empty a -> a #

minimum :: Ord a => Empty a -> a #

sum :: Num a => Empty a -> a #

product :: Num a => Empty a -> a #

Traversable Empty Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Empty a -> f (Empty b) #

sequenceA :: Applicative f => Empty (f a) -> f (Empty a) #

mapM :: Monad m => (a -> m b) -> Empty a -> m (Empty b) #

sequence :: Monad m => Empty (m a) -> m (Empty a) #

Alternative Empty Source # 

Methods

empty :: Empty a #

(<|>) :: Empty a -> Empty a -> Empty a #

some :: Empty a -> Empty [a] #

many :: Empty a -> Empty [a] #

MonadPlus Empty Source # 

Methods

mzero :: Empty a #

mplus :: Empty a -> Empty a -> Empty a #

Eq (Empty a) Source # 

Methods

(==) :: Empty a -> Empty a -> Bool #

(/=) :: Empty a -> Empty a -> Bool #

Ord (Empty a) Source # 

Methods

compare :: Empty a -> Empty a -> Ordering #

(<) :: Empty a -> Empty a -> Bool #

(<=) :: Empty a -> Empty a -> Bool #

(>) :: Empty a -> Empty a -> Bool #

(>=) :: Empty a -> Empty a -> Bool #

max :: Empty a -> Empty a -> Empty a #

min :: Empty a -> Empty a -> Empty a #

Monoid (Empty a) Source # 

Methods

mempty :: Empty a #

mappend :: Empty a -> Empty a -> Empty a #

mconcat :: [Empty a] -> Empty a #

unwrap :: Empty a -> a Source #

obtain the (missing) value from the container -- always fails