X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FdeSugar%2FDsMonad.lhs;h=2cab8bedebbf5d486c09a124ed2a83d1f27da7b7;hb=8ded597b532eda747b5d911e6991cdb0013f77a1;hp=279416d8cc2bcffefc6205d24275fadc29d27d5e;hpb=6a05ec5ef5373f61b7f9f5bdc344483417fa801b;p=ghc-hetmet.git diff --git a/compiler/deSugar/DsMonad.lhs b/compiler/deSugar/DsMonad.lhs index 279416d..2cab8be 100644 --- a/compiler/deSugar/DsMonad.lhs +++ b/compiler/deSugar/DsMonad.lhs @@ -14,9 +14,10 @@ -- for details module DsMonad ( - DsM, mappM, mapAndUnzipM, - initDs, initDsTc, returnDs, thenDs, listDs, fixDs, mapAndUnzipDs, - foldlDs, foldrDs, ifOptDs, + DsM, mapM, mapAndUnzipM, + initDs, initDsTc, fixDs, mapAndUnzipM, + foldlM, foldrM, ifOptM, + Applicative(..),(<$>), newTyVarsDs, newLocalName, duplicateLocalDs, newSysLocalDs, newSysLocalsDs, newUniqueId, @@ -64,10 +65,9 @@ import NameEnv import OccName import DynFlags import ErrUtils +import MonadUtils import Data.IORef - -infixr 9 `thenDs` \end{code} %************************************************************************ @@ -124,13 +124,6 @@ type DsM result = TcRnIf DsGblEnv DsLclEnv result -- Compatibility functions fixDs = fixM -thenDs = thenM -returnDs = returnM -listDs = sequenceM -foldlDs = foldlM -foldrDs = foldrM -mapAndUnzipDs = mapAndUnzipM -ifOptDs = ifOptM type DsWarning = (SrcSpan, SDoc) -- Not quite the same as a WarnMsg, we have an SDoc here @@ -199,7 +192,7 @@ initDsTc thing_inside ; dflags <- getDOpts ; let type_env = tcg_type_env tcg_env rdr_env = tcg_rdr_env tcg_env - ; ds_envs <- ioToIOEnv$ mkDsEnvs dflags this_mod rdr_env type_env msg_var + ; ds_envs <- liftIO $ mkDsEnvs dflags this_mod rdr_env type_env msg_var ; setEnvs ds_envs thing_inside } mkDsEnvs :: DynFlags -> Module -> GlobalRdrEnv -> TypeEnv -> IORef Messages -> IO (DsGblEnv, DsLclEnv) @@ -233,33 +226,33 @@ 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 - = newUnique `thenDs` \ uniq -> - returnDs (mkSysLocal (occNameFS (nameOccName id)) uniq ty) +newUniqueId id ty = do + uniq <- newUnique + return (mkSysLocal (occNameFS (nameOccName id)) uniq ty) duplicateLocalDs :: Id -> DsM Id -duplicateLocalDs old_local - = newUnique `thenDs` \ uniq -> - returnDs (setIdUnique old_local uniq) +duplicateLocalDs old_local = do + uniq <- newUnique + return (setIdUnique old_local uniq) newSysLocalDs, newFailLocalDs :: Type -> DsM Id -newSysLocalDs ty - = newUnique `thenDs` \ uniq -> - returnDs (mkSysLocal FSLIT("ds") uniq ty) +newSysLocalDs ty = do + uniq <- newUnique + return (mkSysLocal FSLIT("ds") uniq ty) -newSysLocalsDs tys = mappM newSysLocalDs tys +newSysLocalsDs tys = mapM newSysLocalDs tys -newFailLocalDs ty - = newUnique `thenDs` \ uniq -> - returnDs (mkSysLocal FSLIT("fail") uniq ty) +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 - = newUniqueSupply `thenDs` \ uniqs -> - returnDs (zipWith setTyVarUnique tyvar_tmpls (uniqsFromSupply uniqs)) +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 @@ -312,23 +305,19 @@ dsLookupGlobal name dsLookupGlobalId :: Name -> DsM Id dsLookupGlobalId name - = dsLookupGlobal name `thenDs` \ thing -> - returnDs (tyThingId thing) + = tyThingId <$> dsLookupGlobal name dsLookupTyCon :: Name -> DsM TyCon dsLookupTyCon name - = dsLookupGlobal name `thenDs` \ thing -> - returnDs (tyThingTyCon thing) + = tyThingTyCon <$> dsLookupGlobal name dsLookupDataCon :: Name -> DsM DataCon dsLookupDataCon name - = dsLookupGlobal name `thenDs` \ thing -> - returnDs (tyThingDataCon thing) + = tyThingDataCon <$> dsLookupGlobal name dsLookupClass :: Name -> DsM Class dsLookupClass name - = dsLookupGlobal name `thenDs` \ thing -> - returnDs (tyThingClass thing) + = tyThingClass <$> dsLookupGlobal name \end{code} \begin{code}