{-# 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 (Text -> String) -> (ByteString -> Text) -> ByteString -> String 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)) = String -> Maybe String forall a. a -> Maybe a Just (String -> Maybe String) -> String -> Maybe String forall a b. (a -> b) -> a -> b $ String "Exception: " String -> String -> String forall a. Semigroup a => a -> a -> a <> ByteString -> String bsToChars ByteString s String -> String -> String forall a. Semigroup a => a -> a -> a <> String "; type: " String -> String -> String 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) = String -> Maybe String forall a. a -> Maybe a Just (String -> Maybe String) -> String -> Maybe String forall a b. (a -> b) -> a -> b $ String "Exception: " String -> String -> String forall a. Semigroup a => a -> a -> a <> ByteString -> String bsToChars ByteString s String -> String -> String forall a. Semigroup a => a -> a -> a <> String "; type: not available (please use g++ or clang)" cppStdExceptionMessage CppException _ = Maybe String forall a. Maybe a Nothing cppNonStdExceptionType :: CppException -> Maybe (Maybe String) cppNonStdExceptionType :: CppException -> Maybe (Maybe String) cppNonStdExceptionType (CppNonStdException CppExceptionPtr _ Maybe ByteString mt) = Maybe String -> Maybe (Maybe String) forall a. a -> Maybe a Just ((ByteString -> String) -> Maybe ByteString -> Maybe String forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ByteString -> String bsToChars Maybe ByteString mt) cppNonStdExceptionType CppException _ = Maybe (Maybe String) forall a. Maybe a Nothing pattern CppStdException :: String -> CppException pattern $mCppStdException :: forall r. CppException -> (String -> r) -> (Void# -> r) -> r CppStdException s <- (cppStdExceptionMessage -> Just s) pattern CppOtherException :: Maybe String -> CppException pattern $mCppOtherException :: forall r. CppException -> (Maybe String -> r) -> (Void# -> r) -> r CppOtherException mt <- (cppNonStdExceptionType -> Just mt)