Commit 4fef5c33 authored by simonpj's avatar simonpj
Browse files

[project @ 2003-10-22 16:25:42 by simonpj]

Do foralls right in the renamer
parent d283bfc1
......@@ -8,7 +8,8 @@ module HsTypes (
HsType(..), HsTyVarBndr(..), HsExplicitForAll(..),
, HsContext, HsPred(..)
, mkExplicitHsForAllTy, mkImplicitHsForAllTy, mkHsDictTy, mkHsIParamTy
, mkExplicitHsForAllTy, mkImplicitHsForAllTy,
, mkHsDictTy, mkHsIParamTy
, hsTyVarName, hsTyVarNames, replaceTyVarName
, splitHsInstDeclTy
......
......@@ -167,11 +167,22 @@ rnHsTypes doc tys = mappM (rnHsType doc) tys
\begin{code}
rnForAll doc exp [] [] ty = rnHsType doc ty
-- One reason for this case is that a type like Int#
-- starts of as (HsForAllTy Nothing [] Int), in case
-- there is some quantification. Now that we have quantified
-- and discovered there are no type variables, it's nicer to turn
-- it into plain Int. If it were Int# instead of Int, we'd actually
-- get an error, because the body of a genuine for-all is
-- of kind *.
rnForAll doc exp forall_tyvars ctxt ty
= bindTyVarsRn doc forall_tyvars $ \ new_tyvars ->
rnContext doc ctxt `thenM` \ new_ctxt ->
rnHsType doc ty `thenM` \ new_ty ->
returnM (HsForAllTy exp new_tyvars new_ctxt new_ty)
-- Retain the same implicit/explicit flag as before
-- so that we can later print it correctly
\end{code}
......
......@@ -218,6 +218,7 @@ kcTypeType ty
return ty'
else
newOpenTypeKind `thenM` \ type_kind ->
traceTc (text "kcTypeType" $$ nest 2 (ppr ty $$ ppr ty' $$ ppr kind $$ ppr type_kind)) `thenM_`
checkExpectedKind (ppr ty) kind type_kind `thenM_`
returnM ty'
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment