Я видел, что TVar представляет собой простой контейнер, а TMVar совпадает с MVar, то есть имеет блокировку и т.д., но внутри монады STM. Мне интересно, почему это необходимо, поскольку идея STM заключается в том, чтобы сделать блокировки ненужными.
Итак, какой именно использовать, если у вас есть тип типа [Handle] список дескрипторов сокетов, которые вы хотите использовать между потоками, созданными forkIO?