-- This Source Code Form is subject to the terms of the Mozilla Public -- License, v. 2.0. If a copy of the MPL was not distributed with this -- file, You can obtain one at http://mozilla.org/MPL/2.0/. {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DerivingStrategies #-} module Data.Severity ( Severity (..) , HasSeverityAnnotation (..) ) where import Prelude import Data.Aeson ( FromJSON, ToJSON ) import GHC.Generics ( Generic ) -- | Define a log-level severity. -- -- +----------+----------------------------------------------------------------------------------+ -- | Severity | Semantic | -- +==========+==================================================================================+ -- | Debug | Messages that contain information normally of use only when debugging a program. | -- | Info | Informational messages. | -- | Notice | Normal but significant conditions. | -- | Warning | A situation that may become an error. | -- | Error | Unexpected problem. | -- +----------+----------------------------------------------------------------------------------+ -- data Severity = Debug | Info | Notice | Warning | Error deriving stock (Generic, Eq, Ord, Enum, Bounded, Show, Read) deriving anyclass (ToJSON, FromJSON) -- | Associate a 'Severity' to a typed log message. -- -- data MyLog = MyLog -- instance HasSeverityAnnotation MyLog where -- getSeverityAnnotation = \case -- MyLog -> Info -- class HasSeverityAnnotation a where getSeverityAnnotation :: a -> Severity