fix for compiling the base package with --make
[ghc-hetmet.git] / ghc / compiler / hsSyn / HsTypes.lhs
index 8ad5940..f1343a3 100644 (file)
@@ -1,4 +1,4 @@
-]%
+%
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
 \section[HsTypes]{Abstract syntax: user-defined types}
@@ -177,10 +177,14 @@ mkHsForAllTy exp tvs (L _ []) ty = mk_forall_ty exp tvs ty
 mkHsForAllTy exp tvs ctxt ty = HsForAllTy exp tvs ctxt ty
 
 -- mk_forall_ty makes a pure for-all type (no context)
-mk_forall_ty Explicit [] ty                          = unLoc ty        -- Explicit for-all with no tyvars
-mk_forall_ty exp  tvs  (L _ (HsParTy ty))                    = mk_forall_ty exp tvs ty
+mk_forall_ty exp  tvs  (L _ (HsParTy ty))                  = mk_forall_ty exp tvs ty
 mk_forall_ty exp1 tvs1 (L _ (HsForAllTy exp2 tvs2 ctxt ty)) = mkHsForAllTy (exp1 `plus` exp2) (tvs1 ++ tvs2) ctxt ty
-mk_forall_ty exp  tvs  ty                            = HsForAllTy exp tvs (L noSrcSpan []) ty
+mk_forall_ty exp  tvs  ty                                  = HsForAllTy exp tvs (L noSrcSpan []) ty
+       -- Even if tvs is empty, we still make a HsForAll!
+       -- In the Implicit case, this signals the place to do implicit quantification
+       -- In the Explicit case, it prevents implicit quantification    
+       --      (see the sigtype production in Parser.y.pp)
+       --      so that (forall. ty) isn't implicitly quantified
 
 Implicit `plus` Implicit = Implicit
 exp1     `plus` exp2     = Explicit
@@ -237,11 +241,14 @@ splitHsInstDeclTy inst_ty
     split_tau tvs cxt (HsParTy (L _ ty))           = split_tau tvs cxt ty
 
 -- Splits HsType into the (init, last) parts
+-- Breaks up any parens in the result type: 
+--     splitHsFunType (a -> (b -> c)) = ([a,b], c)
 splitHsFunType :: LHsType name -> ([LHsType name], LHsType name)
 splitHsFunType (L l (HsFunTy x y)) = (x:args, res)
   where
   (args, res) = splitHsFunType y
-splitHsFunType other = ([], other)
+splitHsFunType (L _ (HsParTy ty))  = splitHsFunType ty
+splitHsFunType other              = ([], other)
 \end{code}