@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
```