X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FdeSugar%2FDsMonad.lhs;h=e275cb91e001d8e6135b9c6742a76808733d00fb;hb=8ee215b9aa2fe37b435e404aad8bb07c6ce1836d;hp=145ba9e37129b11d06594d343a6ec23e94c4ec83;hpb=3b2cd7b311da1e7056ef66b42efc2571add5a8aa;p=ghc-hetmet.git diff --git a/compiler/deSugar/DsMonad.lhs b/compiler/deSugar/DsMonad.lhs index 145ba9e..e275cb9 100644 --- a/compiler/deSugar/DsMonad.lhs +++ b/compiler/deSugar/DsMonad.lhs @@ -14,7 +14,7 @@ module DsMonad ( newLocalName, duplicateLocalDs, newSysLocalDs, newSysLocalsDs, newUniqueId, - newFailLocalDs, + newFailLocalDs, newPredVarDs, getSrcSpanDs, putSrcSpanDs, getModuleDs, newUnique, @@ -53,10 +53,8 @@ import Type import UniqSupply import Name import NameEnv -import OccName import DynFlags import ErrUtils -import MonadUtils import FastString import Data.IORef @@ -224,12 +222,22 @@ newUniqueId :: Name -> Type -> DsM Id newUniqueId id = mkSysLocalM (occNameFS (nameOccName id)) duplicateLocalDs :: Id -> DsM Id -duplicateLocalDs old_local = do - uniq <- newUnique - return (setIdUnique old_local uniq) - +duplicateLocalDs old_local + = do { uniq <- newUnique + ; return (setIdUnique old_local uniq) } + +newPredVarDs :: PredType -> DsM Var +newPredVarDs pred + | isEqPred pred + = do { uniq <- newUnique; + ; let name = mkSystemName uniq (mkOccNameFS tcName (fsLit "co_pv")) + kind = mkPredTy pred + ; return (mkCoVar name kind) } + | otherwise + = newSysLocalDs (mkPredTy pred) + newSysLocalDs, newFailLocalDs :: Type -> DsM Id -newSysLocalDs = mkSysLocalM (fsLit "ds") +newSysLocalDs = mkSysLocalM (fsLit "ds") newFailLocalDs = mkSysLocalM (fsLit "fail") newSysLocalsDs :: [Type] -> DsM [Id]