----------------------------------------------------------------------
--
-- Module      :  Uniform.NoticeLevel
--              a simplistic idea to control the amount of output 
--              helping with debug 
--
----------------------------------------------------------------------

    {-# LANGUAGE BangPatterns #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PackageImports #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}

{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
-- runErrorT is depreceiated but used in monads-tf
{-# OPTIONS_GHC -w #-}

module  Uniform.NoticeLevel
  ( module Uniform.NoticeLevel
      )
where

 
import Uniform.Strings hiding (S, (<.>), (</>))
import Data.Default
import GHC.Generics

data NoticeLevel = NoticeLevel0 | NoticeLevel1 | NoticeLevel2 deriving (NoticeLevel -> NoticeLevel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NoticeLevel -> NoticeLevel -> Bool
$c/= :: NoticeLevel -> NoticeLevel -> Bool
== :: NoticeLevel -> NoticeLevel -> Bool
$c== :: NoticeLevel -> NoticeLevel -> Bool
Eq, Eq NoticeLevel
NoticeLevel -> NoticeLevel -> Bool
NoticeLevel -> NoticeLevel -> Ordering
NoticeLevel -> NoticeLevel -> NoticeLevel
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: NoticeLevel -> NoticeLevel -> NoticeLevel
$cmin :: NoticeLevel -> NoticeLevel -> NoticeLevel
max :: NoticeLevel -> NoticeLevel -> NoticeLevel
$cmax :: NoticeLevel -> NoticeLevel -> NoticeLevel
>= :: NoticeLevel -> NoticeLevel -> Bool
$c>= :: NoticeLevel -> NoticeLevel -> Bool
> :: NoticeLevel -> NoticeLevel -> Bool
$c> :: NoticeLevel -> NoticeLevel -> Bool
<= :: NoticeLevel -> NoticeLevel -> Bool
$c<= :: NoticeLevel -> NoticeLevel -> Bool
< :: NoticeLevel -> NoticeLevel -> Bool
$c< :: NoticeLevel -> NoticeLevel -> Bool
compare :: NoticeLevel -> NoticeLevel -> Ordering
$ccompare :: NoticeLevel -> NoticeLevel -> Ordering
Ord, Int -> NoticeLevel -> ShowS
[NoticeLevel] -> ShowS
NoticeLevel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NoticeLevel] -> ShowS
$cshowList :: [NoticeLevel] -> ShowS
show :: NoticeLevel -> String
$cshow :: NoticeLevel -> String
showsPrec :: Int -> NoticeLevel -> ShowS
$cshowsPrec :: Int -> NoticeLevel -> ShowS
Show, ReadPrec [NoticeLevel]
ReadPrec NoticeLevel
Int -> ReadS NoticeLevel
ReadS [NoticeLevel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [NoticeLevel]
$creadListPrec :: ReadPrec [NoticeLevel]
readPrec :: ReadPrec NoticeLevel
$creadPrec :: ReadPrec NoticeLevel
readList :: ReadS [NoticeLevel]
$creadList :: ReadS [NoticeLevel]
readsPrec :: Int -> ReadS NoticeLevel
$creadsPrec :: Int -> ReadS NoticeLevel
Read, forall x. Rep NoticeLevel x -> NoticeLevel
forall x. NoticeLevel -> Rep NoticeLevel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep NoticeLevel x -> NoticeLevel
$cfrom :: forall x. NoticeLevel -> Rep NoticeLevel x
Generic)
instance Zeros NoticeLevel where zero :: NoticeLevel
zero = NoticeLevel
NoticeLevel0 
instance Default NoticeLevel where 
        def :: NoticeLevel
def = NoticeLevel
NoticeLevel2 

inform, informNone, informAll :: NoticeLevel -> Bool
inform :: NoticeLevel -> Bool
inform =  Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall z. (Zeros z, Eq z) => z -> Bool
isZero
informNone :: NoticeLevel -> Bool
informNone = forall a b. a -> b -> a
const Bool
False  -- to use with: when (informNone debug)
informAll :: NoticeLevel -> Bool
informAll = forall a b. a -> b -> a
const Bool
True