{-# LANGUAGE DeriveDataTypeable #-}
module Internal.Error
( failure
, violation
, impossible
, unimplemented
) where
import Control.Exception
import Data.Typeable
data Violation = Violation String String deriving ( Typeable )
data Failure = Failure String String deriving ( Typeable )
instance Show Failure where
show :: Failure -> String
show (Failure String
f String
m) = String
f forall a. [a] -> [a] -> [a]
++ String
":" forall a. [a] -> [a] -> [a]
++ String
m
instance Show Violation where
show :: Violation -> String
show (Violation String
f String
m) = String
"Bug in " forall a. [a] -> [a] -> [a]
++ String
f forall a. [a] -> [a] -> [a]
++ String
", please report: " forall a. [a] -> [a] -> [a]
++ String
m
instance Exception Violation
instance Exception Failure
failure :: String
-> String
-> a
failure :: forall a. String -> String -> a
failure String
f String
msg = forall a e. Exception e => e -> a
throw forall a b. (a -> b) -> a -> b
$ String -> String -> Failure
Failure String
f String
msg
violation :: String
-> String
-> a
violation :: forall a. String -> String -> a
violation String
f String
msg = forall a e. Exception e => e -> a
throw forall a b. (a -> b) -> a -> b
$ String -> String -> Violation
Violation String
f String
msg
impossible :: String
-> a
impossible :: forall a. String -> a
impossible String
f = forall a. String -> String -> a
violation String
f String
"The impossible happened."
unimplemented :: String
-> a
unimplemented :: forall a. String -> a
unimplemented String
f = forall a. String -> String -> a
failure String
f String
"Unimplemented."