-module RnHsSyn(
- -- Names
- charTyCon_name, listTyCon_name, parrTyCon_name, tupleTyCon_name,
- extractHsTyVars, extractHsTyNames, extractHsTyNames_s,
- extractFunDepNames, extractHsCtxtTyNames, extractHsPredTyNames,
-
- -- Free variables
- hsSigsFVs, hsSigFVs, conDeclFVs, bangTyFVs,
-
- maybeGenericMatch
+module RnHsSyn(
+ -- Names
+ charTyCon_name, listTyCon_name, parrTyCon_name, tupleTyCon_name,
+ extractHsTyVars, extractHsTyNames, extractHsTyNames_s,
+ extractFunDepNames, extractHsCtxtTyNames, extractHsPredTyNames,
+
+ -- Free variables
+ hsSigsFVs, hsSigFVs, conDeclFVs, bangTyFVs,
+
+ maybeGenericMatch
-import Class ( FunDep )
-import TysWiredIn ( tupleTyCon, listTyCon, parrTyCon, charTyCon )
-import Name ( Name, getName, isTyVarName )
+import Class ( FunDep )
+import TysWiredIn ( tupleTyCon, listTyCon, parrTyCon, charTyCon )
+import Name ( Name, getName, isTyVarName )
-import BasicTypes ( Boxity )
-import SrcLoc ( Located(..), unLoc )
+import BasicTypes ( Boxity )
+import SrcLoc ( Located(..), unLoc )
%************************************************************************
These free-variable finders returns tycons and classes too.
%************************************************************************
These free-variable finders returns tycons and classes too.
get (HsAppTy ty1 ty2) = getl ty1 `unionNameSets` getl ty2
get (HsListTy ty) = unitNameSet listTyCon_name `unionNameSets` getl ty
get (HsPArrTy ty) = unitNameSet parrTyCon_name `unionNameSets` getl ty
get (HsAppTy ty1 ty2) = getl ty1 `unionNameSets` getl ty2
get (HsListTy ty) = unitNameSet listTyCon_name `unionNameSets` getl ty
get (HsPArrTy ty) = unitNameSet parrTyCon_name `unionNameSets` getl ty
get (HsOpTy ty1 op ty2) = getl ty1 `unionNameSets` getl ty2 `unionNameSets` unitNameSet (unLoc op)
get (HsParTy ty) = getl ty
get (HsBangTy _ ty) = getl ty
get (HsOpTy ty1 op ty2) = getl ty1 `unionNameSets` getl ty2 `unionNameSets` unitNameSet (unLoc op)
get (HsParTy ty) = getl ty
get (HsBangTy _ ty) = getl ty
- get (HsNumTy n) = emptyNameSet
- get (HsTyVar tv) = unitNameSet tv
- get (HsSpliceTy _) = emptyNameSet -- Type splices mention no type variables
- get (HsKindSig ty k) = getl ty
- get (HsForAllTy _ tvs
- ctxt ty) = (extractHsCtxtTyNames ctxt
- `unionNameSets` getl ty)
- `minusNameSet`
- mkNameSet (hsLTyVarNames tvs)
+ get (HsNumTy _) = emptyNameSet
+ get (HsTyVar tv) = unitNameSet tv
+ get (HsSpliceTy _) = emptyNameSet -- Type splices mention no type variables
+ get (HsKindSig ty _) = getl ty
+ get (HsForAllTy _ tvs
+ ctxt ty) = (extractHsCtxtTyNames ctxt
+ `unionNameSets` getl ty)
+ `minusNameSet`
+ mkNameSet (hsLTyVarNames tvs)
-- You don't import or export implicit parameters,
-- so don't mention the IP names
-- You don't import or export implicit parameters,
-- so don't mention the IP names
%************************************************************************
Return the Names that must be in scope if we are to use this declaration.
In all cases this is set up for interface-file declarations:
%************************************************************************
Return the Names that must be in scope if we are to use this declaration.
In all cases this is set up for interface-file declarations:
- - for class decls we ignore the bindings
- - for instance decls likewise, plus the pragmas
- - for rule decls, we ignore HsRules
+ - for class decls we ignore the bindings
+ - for instance decls likewise, plus the pragmas
+ - for rule decls, we ignore HsRules
-hsSigFVs (TypeSig v ty) = extractHsTyNames ty
-hsSigFVs (SpecInstSig ty) = extractHsTyNames ty
-hsSigFVs (SpecSig v ty inl) = extractHsTyNames ty
-hsSigFVs other = emptyFVs
+hsSigFVs :: Sig Name -> FreeVars
+hsSigFVs (TypeSig _ ty) = extractHsTyNames ty
+hsSigFVs (SpecInstSig ty) = extractHsTyNames ty
+hsSigFVs (SpecSig _ ty _) = extractHsTyNames ty
+hsSigFVs _ = emptyFVs
-conDeclFVs (L _ (ConDecl { con_qvars = tyvars, con_cxt = context,
- con_details = details, con_res = res_ty}))
+conDeclFVs :: LConDecl Name -> FreeVars
+conDeclFVs (L _ (ConDecl { con_qvars = tyvars, con_cxt = context,
+ con_details = details, con_res = res_ty}))
-conDetailsFVs (PrefixCon btys) = plusFVs (map bangTyFVs btys)
-conDetailsFVs (InfixCon bty1 bty2) = bangTyFVs bty1 `plusFV` bangTyFVs bty2
-conDetailsFVs (RecCon flds) = plusFVs [bangTyFVs bty | (HsRecField _ bty _) <- flds]
+conDetailsFVs :: HsConDeclDetails Name -> FreeVars
+conDetailsFVs details = plusFVs (map bangTyFVs (hsConDeclArgTys details))
bangTyFVs bty = extractHsTyNames (getBangType bty)
\end{code}
%************************************************************************
bangTyFVs bty = extractHsTyNames (getBangType bty)
\end{code}
%************************************************************************
%************************************************************************
These functions on generics are defined over Matches Name, which is
%************************************************************************
These functions on generics are defined over Matches Name, which is
maybeGenericMatch (L loc (Match (L _ (TypePat (L _ ty)) : pats) sig_ty grhss))
= Just (ty, L loc (Match pats sig_ty grhss))
maybeGenericMatch (L loc (Match (L _ (TypePat (L _ ty)) : pats) sig_ty grhss))
= Just (ty, L loc (Match pats sig_ty grhss))