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 Control.Monad.Trans.RWS.Lazy as Lazy
import Control.Monad.Trans.RWS.Strict as Strict
import Control.Monad.Trans.Writer.Lazy as Lazy
import Control.Monad.Trans.Writer.Strict as Strict
import Control.Monad.Trans.Reader
import Control.Monad.Trans.Identity
import Data.Monoid
import Text.Trifecta.Diagnostic.Prim
import Text.Trifecta.Diagnostic.Level
import Text.Trifecta.Diagnostic.Rendering.Prim
class Monad m => MonadDiagnostic e m | m -> e where
fatalWith :: [Diagnostic e] -> [Rendering] -> e -> m a
errWith :: [Diagnostic e] -> [Rendering] -> e -> m a
logWith :: DiagnosticLevel -> [Diagnostic e] -> [Rendering] -> e -> m ()
instance MonadDiagnostic e m => MonadDiagnostic e (Lazy.StateT s m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance MonadDiagnostic e m => MonadDiagnostic e (Strict.StateT s m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance MonadDiagnostic e m => MonadDiagnostic e (ReaderT r m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance (MonadDiagnostic e m, Monoid w) => MonadDiagnostic e (Lazy.WriterT w m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance (MonadDiagnostic e m, Monoid w) => MonadDiagnostic e (Strict.WriterT w m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance (MonadDiagnostic e m, Monoid w) => MonadDiagnostic e (Lazy.RWST r w s m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance (MonadDiagnostic e m, Monoid w) => MonadDiagnostic e (Strict.RWST r w s m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)
instance MonadDiagnostic e m => MonadDiagnostic e (IdentityT m) where
fatalWith d r e = lift (fatalWith d r e)
errWith d r e = lift (errWith d r e)
logWith l d r e = lift (logWith l d r e)