diff options
author | simonpj <unknown> | 2001-03-13 14:58:28 +0000 |
---|---|---|
committer | simonpj <unknown> | 2001-03-13 14:58:28 +0000 |
commit | 788faebb40b51d37e73ed94dfc99460d39a1a811 (patch) | |
tree | 5aed135958315fcb297c1c4908440775fdbdf1ad /ghc/compiler/parser | |
parent | 6a44ce76861d73d59badc8f8c17ffbd52eff17ba (diff) | |
download | haskell-788faebb40b51d37e73ed94dfc99460d39a1a811.tar.gz |
[project @ 2001-03-13 14:58:25 by simonpj]
----------------
Nuke ClassContext
----------------
This commit tidies up a long-standing inconsistency in GHC.
The context of a class or instance decl used to be restricted
to predicates of the form
C t1 .. tn
with
type ClassContext = [(Class,[Type])]
but everywhere else in the compiler we used
type ThetaType = [PredType]
where PredType can be any sort of constraint (= predicate).
The inconsistency actually led to a crash, when compiling
class (?x::Int) => C a where {}
I've tidied all this up by nuking ClassContext altogether, and using
PredType throughout. Lots of modified files, but all in
more-or-less trivial ways.
I've also added a check that the context of a class or instance
decl doesn't include a non-inheritable predicate like (?x::Int).
Other things
* rename constructor 'Class' from type TypeRep.Pred to 'ClassP'
(makes it easier to grep for)
* rename constructor HsPClass => HsClassP
HsPIParam => HsIParam
Diffstat (limited to 'ghc/compiler/parser')
-rw-r--r-- | ghc/compiler/parser/ParseUtil.lhs | 4 | ||||
-rw-r--r-- | ghc/compiler/parser/RdrHsSyn.lhs | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/ghc/compiler/parser/ParseUtil.lhs b/ghc/compiler/parser/ParseUtil.lhs index d0d34197ea..969ca93c71 100644 --- a/ghc/compiler/parser/ParseUtil.lhs +++ b/ghc/compiler/parser/ParseUtil.lhs @@ -130,9 +130,9 @@ checkContext t checkPred :: RdrNameHsType -> [RdrNameHsType] -> P (HsPred RdrName) checkPred (HsTyVar t) args@(_:_) | not (isRdrTyVar t) - = returnP (HsPClass t args) + = returnP (HsClassP t args) checkPred (HsAppTy l r) args = checkPred l (r:args) -checkPred (HsPredTy (HsPIParam n ty)) [] = returnP (HsPIParam n ty) +checkPred (HsPredTy (HsIParam n ty)) [] = returnP (HsIParam n ty) checkPred _ _ = parseError "Illegal class assertion" checkDictTy :: RdrNameHsType -> [RdrNameHsType] -> P RdrNameHsType diff --git a/ghc/compiler/parser/RdrHsSyn.lhs b/ghc/compiler/parser/RdrHsSyn.lhs index 1dd7c0035a..ea3414769e 100644 --- a/ghc/compiler/parser/RdrHsSyn.lhs +++ b/ghc/compiler/parser/RdrHsSyn.lhs @@ -149,8 +149,8 @@ extractHsCtxtRdrTyVars ty = filter isRdrTyVar (extractHsCtxtRdrNames ty) extract_ctxt ctxt acc = foldr extract_pred acc ctxt -extract_pred (HsPClass cls tys) acc = foldr extract_ty (cls : acc) tys -extract_pred (HsPIParam n ty) acc = extract_ty ty acc +extract_pred (HsClassP cls tys) acc = foldr extract_ty (cls : acc) tys +extract_pred (HsIParam n ty) acc = extract_ty ty acc extract_tys tys = foldr extract_ty [] tys |