packages feed

alms-0.6.0: src/Util/Bogus.hs

-- | Interface for producing bogus results, usually when an error
--   has occurred but we want to keep going to try to find more errors.
module Util.Bogus (
  Bogus(..), IsBogus(..),
) where

-- | A bogus value.
class Bogus a where
  bogus ∷ a

-- | Test for bogosity.
class Bogus a ⇒ IsBogus a where
  isBogus ∷ a → Bool

instance Bogus () where
  bogus = ()

instance Bogus (Maybe a) where
  bogus = Nothing

instance Bogus [a] where
  bogus = []

instance Bogus a ⇒ Bogus (Either a b) where
  bogus = Left bogus

instance IsBogus a ⇒ IsBogus (Either a b) where
  isBogus = either isBogus (const False)

instance (Bogus a, Bogus b) ⇒ Bogus (a, b) where
  bogus = (bogus, bogus)

instance (IsBogus a, IsBogus b) ⇒ IsBogus (a, b) where
  isBogus (a, b) = isBogus a && isBogus b

instance (Bogus a, Bogus b, Bogus c) ⇒ Bogus (a, b, c) where
  bogus = (bogus, bogus, bogus)

instance (IsBogus a, IsBogus b, IsBogus c) ⇒ IsBogus (a, b, c) where
  isBogus (a, b, c) = isBogus a && isBogus b && isBogus c