git.iko.soy/distributed-process
on master help sign in
Make it work with ghc 7.0.4
0a3e174Edsko de Vries
network-transport/network-transport.cabal+4−4
@@ -23,7 +23,7 @@ Library
23 Network.Transport.Chan,
23 Network.Transport.Chan,
24 Network.Transport.TCP,
24 Network.Transport.TCP,
25 Network.Transport.Util
25 Network.Transport.Util
26− extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls
26+ extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, RankNTypes
27 ghc-options: -Wall -fno-warn-unused-do-bind
27 ghc-options: -Wall -fno-warn-unused-do-bind
28 HS-Source-Dirs: src
28 HS-Source-Dirs: src
29
29
@@ -38,7 +38,7 @@ Test-Suite TestTCP
38 mtl,
38 mtl,
39 transformers,
39 transformers,
40 ansi-terminal
40 ansi-terminal
41− extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, ExistentialQuantification, FlexibleInstances, RankNTypes, OverlappingInstances
41+ extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, RankNTypes, ExistentialQuantification, FlexibleInstances, OverlappingInstances
42 ghc-options: -Wall -fno-warn-unused-do-bind
42 ghc-options: -Wall -fno-warn-unused-do-bind
43 HS-Source-Dirs: tests src
43 HS-Source-Dirs: tests src
44
44
@@ -52,7 +52,7 @@ Test-Suite TestMulticastInMemory
52 mtl,
52 mtl,
53 transformers,
53 transformers,
54 ansi-terminal
54 ansi-terminal
55− extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, ExistentialQuantification, FlexibleInstances, RankNTypes, OverlappingInstances
55+ extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, RankNTypes, ExistentialQuantification, FlexibleInstances, OverlappingInstances
56 ghc-options: -Wall -fno-warn-unused-do-bind
56 ghc-options: -Wall -fno-warn-unused-do-bind
57 HS-Source-Dirs: tests src
57 HS-Source-Dirs: tests src
58
58
@@ -66,6 +66,6 @@ Test-Suite TestInMemory
66 mtl,
66 mtl,
67 transformers,
67 transformers,
68 ansi-terminal
68 ansi-terminal
69− extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, ExistentialQuantification, FlexibleInstances, RankNTypes, OverlappingInstances
69+ extensions: OverloadedStrings, ForeignFunctionInterface, DeriveDataTypeable, EmptyDataDecls, RankNTypes, ExistentialQuantification, FlexibleInstances, OverlappingInstances
70 ghc-options: -Wall -fno-warn-unused-do-bind
70 ghc-options: -Wall -fno-warn-unused-do-bind
71 HS-Source-Dirs: tests src
71 HS-Source-Dirs: tests src
network-transport/src/Network/Transport/Internal.hs+8
@@ -9,7 +9,9 @@ module Network.Transport.Internal ( -- * Encoders/decoders
9 , mapIOException
9 , mapIOException
10 , tryIO
10 , tryIO
11 , tryToEnum
11 , tryToEnum
12+ -- * Replicated functionality from "base"
12 , void
13 , void
14+ , forkIOWithUnmask
13 -- * Debugging
15 -- * Debugging
14 , tlog
16 , tlog
15 ) where
17 ) where
@@ -23,6 +25,8 @@ import qualified Data.ByteString as BS (length)
23import qualified Data.ByteString.Internal as BSI (unsafeCreate, toForeignPtr, inlinePerformIO)
25import qualified Data.ByteString.Internal as BSI (unsafeCreate, toForeignPtr, inlinePerformIO)
24import Control.Monad.IO.Class (MonadIO, liftIO)
26import Control.Monad.IO.Class (MonadIO, liftIO)
25import Control.Exception (IOException, Exception, catch, try, throwIO)
27import Control.Exception (IOException, Exception, catch, try, throwIO)
28+import Control.Concurrent (ThreadId, forkIO)
29+import GHC.IO (unsafeUnmask)
26--import Control.Concurrent (myThreadId)
30--import Control.Concurrent (myThreadId)
27
31
28foreign import ccall unsafe "htonl" htonl :: CInt -> CInt
32foreign import ccall unsafe "htonl" htonl :: CInt -> CInt
@@ -85,6 +89,10 @@ tlog msg = liftIO $ do
85void :: Monad m => m a -> m ()
89void :: Monad m => m a -> m ()
86void p = p >> return ()
90void p = p >> return ()
87
91
92+-- | This was introduced in "base" some time after 7.0.4
93+forkIOWithUnmask :: ((forall a . IO a -> IO a) -> IO ()) -> IO ThreadId
94+forkIOWithUnmask io = forkIO (io unsafeUnmask)
95+
88-- | Safe version of 'toEnum'
96-- | Safe version of 'toEnum'
89tryToEnum :: (Enum a, Bounded a) => Int -> Maybe a
97tryToEnum :: (Enum a, Bounded a) => Int -> Maybe a
90tryToEnum = go minBound maxBound
98tryToEnum = go minBound maxBound
network-transport/src/Network/Transport/Internal/TCP.hs+2−2
@@ -7,7 +7,7 @@ module Network.Transport.Internal.TCP ( forkServer
7 ) where
7 ) where
8
8
9import Prelude hiding (catch)
9import Prelude hiding (catch)
10−import Network.Transport.Internal (decodeInt32, void, tryIO)
10+import Network.Transport.Internal (decodeInt32, void, tryIO, forkIOWithUnmask)
11import qualified Network.Socket as N ( HostName
11import qualified Network.Socket as N ( HostName
12 , ServiceName
12 , ServiceName
13 , Socket
13 , Socket
@@ -26,7 +26,7 @@ import qualified Network.Socket as N ( HostName
26 , sClose
26 , sClose
27 )
27 )
28import qualified Network.Socket.ByteString as NBS (recv)
28import qualified Network.Socket.ByteString as NBS (recv)
29−import Control.Concurrent (ThreadId, forkIOWithUnmask)
29+import Control.Concurrent (ThreadId)
30import Control.Monad (liftM, forever)
30import Control.Monad (liftM, forever)
31import Control.Exception (SomeException, catch, bracketOnError, throwIO, mask_)
31import Control.Exception (SomeException, catch, bracketOnError, throwIO, mask_)
32import Data.ByteString (ByteString)
32import Data.ByteString (ByteString)