module Main where

import Control.Concurrent
import GHC.IOBase

{-# NOINLINE mv #-}
mv :: MVar a
mv = unsafePerformIO $ newEmptyMVar

main = do
  putMVar mv "foo"
  t1 <- takeMVar mv
  print (t1::String)
  -- comment out to get "threads blocked indefinetely" instead:
  putMVar mv t1      -- (1)
  print "here"
  -- putMVar mv 3    -- (2)
  print "there"
  t2 <- takeMVar mv
  print (t2::Int)
