packages feed

trifecta-0.21: Text/Trifecta/Diagnostic/Class.hs

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies, FlexibleContexts, UndecidableInstances #-}
module Text.Trifecta.Diagnostic.Class
  ( MonadDiagnostic(..)
  ) where

import Control.Monad.Trans.Class
import Control.Monad.Trans.State.Lazy as Lazy
import Control.Monad.Trans.State.Strict as Strict
import Text.Trifecta.Diagnostic.Prim

class Monad m => MonadDiagnostic e m | m -> e where
  record  :: Diagnostic e -> m ()
  fatal   :: e -> m a -- consuming error
  err     :: e -> m a -- non-consuming error
  warn    :: e -> m ()
  note    :: e -> m ()
  verbose :: Int -> e -> m ()

instance MonadDiagnostic e m => MonadDiagnostic e (Lazy.StateT s m) where
  record    = lift . record
  fatal     = lift . fatal
  err       = lift . err
  warn      = lift . warn
  note      = lift . note
  verbose n = lift . verbose n

instance MonadDiagnostic e m => MonadDiagnostic e (Strict.StateT s m) where
  record    = lift . record
  fatal     = lift . fatal
  err       = lift . err
  warn      = lift . warn
  note      = lift . note
  verbose n = lift . verbose n