Copyright | João Cristóvão, 2014 |
---|---|
License | BSD3 |
Maintainer | jmacristovao@gmail.com |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Data.IsNull
Description
A typeclass to determine if a given value is null.
Strongly inspired by mono-traversable but with a simpler goal: supporting IsNull and nested IsNull operations.
While the
function is equivalent to isNull
(==) mempty
for most of
the instances, not all
s are monoids,
and not all monoids Foldable
means null:mempty
is an example of aEither
Foldable
which is not a
, but where it makes sense to consider aMonoid
as anLeft
Null
value. While this is not strictly true, the
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.Left
Product
instance isMonoid
1
. Hardly qualifies as anEmpty
orNull
value. For this reason no default implementation is provided for the
class. It's up to you to useMonoid
(==) mempty
instead.
The main use case for this package are boolean conditions,
namely the if
then
else
construct.
Bugs, suggestions and comments are most welcomed!
Documentation
Minimal complete definition
Methods
isNull ~ isEmpty ~ isInvalid?
>>>
isNull (Left 5)
True
>>>
isNull ("abc" :: T.Text)
False
>>>
isNull [""] -- see isNullN
False
Typing causes arthritis. Alias for
.isNull
the logical negation of isNull
isNullN :: Foldable f => f a -> Bool Source
Nested isNull
>>>
isNullN (Just "abc")
False
>>>
isNullN (Just "")
True
>>>
isNullN (Nothing :: Maybe String)
True
notNullN :: Foldable f => f a -> Bool Source
Nested isNotNull
isNullM :: Monad m => m a -> m Bool Source
Monadic isNull
>>>
isNullM [""]
[True]
isNullNM :: (Monad m, Foldable f) => m (f a) -> m Bool Source
Monadic Nested isNull
(<\>) :: a -> a -> a infixl 3 Source
's Alternative
operator does not always operate as choice,
at least not in an intuitive way (for example with lists).
This one does:<|>
>>>
[2,3] <\> [4,5]
[2,3]
>>>
[] <\> [4,5]
[4,5]
>>>
[] <\> []
[]