X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Futils%2FIOEnv.hs;h=0cad752892919cba4faea99d3eeb918a670c3092;hb=befdf6ad2c5ede7a30f2aa31eeb506562928fbe0;hp=ba98b086918d808e392f7ce48f0767270d93c506;hpb=9f4823a4807bada2e95bab6cbb058f29cbec2013;p=ghc-hetmet.git diff --git a/compiler/utils/IOEnv.hs b/compiler/utils/IOEnv.hs index ba98b08..0cad752 100644 --- a/compiler/utils/IOEnv.hs +++ b/compiler/utils/IOEnv.hs @@ -23,7 +23,8 @@ module IOEnv ( IORef, newMutVar, readMutVar, writeMutVar, updMutVar ) where -import Panic ( try, tryUser, tryMost, Exception(..) ) +import Exception +import Panic import Data.IORef ( IORef, newIORef, readIORef, writeIORef, modifyIORef ) import System.IO.Unsafe ( unsafeInterleaveIO ) @@ -94,7 +95,11 @@ fixM f = IOEnv (\ env -> fixIO (\ r -> unIOEnv (f r) env)) --------------------------- +#if __GLASGOW_HASKELL__ < 609 tryM :: IOEnv env r -> IOEnv env (Either Exception r) +#else +tryM :: IOEnv env r -> IOEnv env (Either ErrorCall r) +#endif -- Reflect UserError exceptions (only) into IOEnv monad -- Other exceptions are not caught; they are simply propagated as exns -- @@ -104,13 +109,14 @@ tryM :: IOEnv env r -> IOEnv env (Either Exception r) -- begin compiled! tryM (IOEnv thing) = IOEnv (\ env -> tryUser (thing env)) -tryAllM :: IOEnv env r -> IOEnv env (Either Exception r) +-- XXX We shouldn't be catching everything, e.g. timeouts +tryAllM :: IOEnv env r -> IOEnv env (Either SomeException r) -- Catch *all* exceptions -- This is used when running a Template-Haskell splice, when -- even a pattern-match failure is a programmer error tryAllM (IOEnv thing) = IOEnv (\ env -> try (thing env)) -tryMostM :: IOEnv env r -> IOEnv env (Either Exception r) +tryMostM :: IOEnv env r -> IOEnv env (Either SomeException r) tryMostM (IOEnv thing) = IOEnv (\ env -> tryMost (thing env)) --------------------------- @@ -162,17 +168,17 @@ updEnv upd (IOEnv m) = IOEnv (\ env -> m (upd env)) -- (for efficiency) ---------------------------------------------------------------------- -{-# -- SPECIALIZE mapM :: (a -> IOEnv env b) -> [a] -> IOEnv env [b] #-} -{-# -- SPECIALIZE mapM_ :: (a -> IOEnv env b) -> [a] -> IOEnv env () #-} -{-# -- SPECIALIZE mapSndM :: (b -> IOEnv env c) -> [(a,b)] -> IOEnv env [(a,c)] #-} -{-# -- SPECIALIZE sequence :: [IOEnv env a] -> IOEnv env [a] #-} -{-# -- SPECIALIZE sequence_ :: [IOEnv env a] -> IOEnv env () #-} -{-# -- SPECIALIZE foldlM :: (a -> b -> IOEnv env a) -> a -> [b] -> IOEnv env a #-} -{-# -- SPECIALIZE foldrM :: (b -> a -> IOEnv env a) -> a -> [b] -> IOEnv env a #-} -{-# -- SPECIALIZE mapAndUnzipM :: (a -> IOEnv env (b,c)) -> [a] -> IOEnv env ([b],[c]) #-} -{-# -- SPECIALIZE mapAndUnzip3M :: (a -> IOEnv env (b,c,d)) -> [a] -> IOEnv env ([b],[c],[d]) #-} -{-# -- SPECIALIZE zipWithM :: (a -> b -> IOEnv env c) -> [a] -> [b] -> IOEnv env [c] #-} -{-# -- SPECIALIZE zipWithM_ :: (a -> b -> IOEnv env c) -> [a] -> [b] -> IOEnv env () #-} -{-# -- SPECIALIZE anyM :: (a -> IOEnv env Bool) -> [a] -> IOEnv env Bool #-} -{-# -- SPECIALIZE when :: Bool -> IOEnv env a -> IOEnv env () #-} -{-# -- SPECIALIZE unless :: Bool -> IOEnv env a -> IOEnv env () #-} +-- {-# SPECIALIZE mapM :: (a -> IOEnv env b) -> [a] -> IOEnv env [b] #-} +-- {-# SPECIALIZE mapM_ :: (a -> IOEnv env b) -> [a] -> IOEnv env () #-} +-- {-# SPECIALIZE mapSndM :: (b -> IOEnv env c) -> [(a,b)] -> IOEnv env [(a,c)] #-} +-- {-# SPECIALIZE sequence :: [IOEnv env a] -> IOEnv env [a] #-} +-- {-# SPECIALIZE sequence_ :: [IOEnv env a] -> IOEnv env () #-} +-- {-# SPECIALIZE foldlM :: (a -> b -> IOEnv env a) -> a -> [b] -> IOEnv env a #-} +-- {-# SPECIALIZE foldrM :: (b -> a -> IOEnv env a) -> a -> [b] -> IOEnv env a #-} +-- {-# SPECIALIZE mapAndUnzipM :: (a -> IOEnv env (b,c)) -> [a] -> IOEnv env ([b],[c]) #-} +-- {-# SPECIALIZE mapAndUnzip3M :: (a -> IOEnv env (b,c,d)) -> [a] -> IOEnv env ([b],[c],[d]) #-} +-- {-# SPECIALIZE zipWithM :: (a -> b -> IOEnv env c) -> [a] -> [b] -> IOEnv env [c] #-} +-- {-# SPECIALIZE zipWithM_ :: (a -> b -> IOEnv env c) -> [a] -> [b] -> IOEnv env () #-} +-- {-# SPECIALIZE anyM :: (a -> IOEnv env Bool) -> [a] -> IOEnv env Bool #-} +-- {-# SPECIALIZE when :: Bool -> IOEnv env a -> IOEnv env () #-} +-- {-# SPECIALIZE unless :: Bool -> IOEnv env a -> IOEnv env () #-}