@@ -36,6 +36,7 @@ module Control.Distributed.Process.Internal.Types
36 , ProcessMonitorNotification(..)
36 , ProcessMonitorNotification(..)
37 , NodeMonitorNotification(..)
37 , NodeMonitorNotification(..)
38 , PortMonitorNotification(..)
38 , PortMonitorNotification(..)
39+ , ProcessExitException(..)
39 , ProcessLinkException(..)
40 , ProcessLinkException(..)
40 , NodeLinkException(..)
41 , NodeLinkException(..)
41 , PortLinkException(..)
42 , PortLinkException(..)
@@ -72,7 +73,7 @@ import System.Mem.Weak (Weak)
72import Data.Map (Map)
73import Data.Map (Map)
73import Data.Int (Int32)
74import Data.Int (Int32)
74import Data.Typeable (Typeable)
75import Data.Typeable (Typeable)
75−import Data.Binary (Binary(put, get), putWord8, getWord8, encode)
76+import Data.Binary (Binary(put, get), putWord8, getWord8, encode, decode)
76import qualified Data.ByteString as BSS (ByteString, concat, copy)
77import qualified Data.ByteString as BSS (ByteString, concat, copy)
77import qualified Data.ByteString.Lazy as BSL
78import qualified Data.ByteString.Lazy as BSL
78 ( ByteString
79 ( ByteString
@@ -370,6 +371,23 @@ data ProcessRegistrationException =
370 ProcessRegistrationException !String
371 ProcessRegistrationException !String
371 deriving (Typeable, Show)
372 deriving (Typeable, Show)
374+-- | Internal exception thrown indirectly by 'exit'
375+data ProcessExitException =
376+ ProcessExitException !ProcessId !Message
379+instance Exception ProcessExitException
380+instance Show ProcessExitException where
381+ show = showProcessExit
383+showProcessExit :: ProcessExitException -> String
384+showProcessExit (ProcessExitException pid reason) =
385+ case messageFingerprint reason == fingerprint (undefined :: String) of
386+ True -> "origin=" ++ (show pid) ++ ",reason=" ++ decoded
387+ False -> "origin=" ++ show pid
388+ where decoded :: String
389+ !decoded = decode (messageEncoding reason)
373instance Exception ProcessLinkException
391instance Exception ProcessLinkException
374instance Exception NodeLinkException
392instance Exception NodeLinkException
375instance Exception PortLinkException
393instance Exception PortLinkException