@@ -100,10 +100,10 @@ import Control.Distributed.Process.Internal.CQueue (CQueue)
100import Control.Distributed.Process.Internal.Dynamic
100import Control.Distributed.Process.Internal.Dynamic
101 ( Dynamic
101 ( Dynamic
104 , dynTypeRep
103 , dynTypeRep
106 , dynBind
105 , dynBind
109--------------------------------------------------------------------------------
109--------------------------------------------------------------------------------
@@ -251,26 +251,19 @@ registerLabel label dyn = remoteTableLabel label ^= Just dyn
251registerSender :: TypeRep -> Dynamic -> RemoteTable -> RemoteTable
251registerSender :: TypeRep -> Dynamic -> RemoteTable -> RemoteTable
252registerSender typ dyn = remoteTableSender typ ^= Just dyn
252registerSender typ dyn = remoteTableSender typ ^= Just dyn
254−resolveClosure :: RemoteTable -> String -> Maybe Dynamic
254+resolveClosure :: RemoteTable -> String -> ByteString -> Maybe Dynamic
255−resolveClosure rtable "$call" = Just (toDyn aux)
255+resolveClosure rtable "$call" env = do
256+ proc <- resolveClosure rtable label env'
257+ sender <- rtable ^. remoteTableSender (dynTypeRep proc)
258+ proc `bind` (sender `dynApp` toDyn pid)
257− -- TODO: error handling
258− aux :: ByteString -> Process ()
260− let (label, env', pid) = decode env :: (String, ByteString, ProcessId)
260+ (label, env', pid) = decode env :: (String, ByteString, ProcessId)
261− Just proc = resolveClosure rtable label
262− proc' = dynApp proc (toDyn env')
263− Just enc = rtable ^. remoteTableSender (dynTypeRep proc')
264− enc' = dynApp enc (toDyn pid)
265− Just bound = dynBind tyConProcess bindProcess proc' enc'
261+ bind = dynBind tyConProcess bindProcess
266− Just proc'' = fromDynamic bound
268−resolveClosure rtable "$bind" = Just (toDyn aux)
262+resolveClosure rtable "$bind" env =
270− -- TODO: error handling
271− aux :: ByteString -> Process ()
272− aux _ = liftIO $ putStrLn "bind not yet supported"
263+ return $ toDyn ((liftIO $ putStrLn "bind not yet supported") :: Process ())
264+resolveClosure rtable label env = do
273−resolveClosure rtable label = rtable ^. remoteTableLabel label
265+ val <- rtable ^. remoteTableLabel label
266+ dynApply val (toDyn env)
275tyConProcess :: TyCon
268tyConProcess :: TyCon
276tyConProcess = typeRepTyCon (typeOf (undefined :: Process ()))
269tyConProcess = typeRepTyCon (typeOf (undefined :: Process ()))