module Error where import Data.List (sort) import Text.Parsec (SourcePos, errorPos) import Text.Parsec.Error (ParseError, errorMessages, showErrorMessages) data Error = Error String SourcePos deriving (Eq) instance Show Error where show (Error message pos) = show pos ++ " error: " ++ message showParserError :: ParseError -> String showParserError error = show (errorPos error) ++ " error: syntax error" ++ showErrorMessages "or" "unknown parser error" " expecting" " unexpected" "end of input" (errorMessages error) instance Ord Error where compare (Error _ pos1) (Error _ pos2) = compare pos1 pos2 showErrorList :: [Error] -> String showErrorList errs = unlines $ map show (sort errs)