@@ -69,14 +69,14 @@ import Data.Map (Map)
6969import Data.Int (Int32)
7070import Data.Typeable (Typeable)
7171import Data.Binary (Binary(put, get), putWord8, getWord8, encode)
72−import qualified Data.ByteString as BSS (ByteString, concat)
72+import qualified Data.ByteString as BSS (ByteString, concat, copy)
7373import qualified Data.ByteString.Lazy as BSL
7474 ( ByteString
7575 , toChunks
7676 , splitAt
7777 , fromChunks
78− , copy
7978 )
79+import qualified Data.ByteString.Lazy.Internal as BSL (ByteString(..))
8080import Data.Accessor (Accessor, accessor)
8181import Control.Category ((>>>))
8282import Control.Exception (Exception)
@@ -294,12 +294,20 @@ messageToPayload (Message fp enc) = encodeFingerprint fp : BSL.toChunks enc
294294
295295-- | Deserialize a message
296296payloadToMessage :: [BSS.ByteString] -> Message
297−payloadToMessage payload = Message fp (BSL.copy msg)
297+payloadToMessage payload = Message fp (copy msg)
298298 where
299+ encFp :: BSL.ByteString
300+ msg :: BSL.ByteString
299301 (encFp, msg) = BSL.splitAt (fromIntegral sizeOfFingerprint)
300302 $ BSL.fromChunks payload
303+
304+ fp :: Fingerprint
301305 fp = decodeFingerprint . BSS.concat . BSL.toChunks $ encFp
302306
307+ copy :: BSL.ByteString -> BSL.ByteString
308+ copy (BSL.Chunk bs BSL.Empty) = BSL.Chunk (BSS.copy bs) BSL.Empty
309+ copy bsl = BSL.fromChunks . return . BSS.concat . BSL.toChunks $ bsl
310+
303311--------------------------------------------------------------------------------
304312-- Node controller user-visible data types --
305313--------------------------------------------------------------------------------
@@ -410,7 +418,7 @@ data ProcessSignal =
410418 | Died Identifier !DiedReason
411419 | Spawn !(Closure (Process ())) !SpawnRef
412420 | WhereIs !String
413− | Register !String !(Maybe ProcessId) -- Nothing to unregister
421+ | Register !String !(Maybe ProcessId) -- Use 'Nothing' to unregister
414422 | NamedSend !String !Message
415423 deriving Show
416424