X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FhsSyn%2FHsBinds.lhs;h=b4dc5b29cf007d573786dc7d9140b1ce6e991efb;hb=f16dbbbe59cf3aa19c5fd384560a1b89076d7bc8;hp=06a7bcc5c24ba21faa9818afa507854fd73340af;hpb=5dfc668a4e4b115904c7750eea075c35a433fec3;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsBinds.lhs b/compiler/hsSyn/HsBinds.lhs index 06a7bcc..b4dc5b2 100644 --- a/compiler/hsSyn/HsBinds.lhs +++ b/compiler/hsSyn/HsBinds.lhs @@ -86,7 +86,7 @@ data HsBindLR idL idR -- Reason 1: Special case for type inference: see TcBinds.tcMonoBinds -- -- Reason 2: instance decls can only have FunBinds, which is convenient --- If you change this, you'll need tochange e.g. rnMethodBinds +-- If you change this, you'll need to change e.g. rnMethodBinds -- But note that the form f :: a->a = ... -- parses as a pattern binding, just like @@ -338,9 +338,9 @@ data HsWrapper -- = (\a1..an \x1..xn. []) | WpCast Coercion -- A cast: [] `cast` co - -- Guaranteedn not the identity coercion + -- Guaranteed not the identity coercion - | WpApp Var -- [] d the 'd' is a type-class dictionary + | WpApp Var -- [] d the 'd' is a type-class dictionary or coercion variable | WpTyApp Type -- [] t the 't' is a type or corecion | WpLam Var -- \d. [] the 'd' is a type-class dictionary or coercion variable | WpTyLam TyVar -- \a. [] the 'a' is a type variable (not coercion var) @@ -465,25 +465,22 @@ isSpecPrag _ = False \end{code} \begin{code} -okBindSig :: NameSet -> LSig Name -> Bool -okBindSig ns sig = sigForThisGroup ns sig +okBindSig :: Sig a -> Bool +okBindSig _ = True -okHsBootSig :: LSig Name -> Bool -okHsBootSig (L _ (TypeSig _ _)) = True -okHsBootSig (L _ (FixSig _)) = True -okHsBootSig _ = False +okHsBootSig :: Sig a -> Bool +okHsBootSig (TypeSig _ _) = True +okHsBootSig (FixSig _) = True +okHsBootSig _ = False -okClsDclSig :: LSig Name -> Bool -okClsDclSig (L _ (SpecInstSig _)) = False -okClsDclSig _ = True -- All others OK +okClsDclSig :: Sig a -> Bool +okClsDclSig (SpecInstSig _) = False +okClsDclSig _ = True -- All others OK -okInstDclSig :: NameSet -> LSig Name -> Bool -okInstDclSig ns lsig@(L _ sig) = ok ns sig - where - ok _ (TypeSig _ _) = False - ok _ (FixSig _) = False - ok _ (SpecInstSig _) = True - ok ns _ = sigForThisGroup ns lsig +okInstDclSig :: Sig a -> Bool +okInstDclSig (TypeSig _ _) = False +okInstDclSig (FixSig _) = False +okInstDclSig _ = True sigForThisGroup :: NameSet -> LSig Name -> Bool sigForThisGroup ns sig @@ -539,7 +536,7 @@ hsSigDoc (FixSig {}) = ptext (sLit "fixity declaration") Signature equality is used when checking for duplicate signatures \begin{code} -eqHsSig :: LSig Name -> LSig Name -> Bool +eqHsSig :: Eq a => LSig a -> LSig a -> Bool eqHsSig (L _ (FixSig (FixitySig n1 _))) (L _ (FixSig (FixitySig n2 _))) = unLoc n1 == unLoc n2 eqHsSig (L _ (TypeSig n1 _)) (L _ (TypeSig n2 _)) = unLoc n1 == unLoc n2 eqHsSig (L _ (InlineSig n1 _)) (L _ (InlineSig n2 _)) = unLoc n1 == unLoc n2