The IsNull package


A typeclass to determine if a given foldable type (or other) is empty ~ null ~ invalid. The definition is intentionally vague, to cover types from Either to Text and Sets.

[Skip to ReadMe]


Dependenciesbase (>=4.5 && <4.8), base-compat (==0.5.*), bytestring (>=0.10.0 && <1.0), containers (==0.5.*), text (>=0.11.3 && <1.3) [details]
AuthorJoão Cristóvão
Home page
Source repositoryhead: git clone
UploadedThu May 8 09:40:55 UTC 2014 by jcristovao




Maintainers' corner

For package maintainers and hackage trustees

Readme for IsNull-


A typeclass to determine if a given container is null.

Strongly inspired by mono-traversable, but with a simpler goal: supporting IsNull and nested IsNull operations.

Supported functions:

isNull :: a -> Bool

notNull :: a -> Bool

-- | Nested isNull
isNullN :: (Foldable f) => f a -> Bool

-- | Monadic isNull
isNullM :: Monad m => m a -> m Bool

-- | Monadic Nested isNull
isNullNM :: (Monad m, Foldable f) => m (f a) -> m Bool

-- | Alternative <|> operator does not always operate as choice,
-- at least not in an intuitive way (for example with lists).
-- This one does:
<\> :: a -> a -> a

The N stands for (non-recursive) nested, such that:

isNullN (Just "abc") == False
isNullN (Just ""   ) == True
isNullN (Nothing   ) == True

While the isNull function is equivalent to (==) mempty for most of the instances, not all Foldables are monoids, and not all monoids mempty means null:

Bugs, suggestions and comments are most welcomed!