--- epic-0.9.3-orig/Epic/Language.lhs 2012-02-28 10:44:29.000000000 +1100 +++ epic-0.9.3/Epic/Language.lhs 2012-09-14 16:20:29.841939337 +1000 @@ -1,9 +1,14 @@ -> {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, +> {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, CPP, > FunctionalDependencies #-} > module Epic.Language where > import Control.Monad +#if MIN_VERSION_base(4,6,0) +> import Control.Exception.Base +#endif + + > import System.IO > import System.Directory > import System.Environment @@ -379,7 +384,13 @@ > environment :: String -> IO (Maybe String) > environment x = catch (do e <- getEnv x > return (Just e)) -> (\_ -> return Nothing) +#if MIN_VERSION_base(4,6,0) +> (\y-> do return (y::SomeException); return Nothing) +#endif +> +#if !MIN_VERSION_base(4,6,0) +> (\_-> return Nothing) +#endif Some tests --- epic-0.9.3-orig/Epic/CodegenC.lhs 2012-02-28 10:44:29.000000000 +1100 +++ epic-0.9.3/Epic/CodegenC.lhs 2012-09-14 16:13:48.061329048 +1000 @@ -1,3 +1,4 @@ +> {-#LANGUAGE FlexibleContexts#-} > module Epic.CodegenC where > import Control.Monad.State @@ -98,10 +99,11 @@ > if (x>max) then put x else return () > cgs [] = return "" + > cgs (x:xs) = do xc <- cg x > xsc <- cgs xs > return $ xc ++ "\n" ++ xsc - +> cg:: (MonadState Int m) => ByteOp -> m [Char] > cg (CALL t fn args) = return $ tmp t ++ " = " ++ quickcall fn ++ > targs "(" args ++ ");" > cg (TAILCALL t fn args)