{-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude , ExistentialQuantification , MagicHash , PatternSynonyms #-} {-# LANGUAGE ImplicitParams #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ViewPatterns #-} {-# OPTIONS_HADDOCK not-home #-} module GHC.Internal.Exception ( Exception(..) , SomeException(..) , displayExceptionWithInfo , someExceptionContext , addExceptionContext , throw , ArithException(..) , divZeroException , overflowException , ratioZeroDenomException , underflowException , ErrorCall(.., ErrorCallWithLocation) , errorCallException , errorCallWithCallStackException , toExceptionWithBacktrace , CallStack, fromCallSiteList, getCallStack, prettyCallStack , prettyCallStackLines , SrcLoc(..), prettySrcLoc ) where import GHC.Internal.Base import GHC.Internal.Show import GHC.Internal.Stack.Types import GHC.Internal.IO.Unsafe import {-# SOURCE #-} GHC.Internal.Stack (prettyCallStackLines, prettyCallStack, prettySrcLoc, withFrozenCallStack) import {-# SOURCE #-} GHC.Internal.Exception.Backtrace (collectBacktraces) import GHC.Internal.Exception.Type throw :: forall (r :: RuntimeRep). forall (a :: TYPE r). forall e. (HasCallStack, Exception e) => e -> a throw :: forall a e. (HasCallStack, Exception e) => e -> a throw e e = let se :: SomeException !se :: SomeException se = SomeException -> SomeException forall a. a -> a noinline (IO SomeException -> SomeException forall a. IO a -> a unsafePerformIO (e -> IO SomeException forall e. (HasCallStack, Exception e) => e -> IO SomeException toExceptionWithBacktrace e e)) in SomeException -> a forall a b. a -> b raise# SomeException se toExceptionWithBacktrace :: (HasCallStack, Exception e) => e -> IO SomeException toExceptionWithBacktrace :: forall e. (HasCallStack, Exception e) => e -> IO SomeException toExceptionWithBacktrace e e | e -> Bool forall e. Exception e => e -> Bool backtraceDesired e e = do bt <- IO Backtraces HasCallStack => IO Backtraces collectBacktraces return (addExceptionContext bt (toException e)) | Bool otherwise = SomeException -> IO SomeException forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (e -> SomeException forall e. Exception e => e -> SomeException toException e e) data ErrorCall = ErrorCall String deriving ( ErrorCall -> ErrorCall -> Bool (ErrorCall -> ErrorCall -> Bool) -> (ErrorCall -> ErrorCall -> Bool) -> Eq ErrorCall forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ErrorCall -> ErrorCall -> Bool == :: ErrorCall -> ErrorCall -> Bool $c/= :: ErrorCall -> ErrorCall -> Bool /= :: ErrorCall -> ErrorCall -> Bool Eq , Eq ErrorCall Eq ErrorCall => (ErrorCall -> ErrorCall -> Ordering) -> (ErrorCall -> ErrorCall -> Bool) -> (ErrorCall -> ErrorCall -> Bool) -> (ErrorCall -> ErrorCall -> Bool) -> (ErrorCall -> ErrorCall -> Bool) -> (ErrorCall -> ErrorCall -> ErrorCall) -> (ErrorCall -> ErrorCall -> ErrorCall) -> Ord ErrorCall ErrorCall -> ErrorCall -> Bool ErrorCall -> ErrorCall -> Ordering ErrorCall -> ErrorCall -> ErrorCall forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: ErrorCall -> ErrorCall -> Ordering compare :: ErrorCall -> ErrorCall -> Ordering $c< :: ErrorCall -> ErrorCall -> Bool < :: ErrorCall -> ErrorCall -> Bool $c<= :: ErrorCall -> ErrorCall -> Bool <= :: ErrorCall -> ErrorCall -> Bool $c> :: ErrorCall -> ErrorCall -> Bool > :: ErrorCall -> ErrorCall -> Bool $c>= :: ErrorCall -> ErrorCall -> Bool >= :: ErrorCall -> ErrorCall -> Bool $cmax :: ErrorCall -> ErrorCall -> ErrorCall max :: ErrorCall -> ErrorCall -> ErrorCall $cmin :: ErrorCall -> ErrorCall -> ErrorCall min :: ErrorCall -> ErrorCall -> ErrorCall Ord ) {-# DEPRECATED ErrorCallWithLocation "ErrorCallWithLocation has been deprecated in favour of ErrorCall (which does not have a location). Backtraces are now handled by the backtrace exception mechanisms exclusively." #-} pattern ErrorCallWithLocation :: String -> String -> ErrorCall pattern $mErrorCallWithLocation :: forall {r}. ErrorCall -> (String -> String -> r) -> ((# #) -> r) -> r $bErrorCallWithLocation :: String -> String -> ErrorCall ErrorCallWithLocation err loc <- ErrorCall ((\String err -> (String err, String -> String forall a. HasCallStack => String -> a error String "ErrorCallWithLocation has been deprecated in favour of ErrorCall (which does not have a location). Backtraces are now handled by the backtrace exception mechanisms exclusively.")) -> (err, loc)) where ErrorCallWithLocation String err String _ = String -> ErrorCall ErrorCall String err {-# COMPLETE ErrorCallWithLocation #-} instance Exception ErrorCall instance Show ErrorCall where showsPrec :: Int -> ErrorCall -> String -> String showsPrec Int _ (ErrorCall String err) = String -> String -> String showString String err errorCallException :: String -> SomeException errorCallException :: String -> SomeException errorCallException String s = ErrorCall -> SomeException forall e. Exception e => e -> SomeException toException (String -> ErrorCall ErrorCall String s) errorCallWithCallStackException :: String -> CallStack -> SomeException errorCallWithCallStackException :: String -> CallStack -> SomeException errorCallWithCallStackException String s CallStack stk = IO SomeException -> SomeException forall a. IO a -> a unsafeDupablePerformIO (IO SomeException -> SomeException) -> IO SomeException -> SomeException forall a b. (a -> b) -> a -> b $ do (HasCallStack => IO SomeException) -> IO SomeException forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack ((HasCallStack => IO SomeException) -> IO SomeException) -> (HasCallStack => IO SomeException) -> IO SomeException forall a b. (a -> b) -> a -> b $ ErrorCall -> IO SomeException forall e. (HasCallStack, Exception e) => e -> IO SomeException toExceptionWithBacktrace (String -> ErrorCall ErrorCall String s) where ?callStack = HasCallStack CallStack stk
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4