X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Ftypecheck%2FTcDefaults.lhs;h=ef9ff7901a86187744d85492af22ae066cef56e6;hb=f3a5e6da3f50e6afdde52988bfabe6ea7b581ac1;hp=6067ea8934588e3738cfd7530a40b89beefd5657;hpb=ae969b4759e1914cb44bf126fc56e2e059d050dc;p=ghc-hetmet.git diff --git a/ghc/compiler/typecheck/TcDefaults.lhs b/ghc/compiler/typecheck/TcDefaults.lhs index 6067ea8..ef9ff79 100644 --- a/ghc/compiler/typecheck/TcDefaults.lhs +++ b/ghc/compiler/typecheck/TcDefaults.lhs @@ -4,19 +4,17 @@ \section[TcDefaults]{Typechecking \tr{default} declarations} \begin{code} -module TcDefaults ( tcDefaults, defaultDefaultTys ) where +module TcDefaults ( tcDefaults ) where #include "HsVersions.h" import HsSyn ( HsDecl(..), DefaultDecl(..) ) import RnHsSyn ( RenamedHsDecl ) -import TcMonad +import TcRnMonad import TcEnv ( tcLookupGlobal_maybe ) import TcMonoType ( tcHsType ) import TcSimplify ( tcSimplifyDefault ) - -import TysWiredIn ( integerTy, doubleTy ) import TcType ( Type, mkClassPred, isTauTy ) import PrelNames ( numClassName ) import Outputable @@ -24,24 +22,22 @@ import HscTypes ( TyThing(..) ) \end{code} \begin{code} -defaultDefaultTys = [integerTy, doubleTy] - tcDefaults :: [RenamedHsDecl] -> TcM [Type] -- defaulting types to heave -- into Tc monad for later use -- in Disambig. tcDefaults decls = tc_defaults [default_decl | DefD default_decl <- decls] -tc_defaults [] = returnTc defaultDefaultTys +tc_defaults [] = returnM defaultDefaultTys tc_defaults [DefaultDecl [] locn] - = returnTc [] -- no defaults + = returnM [] -- no defaults tc_defaults [DefaultDecl mono_tys locn] - = tcLookupGlobal_maybe numClassName `thenNF_Tc` \ maybe_num -> + = tcLookupGlobal_maybe numClassName `thenM` \ maybe_num -> case maybe_num of Just (AClass num_class) -> common_case num_class - other -> returnTc [] + other -> returnM [] -- In the Nothing case, Num has not been sucked in, so the -- defaults will never be used; so simply discard the default decl. -- This slightly benefits modules that don't use any @@ -49,25 +45,25 @@ tc_defaults [DefaultDecl mono_tys locn] -- always sucking in Num where common_case num_class - = tcAddSrcLoc locn $ - tcAddErrCtxt defaultDeclCtxt $ - mapTc tc_default_ty mono_tys `thenTc` \ tau_tys -> + = addSrcLoc locn $ + addErrCtxt defaultDeclCtxt $ + mappM tc_default_ty mono_tys `thenM` \ tau_tys -> -- Check that all the types are instances of Num -- We only care about whether it worked or not - tcSimplifyDefault [mkClassPred num_class [ty] | ty <- tau_tys] `thenTc_` + tcSimplifyDefault [mkClassPred num_class [ty] | ty <- tau_tys] `thenM_` - returnTc tau_tys + returnM tau_tys tc_defaults decls@(DefaultDecl _ loc : _) = - tcAddSrcLoc loc $ + addSrcLoc loc $ failWithTc (dupDefaultDeclErr decls) tc_default_ty hs_ty - = tcHsType hs_ty `thenTc` \ ty -> - checkTc (isTauTy ty) (polyDefErr hs_ty) `thenTc_` - returnTc ty + = tcHsType hs_ty `thenM` \ ty -> + checkTc (isTauTy ty) (polyDefErr hs_ty) `thenM_` + returnM ty defaultDeclCtxt = ptext SLIT("when checking that each type in a default declaration") $$ ptext SLIT("is an instance of class Num")