{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE DefaultSignatures #-}{-# LANGUAGE ExistentialQuantification #-}{-# LANGUAGE ScopedTypeVariables #-}{-# LANGUAGE TypeApplications #-}{-# LANGUAGE GADTs #-}{-# OPTIONS_HADDOCK not-home #-}------------------------------------------------------------------------------- |-- Module : GHC.Internal.Exception.Context-- Copyright : (c) The University of Glasgow, 1998-2002-- License : see libraries/base/LICENSE---- Maintainer : cvs-ghc@haskell.org-- Stability : internal-- Portability : non-portable (GHC extensions)---- Exception context type.-------------------------------------------------------------------------------moduleGHC.Internal.Exception.Context (-- * Exception contextExceptionContext (..),emptyExceptionContext ,addExceptionAnnotation ,getExceptionAnnotations ,getAllExceptionAnnotations ,mergeExceptionContext ,displayExceptionContext -- * Exception annotations,SomeExceptionAnnotation (..),ExceptionAnnotation (..))whereimportGHC.Internal.Data.OldList (intersperse )importGHC.Internal.Base (($) ,map ,(++) ,return ,String ,Maybe (..),Semigroup (..),Monoid (..))importGHC.Internal.Show (Show (..))importGHC.Internal.Data.Typeable.Internal (Typeable ,typeRep ,eqTypeRep )importGHC.Internal.Data.Type.Equality ((:~~:) (HRefl ))-- | Exception context represents a list of 'ExceptionAnnotation's. These are-- attached to 'SomeException's via 'Control.Exception.addExceptionContext' and-- can be used to capture various ad-hoc metadata about the exception including-- backtraces and application-specific context.---- 'ExceptionContext's can be merged via concatenation using the 'Semigroup'-- instance or 'mergeExceptionContext'.---- Note that GHC will automatically solve implicit constraints of type 'ExceptionContext'-- with 'emptyExceptionContext'.dataExceptionContext =ExceptionContext [SomeExceptionAnnotation ]instanceSemigroup ExceptionContext where<> :: ExceptionContext -> ExceptionContext -> ExceptionContext
(<>) =ExceptionContext -> ExceptionContext -> ExceptionContext
mergeExceptionContext instanceMonoid ExceptionContext wheremempty :: ExceptionContext
mempty =ExceptionContext
emptyExceptionContext -- | An 'ExceptionContext' containing no annotations.---- @since base-4.20.0.0emptyExceptionContext ::ExceptionContext emptyExceptionContext :: ExceptionContext
emptyExceptionContext =[SomeExceptionAnnotation] -> ExceptionContext
ExceptionContext []-- | Construct a singleton 'ExceptionContext' from an 'ExceptionAnnotation'.---- @since base-4.20.0.0addExceptionAnnotation ::ExceptionAnnotation a =>a ->ExceptionContext ->ExceptionContext addExceptionAnnotation :: forall a.
ExceptionAnnotation a =>
a -> ExceptionContext -> ExceptionContext
addExceptionAnnotation a
x (ExceptionContext [SomeExceptionAnnotation]
xs )=[SomeExceptionAnnotation] -> ExceptionContext
ExceptionContext (a -> SomeExceptionAnnotation
forall a. ExceptionAnnotation a => a -> SomeExceptionAnnotation
SomeExceptionAnnotation a
x SomeExceptionAnnotation
-> [SomeExceptionAnnotation] -> [SomeExceptionAnnotation]
forall a. a -> [a] -> [a]
: [SomeExceptionAnnotation]
xs )-- | Retrieve all 'ExceptionAnnotation's of the given type from an 'ExceptionContext'.---- @since base-4.20.0.0getExceptionAnnotations ::foralla .ExceptionAnnotation a =>ExceptionContext ->[a ]getExceptionAnnotations :: forall a. ExceptionAnnotation a => ExceptionContext -> [a]
getExceptionAnnotations (ExceptionContext [SomeExceptionAnnotation]
xs )=[a
a
x |SomeExceptionAnnotation (a
x ::b )<-[SomeExceptionAnnotation]
xs ,Just a :~~: a
HRefl <-Maybe (a :~~: a) -> [Maybe (a :~~: a)]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return (forall a. Typeable a => TypeRep a
forall {k} (a :: k). Typeable a => TypeRep a
typeRep @a TypeRep a -> TypeRep a -> Maybe (a :~~: a)
forall k1 k2 (a :: k1) (b :: k2).
TypeRep a -> TypeRep b -> Maybe (a :~~: b)
`eqTypeRep` forall a. Typeable a => TypeRep a
forall {k} (a :: k). Typeable a => TypeRep a
typeRep @b )]getAllExceptionAnnotations ::ExceptionContext ->[SomeExceptionAnnotation ]getAllExceptionAnnotations :: ExceptionContext -> [SomeExceptionAnnotation]
getAllExceptionAnnotations (ExceptionContext [SomeExceptionAnnotation]
xs )=[SomeExceptionAnnotation]
xs -- | Merge two 'ExceptionContext's via concatenation---- @since base-4.20.0.0mergeExceptionContext ::ExceptionContext ->ExceptionContext ->ExceptionContext mergeExceptionContext :: ExceptionContext -> ExceptionContext -> ExceptionContext
mergeExceptionContext (ExceptionContext [SomeExceptionAnnotation]
a )(ExceptionContext [SomeExceptionAnnotation]
b )=[SomeExceptionAnnotation] -> ExceptionContext
ExceptionContext ([SomeExceptionAnnotation]
a [SomeExceptionAnnotation]
-> [SomeExceptionAnnotation] -> [SomeExceptionAnnotation]
forall a. [a] -> [a] -> [a]
++ [SomeExceptionAnnotation]
b )-- | Render 'ExceptionContext' to a human-readable 'String'.---- @since base-4.20.0.0displayExceptionContext ::ExceptionContext ->String displayExceptionContext :: ExceptionContext -> String
displayExceptionContext (ExceptionContext [SomeExceptionAnnotation]
anns0 )=[String] -> String
forall a. Monoid a => [a] -> a
mconcat ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ String -> [String] -> [String]
forall a. a -> [a] -> [a]
intersperse String
"\n"([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ (SomeExceptionAnnotation -> String)
-> [SomeExceptionAnnotation] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map SomeExceptionAnnotation -> String
go [SomeExceptionAnnotation]
anns0 wherego :: SomeExceptionAnnotation -> String
go (SomeExceptionAnnotation a
ann )=a -> String
forall a. ExceptionAnnotation a => a -> String
displayExceptionAnnotation a
ann dataSomeExceptionAnnotation =foralla .ExceptionAnnotation a =>SomeExceptionAnnotation a -- | 'ExceptionAnnotation's are types which can decorate exceptions as-- 'ExceptionContext'.---- @since base-4.20.0.0class(Typeable a )=>ExceptionAnnotation a where-- | Render the annotation for display to the user.displayExceptionAnnotation ::a ->String defaultdisplayExceptionAnnotation ::Show a =>a ->String displayExceptionAnnotation =a -> String
forall a. Show a => a -> String
show 

AltStyle によって変換されたページ (->オリジナル) /