Spelling error in comment
[ghc-hetmet.git] / compiler / deSugar / DsMonad.lhs
index 10cd28a..145ba9e 100644 (file)
@@ -12,7 +12,7 @@ module DsMonad (
        foldlM, foldrM, ifOptM,
        Applicative(..),(<$>),
 
-       newTyVarsDs, newLocalName,
+       newLocalName,
        duplicateLocalDs, newSysLocalDs, newSysLocalsDs, newUniqueId,
        newFailLocalDs,
        getSrcSpanDs, putSrcSpanDs,
@@ -34,8 +34,6 @@ module DsMonad (
        CanItFail(..), orFail
     ) where
 
-#include "HsVersions.h"
-
 import TcRnMonad
 import CoreSyn
 import HsSyn
@@ -80,6 +78,9 @@ data EquationInfo
   = EqnInfo { eqn_pats :: [Pat Id],            -- The patterns for an eqn
              eqn_rhs  :: MatchResult } -- What to do after match
 
+instance Outputable EquationInfo where
+    ppr (EqnInfo pats _) = ppr pats
+
 type DsWrapper = CoreExpr -> CoreExpr
 idDsWrapper :: DsWrapper
 idDsWrapper e = e
@@ -155,7 +156,7 @@ data DsMetaVal
 initDs  :: HscEnv
        -> Module -> GlobalRdrEnv -> TypeEnv
        -> DsM a
-       -> IO (Maybe a)
+       -> IO (Messages, Maybe a)
 -- Print errors and warnings, if any arise
 
 initDs hsc_env mod rdr_env type_env thing_inside
@@ -169,7 +170,6 @@ initDs hsc_env mod rdr_env type_env thing_inside
        -- Display any errors and warnings 
        -- Note: if -Werror is used, we don't signal an error here.
        ; msgs <- readIORef msg_var
-        ; printErrorsAndWarnings dflags msgs 
 
        ; let final_res | errorsFound dflags msgs = Nothing
                        | otherwise = case either_res of
@@ -179,7 +179,7 @@ initDs hsc_env mod rdr_env type_env thing_inside
                -- a UserError exception.  Then it should have put an error
                -- message in msg_var, so we just discard the exception
 
-       ; return final_res }
+       ; return (msgs, final_res) }
 
 initDsTc :: DsM a -> TcM a
 initDsTc thing_inside
@@ -196,7 +196,7 @@ mkDsEnvs :: DynFlags -> Module -> GlobalRdrEnv -> TypeEnv -> IORef Messages -> I
 mkDsEnvs dflags mod rdr_env type_env msg_var
   = do -- TODO: unnecessarily monadic
        let     if_genv = IfGblEnv { if_rec_types = Just (mod, return type_env) }
-               if_lenv = mkIfLclEnv mod (ptext SLIT("GHC error in desugarer lookup in") <+> ppr mod)
+               if_lenv = mkIfLclEnv mod (ptext (sLit "GHC error in desugarer lookup in") <+> ppr mod)
                gbl_env = DsGblEnv { ds_mod = mod, 
                                    ds_if_env = (if_genv, if_lenv),
                                    ds_unqual = mkPrintUnqualified dflags rdr_env,
@@ -205,7 +205,6 @@ mkDsEnvs dflags mod rdr_env type_env msg_var
                                    ds_loc = noSrcSpan }
 
        return (gbl_env, lcl_env)
-
 \end{code}
 
 %************************************************************************
@@ -222,9 +221,7 @@ it easier to read debugging output.
 \begin{code}
 -- Make a new Id with the same print name, but different type, and new unique
 newUniqueId :: Name -> Type -> DsM Id
-newUniqueId id ty = do
-    uniq <- newUnique
-    return (mkSysLocal (occNameFS (nameOccName id)) uniq ty)
+newUniqueId id = mkSysLocalM (occNameFS (nameOccName id))
 
 duplicateLocalDs :: Id -> DsM Id
 duplicateLocalDs old_local = do
@@ -232,24 +229,11 @@ duplicateLocalDs old_local = do
     return (setIdUnique old_local uniq)
 
 newSysLocalDs, newFailLocalDs :: Type -> DsM Id
-newSysLocalDs ty = do
-    uniq <- newUnique
-    return (mkSysLocal FSLIT("ds") uniq ty)
+newSysLocalDs = mkSysLocalM (fsLit "ds")
+newFailLocalDs = mkSysLocalM (fsLit "fail")
 
 newSysLocalsDs :: [Type] -> DsM [Id]
 newSysLocalsDs tys = mapM newSysLocalDs tys
-
-newFailLocalDs ty = do
-    uniq <- newUnique
-    return (mkSysLocal FSLIT("fail") uniq ty)
-       -- The UserLocal bit just helps make the code a little clearer
-\end{code}
-
-\begin{code}
-newTyVarsDs :: [TyVar] -> DsM [TyVar]
-newTyVarsDs tyvar_tmpls = do
-    uniqs <- newUniqueSupply
-    return (zipWith setTyVarUnique tyvar_tmpls (uniqsFromSupply uniqs))
 \end{code}
 
 We can also reach out and either set/grab location information from
@@ -278,9 +262,8 @@ warnDs :: SDoc -> DsM ()
 warnDs warn = do { env <- getGblEnv 
                 ; loc <- getSrcSpanDs
                 ; let msg = mkWarnMsg loc (ds_unqual env) 
-                                     (ptext SLIT("Warning:") <+> warn)
+                                     (ptext (sLit "Warning:") <+> warn)
                 ; updMutVar (ds_msgs env) (\ (w,e) -> (w `snocBag` msg, e)) }
-           where
 
 failWithDs :: SDoc -> DsM a
 failWithDs err 
@@ -289,10 +272,12 @@ failWithDs err
        ; let msg = mkErrMsg loc (ds_unqual env) err
        ; updMutVar (ds_msgs env) (\ (w,e) -> (w, e `snocBag` msg))
        ; failM }
-       where
 \end{code}
 
 \begin{code}
+instance MonadThings (IOEnv (Env DsGblEnv DsLclEnv)) where
+    lookupThing = dsLookupGlobal
+
 dsLookupGlobal :: Name -> DsM TyThing
 -- Very like TcEnv.tcLookupGlobal
 dsLookupGlobal name