- returnRn (MonoTyApp ty1' ty2', fvs1 `plusFV` fvs2)
-
-rnHsType doc (MonoDictTy clas tys)
- = lookupOccRn clas `thenRn` \ clas' ->
- rnHsTypes doc tys `thenRn` \ (tys', fvs) ->
- returnRn (MonoDictTy clas' tys', fvs `addOneFV` clas')
-
-rnHsType doc (MonoUsgTy usg ty)
- = rnHsType doc ty `thenRn` \ (ty', fvs) ->
- returnRn (MonoUsgTy usg ty', fvs)
+ returnRn (HsAppTy ty1' ty2', fvs1 `plusFV` fvs2)
+
+rnHsType doc (HsPredTy pred)
+ = rnPred doc pred `thenRn` \ (pred', fvs) ->
+ returnRn (HsPredTy pred', fvs)
+
+rnHsType doc (HsUsgForAllTy uv_rdr ty)
+ = bindUVarRn doc uv_rdr $ \ uv_name ->
+ rnHsType doc ty `thenRn` \ (ty', fvs) ->
+ returnRn (HsUsgForAllTy uv_name ty',
+ fvs )
+
+rnHsType doc (HsUsgTy usg ty)
+ = newUsg usg `thenRn` \ (usg', usg_fvs) ->
+ rnHsType doc ty `thenRn` \ (ty', ty_fvs) ->
+ -- A for-all can occur inside a usage annotation
+ returnRn (HsUsgTy usg' ty',
+ usg_fvs `plusFV` ty_fvs)
+ where
+ newUsg usg = case usg of
+ HsUsOnce -> returnRn (HsUsOnce, emptyFVs)
+ HsUsMany -> returnRn (HsUsMany, emptyFVs)
+ HsUsVar uv_rdr -> lookupOccRn uv_rdr `thenRn` \ uv_name ->
+ returnRn (HsUsVar uv_name, emptyFVs)