--- (c) The University of Glasgow 2002
+--
+-- (c) The University of Glasgow 2002-2006
--
-- The IO Monad with an environment
--
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
module IOEnv (
IOEnv, -- Instance of Monad
#include "HsVersions.h"
import Panic ( try, tryUser, tryMost, Exception(..) )
-import DATA_IOREF ( IORef, newIORef, readIORef, writeIORef )
-import UNSAFE_IO ( unsafeInterleaveIO )
-import FIX_IO ( fixIO )
+
+import Data.IORef ( IORef, newIORef, readIORef, writeIORef )
+import System.IO.Unsafe ( unsafeInterleaveIO )
+import System.IO ( fixIO )
----------------------------------------------------------------------
return = returnM
fail s = failM -- Ignore the string
+instance Functor (IOEnv m) where
+ fmap f (IOEnv m) = IOEnv (\ env -> fmap f (m env))
+
returnM :: a -> IOEnv env a
returnM a = IOEnv (\ env -> return a)