inline-r-0.7.0.0: src/Internal/Error.hs
-- |
-- Copyright: (C) 2013 Amgen, Inc.
--
-- Wrappers around 'error' that classify problems into whether these are bugs
-- internal to H, or whether they are due to a mistake by the user.
--
-- This module should only be imported by H modules and not reexported.
{-# 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 f m) = f ++ ":" ++ m
instance Show Violation where
show (Violation f m) = "Bug in " ++ f ++ ", please report: " ++ m
instance Exception Violation
instance Exception Failure
-- | User error.
failure :: String -- ^ Function name
-> String -- ^ Error message
-> a
failure f msg = throw $ Failure f msg
-- | An internal invariant has been violated. That's a bug.
violation :: String -- ^ Function name
-> String -- ^ Error message
-> a
violation f msg = throw $ Violation f msg
-- | A violation that should have been made impossible by the type system was
-- not.
impossible :: String -- ^ Function name
-> a
impossible f = violation f "The impossible happened."
-- | Feature not yet implemented.
unimplemented :: String
-> a
unimplemented f = failure f "Unimplemented."