Small refactor of TcMType.tauifyExpType
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 30 Mar 2016 16:19:51 +0000 (17:19 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 31 Mar 2016 07:04:07 +0000 (08:04 +0100)
Mainly to make it clearer that tauifyExpType
is a no-op on (Check ty)

compiler/typecheck/TcMType.hs

index cb9ed72..296f88c 100644 (file)
@@ -393,14 +393,18 @@ checkingExpType err et         = pprPanic "checkingExpType" (text err $$ ppr et)
 tauifyExpType :: ExpType -> TcM ExpType
 -- ^ Turn a (Infer hole) type into a (Check alpha),
 -- where alpha is a fresh unificaiton variable
-tauifyExpType exp_ty = do { ty <- expTypeToType exp_ty
-                          ; return (Check ty) }
+tauifyExpType (Check ty)              = return (Check ty)  -- No-op for (Check ty)
+tauifyExpType (Infer u tc_lvl ki ref) = do { ty <- inferTypeToType u tc_lvl ki ref
+                                           ; return (Check ty) }
 
 -- | Extracts the expected type if there is one, or generates a new
 -- TauTv if there isn't.
 expTypeToType :: ExpType -> TcM TcType
-expTypeToType (Check ty) = return ty
-expTypeToType (Infer u tc_lvl ki ref)
+expTypeToType (Check ty)              = return ty
+expTypeToType (Infer u tc_lvl ki ref) = inferTypeToType u tc_lvl ki ref
+
+inferTypeToType :: Unique -> TcLevel -> Kind -> IORef (Maybe TcType) -> TcM Type
+inferTypeToType u tc_lvl ki ref
   = do { uniq <- newUnique
        ; tv_ref <- newMutVar Flexi
        ; let details = MetaTv { mtv_info = TauTv