+
+tc_expr' expr rho_ty -- Monomorphic case
+ = tcCheckRho expr rho_ty
+\end{code}
+
+Typecheck expression which in most cases will be an Id.
+The expression can return a higher-ranked type, such as
+ (forall a. a->a) -> Int
+so we must create a hole to pass in as the expected tyvar.
+
+\begin{code}
+tcCheckRho :: RenamedHsExpr -> TcRhoType -> TcM TcExpr
+tcCheckRho expr rho_ty = tcMonoExpr expr (Check rho_ty)
+
+tcInferRho :: RenamedHsExpr -> TcM (TcExpr, TcRhoType)
+tcInferRho (HsVar name) = tcId name
+tcInferRho expr = newHole `thenM` \ hole ->
+ tcMonoExpr expr (Infer hole) `thenM` \ expr' ->
+ readMutVar hole `thenM` \ rho_ty ->
+ returnM (expr', rho_ty)