use newTVarIO and readTVarIO
checkpoint