{-|

Module      : Nullable
Description : Effective Haskell exercise.
Copyright   : © Frank Jung, 2024
License     : GPL-3.0-only

-}
module Nullable
  (
    Nullable (..)
  ) where

import           Data.Maybe (isNothing)
import           Prelude    hiding (null)
import qualified Prelude    (null)

class Nullable a where
  isNull :: a -> Bool
  null :: a

instance Nullable (Maybe a) where
  isNull :: Maybe a -> Bool
isNull = Maybe a -> Bool
forall a. Maybe a -> Bool
isNothing
  null :: Maybe a
null = Maybe a
forall a. Maybe a
Nothing

instance Nullable [a] where
  isNull :: [a] -> Bool
isNull = [a] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
Prelude.null
  null :: [a]
null = []