module Exception where
import Term ( Range(Range) )
import qualified Text.ParserCombinators.Parsec.Pos as Pos
import qualified Data.List as List
data Message = Message Type Range String
-- deriving (Show)
data Type = Parse | Term | InOut
deriving (Show, Eq, Ord, Enum)
lineFromMessage :: Message -> [String]
lineFromMessage (Message typ (Range pos _) descr) =
Pos.sourceName pos :
show (Pos.sourceLine pos) : show (Pos.sourceColumn pos) :
stringFromType typ :
flattenMultiline descr :
[]
statusFromMessage :: Message -> String
statusFromMessage (Message typ (Range pos _) descr) =
stringFromType typ ++ " - " ++
Pos.sourceName pos ++ ':' :
show (Pos.sourceLine pos) ++ ':' :
show (Pos.sourceColumn pos) ++ " " ++
flattenMultiline descr
multilineFromMessage :: Message -> String
multilineFromMessage (Message typ (Range pos _) descr) =
stringFromType typ ++ " - " ++
Pos.sourceName pos ++ ':' :
show (Pos.sourceLine pos) ++ ':' :
show (Pos.sourceColumn pos) ++ "\n" ++
descr
stringFromType :: Type -> String
stringFromType typ =
case typ of
Parse -> "parse error"
Term -> "term error"
InOut -> "in/out error"
flattenMultiline :: String -> String
flattenMultiline =
List.intercalate "; " . lines