{-# LANGUAGE RankNTypes #-} -- | This module export only the @NewRef@ instance for @IO@ which does not fulfil the @NewRef@ laws in a multi-threaded environment. module Control.MLens.NewRef.Unsafe () where import Data.IORef import Data.MLens import Control.MLens.NewRef -- | Note that this instance does not fulfil the @NewRef@ laws in a multi-threaded environment. instance NewRef IO where newRef x = do r <- newIORef x return $ MLens $ \unit -> do x <- readIORef r return (x, \y -> writeIORef r y >> return unit)