crdt-10.0: lib/Data/Empty.hs
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE LambdaCase #-}
module Data.Empty where
-- | A type that may be empty.
-- If your type does not have a special empty value, just wrap it into 'Maybe',
-- it is free.
--
-- Based on Control.Lens.Empty.AsEmpty.
class AsEmpty a where
empty :: a
isEmpty :: a -> Bool
default isEmpty :: Eq a => a -> Bool
isEmpty a = empty == a
isNotEmpty :: a -> Bool
default isNotEmpty :: Eq a => a -> Bool
isNotEmpty a = empty /= a
instance AsEmpty (Maybe a) where
empty = Nothing
isEmpty = \case
Nothing -> True
_ -> False
isNotEmpty = \case
Nothing -> False
_ -> True
instance AsEmpty Char where
empty = '\NUL'