On Thu, Aug 14, 2014 at 11:54 AM, Christian Höner zu Siederdissen <choener@tbi.univie.ac.at> wrote:
go xs = unsafePerformIO $ do
  forM_ xs $ cfun
  return $ somethingUnhealthy

I wonder if this is your real problem. `unsafePerformIO` does some extra locking; the FFI specifies a function `unsafeLocalState`, which in GHC is `unsafeDupablePerformIO` which skips the extra locking.

--
brandon s allbery kf8nh                               sine nomine associates
allbery.b@gmail.com                                  ballbery@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net