IsNull: A typeclass to determine if a given value is null.

[ bsd3, data, library ] [ Propose Tags ]

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]

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.3.0.0, 0.4.0.0
Dependencies base (>=4.5 && <4.8), base-compat (>=0.5 && <0.6), bytestring (>=0.10.0 && <1.0), containers (>=0.5 && <0.6), text (>=0.11.3 && <1.3) [details]
License BSD-3-Clause
Author João Cristóvão
Maintainer jmacristovao@gmail.com
Category Data
Home page https://github.com/jcristovao/IsNull
Source repo head: git clone https://github.com/jcristovao/IsNull
Uploaded by jcristovao at 2014-05-08T09:41:23Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 2054 total (6 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Successful builds reported [all 1 reports]

Readme for IsNull-0.3.0.0

[back to package description]

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:

  • Either is an example of a Foldable which is not a Monoid, but where it makes sense to consider a Left as an 'Null' value. While this is not strictly true, the Left option does carries a value, we take the more liberal approach: Empty ~ Null ~ Invalid Value. If you need proper type reasoning, you should not be using this package, just regular pattern matching instead.

  • Product Monoid instance is 1. Hardly qualifies as an Empty or Null value. For this reason no default implementation is provided for the Monoid class. It's up to you to use (==) mempty instead.

Bugs, suggestions and comments are most welcomed!