rewire-base-2.8: A Haskell-to-Verilog/VHDL compiler, shared base utilities
Safe HaskellTrustworthy
LanguageHaskell2010

ReWire.Error

Synopsis

Documentation

data SyntaxErrorT ex (m :: Type -> Type) a Source #

The point of the newtype and all the annoying boilerplate is to redefine the "fail" method of the Monad and MonadFail typeclasses.

Instances

Instances details
Monad m => MonadError ex (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

throwError :: ex -> SyntaxErrorT ex m a #

catchError :: SyntaxErrorT ex m a -> (ex -> SyntaxErrorT ex m a) -> SyntaxErrorT ex m a #

Monad m => MonadState ex (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

get :: SyntaxErrorT ex m ex #

put :: ex -> SyntaxErrorT ex m () #

state :: (ex -> (a, ex)) -> SyntaxErrorT ex m a #

MonadTrans (SyntaxErrorT ex) Source # 
Instance details

Defined in ReWire.Error

Methods

lift :: Monad m => m a -> SyntaxErrorT ex m a #

MonadIO m => MonadIO (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

liftIO :: IO a -> SyntaxErrorT ex m a #

MonadCatch m => MonadCatch (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

catch :: (HasCallStack, Exception e) => SyntaxErrorT ex m a -> (e -> SyntaxErrorT ex m a) -> SyntaxErrorT ex m a #

MonadThrow m => MonadThrow (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

throwM :: (HasCallStack, Exception e) => e -> SyntaxErrorT ex m a #

Monad m => Applicative (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

pure :: a -> SyntaxErrorT ex m a #

(<*>) :: SyntaxErrorT ex m (a -> b) -> SyntaxErrorT ex m a -> SyntaxErrorT ex m b #

liftA2 :: (a -> b -> c) -> SyntaxErrorT ex m a -> SyntaxErrorT ex m b -> SyntaxErrorT ex m c #

(*>) :: SyntaxErrorT ex m a -> SyntaxErrorT ex m b -> SyntaxErrorT ex m b #

(<*) :: SyntaxErrorT ex m a -> SyntaxErrorT ex m b -> SyntaxErrorT ex m a #

Functor m => Functor (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

fmap :: (a -> b) -> SyntaxErrorT ex m a -> SyntaxErrorT ex m b #

(<$) :: a -> SyntaxErrorT ex m b -> SyntaxErrorT ex m a #

Monad m => Monad (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

(>>=) :: SyntaxErrorT ex m a -> (a -> SyntaxErrorT ex m b) -> SyntaxErrorT ex m b #

(>>) :: SyntaxErrorT ex m a -> SyntaxErrorT ex m b -> SyntaxErrorT ex m b #

return :: a -> SyntaxErrorT ex m a #

(PutMsg ex, Monad m) => MonadFail (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

fail :: String -> SyntaxErrorT ex m a #

data AstError Source #

An error: a primary location and message, plus optional secondary labelled locations and suggested-fix hints.

Instances

Instances details
Pretty AstError Source # 
Instance details

Defined in ReWire.Error

Methods

pretty :: AstError -> Doc ann #

prettyList :: [AstError] -> Doc ann

PutMsg AstError Source # 
Instance details

Defined in ReWire.Error

data Warning Source #

A non-fatal diagnostic: printed to stderr when emitted (see warnAt), or promoted to an AstError under -Werror.

Constructors

Warning !Annote !Text 

Instances

Instances details
Eq Warning Source # 
Instance details

Defined in ReWire.Error

Methods

(==) :: Warning -> Warning -> Bool #

(/=) :: Warning -> Warning -> Bool #

Ord Warning Source # 
Instance details

Defined in ReWire.Error

Pretty Warning Source # 
Instance details

Defined in ReWire.Error

Methods

pretty :: Warning -> Doc ann #

prettyList :: [Warning] -> Doc ann

type Label = (Annote, Text) Source #

A secondary location with an explanatory note, attached to an error to point at a related part of the source (e.g. "first defined here").

class Monad m => MonadError e (m :: Type -> Type) | m -> e #

The strategy of combining computations that can throw exceptions by bypassing bound functions from the point an exception is thrown to the point that it is handled.

Is parameterized over the type of error information and the monad type constructor. It is common to use Either String as the monad type constructor for an error monad in which error descriptions take the form of strings. In that case and many other common cases the resulting monad is already defined as an instance of the MonadError class. You can also define your own error type and/or use a monad type constructor other than Either String or Either IOError. In these cases you will have to explicitly define instances of the MonadError class. (If you are using the deprecated Control.Monad.Error or Control.Monad.Trans.Error, you may also have to define an Error instance.)

Minimal complete definition

throwError, catchError

Instances

Instances details
MonadError IOException IO 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: IOException -> IO a #

catchError :: IO a -> (IOException -> IO a) -> IO a #

MonadError () Maybe

Since: mtl-2.2.2

Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: () -> Maybe a #

catchError :: Maybe a -> (() -> Maybe a) -> Maybe a #

MonadError e m => MonadError e (Free m) 
Instance details

Defined in Control.Monad.Free

Methods

throwError :: e -> Free m a #

catchError :: Free m a -> (e -> Free m a) -> Free m a #

MonadError e (Either e) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> Either e a #

catchError :: Either e a -> (e -> Either e a) -> Either e a #

MonadError e m => MonadError e (ResourceT m) 
Instance details

Defined in Control.Monad.Trans.Resource.Internal

Methods

throwError :: e -> ResourceT m a #

catchError :: ResourceT m a -> (e -> ResourceT m a) -> ResourceT m a #

MonadError e m => MonadError e (MaybeT m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> MaybeT m a #

catchError :: MaybeT m a -> (e -> MaybeT m a) -> MaybeT m a #

(Functor f, MonadError e m) => MonadError e (FreeT f m) 
Instance details

Defined in Control.Monad.Trans.Free

Methods

throwError :: e -> FreeT f m a #

catchError :: FreeT f m a -> (e -> FreeT f m a) -> FreeT f m a #

(Monoid w, MonadError e m) => MonadError e (AccumT w m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> AccumT w m a #

catchError :: AccumT w m a -> (e -> AccumT w m a) -> AccumT w m a #

Monad m => MonadError e (ExceptT e m)

Since: mtl-2.2

Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> ExceptT e m a #

catchError :: ExceptT e m a -> (e -> ExceptT e m a) -> ExceptT e m a #

MonadError e m => MonadError e (IdentityT m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> IdentityT m a #

catchError :: IdentityT m a -> (e -> IdentityT m a) -> IdentityT m a #

MonadError e m => MonadError e (ReaderT r m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> ReaderT r m a #

catchError :: ReaderT r m a -> (e -> ReaderT r m a) -> ReaderT r m a #

MonadError e m => MonadError e (StateT s m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> StateT s m a #

catchError :: StateT s m a -> (e -> StateT s m a) -> StateT s m a #

MonadError e m => MonadError e (StateT s m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> StateT s m a #

catchError :: StateT s m a -> (e -> StateT s m a) -> StateT s m a #

(Monoid w, MonadError e m) => MonadError e (WriterT w m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> WriterT w m a #

catchError :: WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a #

(Monoid w, MonadError e m) => MonadError e (WriterT w m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> WriterT w m a #

catchError :: WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a #

(Monoid w, MonadError e m) => MonadError e (WriterT w m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> WriterT w m a #

catchError :: WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a #

Monad m => MonadError ex (SyntaxErrorT ex m) Source # 
Instance details

Defined in ReWire.Error

Methods

throwError :: ex -> SyntaxErrorT ex m a #

catchError :: SyntaxErrorT ex m a -> (ex -> SyntaxErrorT ex m a) -> SyntaxErrorT ex m a #

MonadError e m => MonadError e (ConduitT i o m) 
Instance details

Defined in Data.Conduit.Internal.Conduit

Methods

throwError :: e -> ConduitT i o m a #

catchError :: ConduitT i o m a -> (e -> ConduitT i o m a) -> ConduitT i o m a #

(Monoid w, MonadError e m) => MonadError e (RWST r w s m)

Since: mtl-2.3

Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> RWST r w s m a #

catchError :: RWST r w s m a -> (e -> RWST r w s m a) -> RWST r w s m a #

(Monoid w, MonadError e m) => MonadError e (RWST r w s m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> RWST r w s m a #

catchError :: RWST r w s m a -> (e -> RWST r w s m a) -> RWST r w s m a #

(Monoid w, MonadError e m) => MonadError e (RWST r w s m) 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> RWST r w s m a #

catchError :: RWST r w s m a -> (e -> RWST r w s m a) -> RWST r w s m a #

MonadError e m => MonadError e (Pipe l i o u m) 
Instance details

Defined in Data.Conduit.Internal.Pipe

Methods

throwError :: e -> Pipe l i o u m a #

catchError :: Pipe l i o u m a -> (e -> Pipe l i o u m a) -> Pipe l i o u m a #

mark :: (MonadState AstError m, Annotation an) => an -> m () Source #

failAt :: (MonadError AstError m, Annotation an) => an -> Text -> m a Source #

failAt' :: (MonadError (ex, AstError) m, Annotation an) => ex -> an -> Text -> m a Source #

Like failAt, but include an extra bit of data on failure.

failAtWith :: (MonadError AstError m, Annotation an) => an -> Text -> [Label] -> [Text] -> m a Source #

Like failAt, but attach secondary labelled locations and/or hints.

failInternal :: (MonadError AstError m, Annotation an) => an -> Text -> m a Source #

Report a violated internal invariant: a bug in rwc itself, not a problem with the user's program. Rendered with a "please report it" hint so the message can't be mistaken for a complaint about the user's code.

relocateErr :: Annotation an => an -> AstError -> AstError Source #

Re-point a diagnostic at a fallback location when it has none, or when it resolves to a different source file than the fallback — typically because the error surfaced inside inlined library code while compiling a user definition. The original location, when it had one, is kept as a secondary note so the expansion site stays visible.

relocatingTo :: (MonadError AstError m, Annotation an) => an -> m a -> m a Source #

Run an action, relocating any error it raises to the given fallback location (see relocateErr).

relocatingNoLocTo :: (MonadError AstError m, Annotation an) => an -> m a -> m a Source #

failNowhere :: (PutMsg ex, Monad m, MonadState ex m, MonadError ex m) => Text -> m a Source #

warnAt :: (MonadError AstError m, MonadIO m, Annotation an) => Config -> an -> Text -> m () Source #

Emit a warning: printed to stderr immediately (so it isn't lost if a later pass fails), suppressed by -w, or promoted to an error by -Werror (which therefore fails on the *first* warning).

printError :: MonadIO m => [FilePath] -> AstError -> m () Source #

Print an error to stderr, GHC-style, with a source excerpt and a caret under the offending region (plus any secondary "note" blocks) when the files can be found on the load path.

class PutMsg a where Source #

Methods

putMsg :: Text -> a -> a Source #

Instances

Instances details
PutMsg AstError Source # 
Instance details

Defined in ReWire.Error