33 lines
679 B
Haskell
33 lines
679 B
Haskell
-- | Error handling and reporting.
|
|
module Errors where
|
|
|
|
import Data.Generics
|
|
import Control.Monad.Error
|
|
|
|
import qualified AST as A
|
|
import Metadata
|
|
|
|
data OccError = OccError {
|
|
errorText :: String,
|
|
errorPos :: Maybe OccSourcePos
|
|
}
|
|
deriving (Show, Eq, Typeable, Data)
|
|
|
|
type OccErrorT m a = ErrorT OccError m a
|
|
|
|
die :: Monad m => String -> m a
|
|
die s = error $ "\n\nError:\n" ++ s
|
|
|
|
dieInternal :: Monad m => String -> m a
|
|
dieInternal s = die $ "Internal error: " ++ s
|
|
|
|
formatPos :: Meta -> String
|
|
formatPos m
|
|
= case findSourcePos m of
|
|
Just o -> show o
|
|
Nothing -> "?"
|
|
|
|
dieP :: Monad m => Meta -> String -> m a
|
|
dieP m s = die $ formatPos m ++ ": " ++ s
|
|
|