@@ -100,10 +100,10 @@ import Control.Distributed.Process.Internal.CQueue (CQueue)
100100import Control.Distributed.Process.Internal.Dynamic
101101 ( Dynamic
102102 , toDyn
103− , fromDynamic
104103 , dynTypeRep
105104 , dynApp
106105 , dynBind
106+ , dynApply
107107 )
108108
109109--------------------------------------------------------------------------------
@@ -251,26 +251,19 @@ registerLabel label dyn = remoteTableLabel label ^= Just dyn
251251registerSender :: TypeRep -> Dynamic -> RemoteTable -> RemoteTable
252252registerSender typ dyn = remoteTableSender typ ^= Just dyn
253253
254−resolveClosure :: RemoteTable -> String -> Maybe Dynamic
255−resolveClosure rtable "$call" = Just (toDyn aux)
254+resolveClosure :: RemoteTable -> String -> ByteString -> Maybe Dynamic
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)
256259 where
257− -- TODO: error handling
258− aux :: ByteString -> Process ()
259− aux env = do
260− let (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'
266− Just proc'' = fromDynamic bound
267− proc''
268−resolveClosure rtable "$bind" = Just (toDyn aux)
269− where
270− -- TODO: error handling
271− aux :: ByteString -> Process ()
272− aux _ = liftIO $ putStrLn "bind not yet supported"
273−resolveClosure rtable label = rtable ^. remoteTableLabel label
260+ (label, env', pid) = decode env :: (String, ByteString, ProcessId)
261+ bind = dynBind tyConProcess bindProcess
262+resolveClosure rtable "$bind" env =
263+ return $ toDyn ((liftIO $ putStrLn "bind not yet supported") :: Process ())
264+resolveClosure rtable label env = do
265+ val <- rtable ^. remoteTableLabel label
266+ dynApply val (toDyn env)
274267
275268tyConProcess :: TyCon
276269tyConProcess = typeRepTyCon (typeOf (undefined :: Process ()))