{-|
Description : Errors for feedback to users
-}
module Language.Haskell.Formatter.Error
       (Error, createStyleFormatError, createParseError, createAssertionError,
        isAssertionError)
       where
import qualified Language.Haskell.Formatter.Location as Location
import qualified Language.Haskell.Formatter.Source as Source

data Error = StyleFormatError String
           | ParseError Location.SrcLoc String
           | AssertionError String
               deriving (Eq, Ord)

instance Show Error where
        show (StyleFormatError message) = message
        show (ParseError position message)
          = concat [Source.prettyPrint position, separator, message]
          where separator = ": "
        show (AssertionError message) = message

createStyleFormatError :: String -> Error
createStyleFormatError = StyleFormatError

createParseError :: Location.SrcLoc -> String -> Error
createParseError = ParseError

createAssertionError :: String -> Error
createAssertionError = AssertionError

isAssertionError :: Error -> Bool
isAssertionError (StyleFormatError _) = False
isAssertionError (ParseError _ _) = False
isAssertionError (AssertionError _) = True