Я пытался выяснить, как работают mVars, и я натолкнулся на этот бит кода:
-- |Create an 'MVar' which is initially empty.
newEmptyMVar :: IO (MVar a)
newEmptyMVar = IO $ \ s# ->
case newMVar# s# of
(# s2#, svar# #) -> (# s2#, MVar svar# #)
Кроме того, что он смущает взаимно рекурсивный с newMVar, он также завален хэш (#).
Между 2, я не могу понять, как это работает. Я знаю, что это в основном просто псевдоконструктор для mVar, но остальная часть модуля (на самом деле на самом деле) содержит их, и я ничего не могу найти на них. Googling "Haskell hashs" не принес ничего важного.