{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ViewPatterns #-} module Language.C.Inline.Cpp.Exceptions {-# DEPRECATED "Language.C.Inline.Cpp.Exceptions is deprecated in favor of Language.C.Inline.Cpp.Exception which changes the CppException data type to preserve the exception for custom error handling." #-} ( CppException(CppHaskellException) , pattern Language.C.Inline.Cpp.Exceptions.CppStdException , pattern Language.C.Inline.Cpp.Exceptions.CppOtherException , toSomeException , throwBlock , tryBlock , catchBlock ) where import Data.ByteString (ByteString) import qualified Data.Text.Encoding as T import qualified Data.Text.Encoding.Error as T import qualified Data.Text as T import Language.C.Inline.Cpp.Exception bsToChars :: ByteString -> String bsToChars :: ByteString -> String bsToChars = Text -> String T.unpack forall b c a. (b -> c) -> (a -> b) -> a -> c . OnDecodeError -> ByteString -> Text T.decodeUtf8With OnDecodeError T.lenientDecode cppStdExceptionMessage :: CppException -> Maybe String cppStdExceptionMessage :: CppException -> Maybe String cppStdExceptionMessage (Language.C.Inline.Cpp.Exception.CppStdException CppExceptionPtr _ ByteString s (Just ByteString t)) = forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ String "Exception: " forall a. Semigroup a => a -> a -> a <> ByteString -> String bsToChars ByteString s forall a. Semigroup a => a -> a -> a <> String "; type: " forall a. Semigroup a => a -> a -> a <> ByteString -> String bsToChars ByteString t cppStdExceptionMessage (Language.C.Inline.Cpp.Exception.CppStdException CppExceptionPtr _ ByteString s Maybe ByteString Nothing) = forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ String "Exception: " forall a. Semigroup a => a -> a -> a <> ByteString -> String bsToChars ByteString s forall a. Semigroup a => a -> a -> a <> String "; type: not available (please use g++ or clang)" cppStdExceptionMessage CppException _ = forall a. Maybe a Nothing cppNonStdExceptionType :: CppException -> Maybe (Maybe String) cppNonStdExceptionType :: CppException -> Maybe (Maybe String) cppNonStdExceptionType (CppNonStdException CppExceptionPtr _ Maybe ByteString mt) = forall a. a -> Maybe a Just (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ByteString -> String bsToChars Maybe ByteString mt) cppNonStdExceptionType CppException _ = forall a. Maybe a Nothing pattern CppStdException :: String -> CppException pattern $mCppStdException :: forall {r}. CppException -> (String -> r) -> ((# #) -> r) -> r CppStdException s <- (cppStdExceptionMessage -> Just s) pattern CppOtherException :: Maybe String -> CppException pattern $mCppOtherException :: forall {r}. CppException -> (Maybe String -> r) -> ((# #) -> r) -> r CppOtherException mt <- (cppNonStdExceptionType -> Just mt)