Replies (6)

  • @kb, делает узел т.о. что в структуре содержится ThreadId потока, состоянием которого является эта структура. примерно тоже самое:

    rec do
    let st = S x
    x <- forkIO $ f st
  • @qnikst, спасибо, пойду разбираться
  • @kb, Ну есть fix, который fix f = let x = f x, то есть применяет функцию к результату ее применения. fixIO это то же самое, только функция в IO.
    В твоем примере позволяет передать заполнить структуру указателем на значение tid еще до того, как оно было получено.
  • @rkit, спасибо. На бнв дали хорошую ссылку citeseerx.ist.psu.edu , ну и плюс сделал себе пример:

    ```
    import System.IO (fixIO)
    import Control.Concurrent (forkIO)
    import Control.Concurrent.MVar (newMVar, readMVar)

    main = do
    (ttt, mv) <- fixIO $ \ ~(tid, _) -> do
    putStrLn "First"
    — tidVal <- readMVar mvwtid
    — putStrLn $ "tidVal: " ++ show tidVal
    mVarWithTid <- newMVar tid
    tid' <- forkIO (funcToFork mVarWithTid)
    return (tid', mVarWithTid)
    putStrLn "After fixIO"
    putStrLn $ "ttt: " ++ show ttt
    tid <- readMVar mv
    putStrLn $ "tid: " ++ show tid

    funcToFork mv = do
    putStrLn "Inside forked thread."
    t <- readMVar mv
    putStrLn $ "Inside forked thread: t: " ++ show t
    ```
  • @kb, ппц, жуйк до сих пор не умеет в маркдаун?
  • @kb, Он на жаббер заточен, поэтому никакой разметки. А веб-интерфейс недоделан.
    Вот надо дописать в юзерстиль, чтобы выглядело прилично.

    .msg-txt {
    white-space: pre-wrap;
    }
    .msg-txt br {
    display: none;
    }