X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FhsSyn%2FHsPat.lhs;h=42da26554a748a383f36cf2629b0e8b36cdadbb3;hb=74b27e20425336403d80e942ee3faf00f8c36ef8;hp=65cc304999eb1e23a09d65ee294e8c59233921d3;hpb=ab22f4e6456820c1b5169d75f5975a94e61f54ce;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsPat.lhs b/compiler/hsSyn/HsPat.lhs index 65cc304..42da265 100644 --- a/compiler/hsSyn/HsPat.lhs +++ b/compiler/hsSyn/HsPat.lhs @@ -50,6 +50,9 @@ type LPat id = Located (Pat id) data Pat id = ------------ Simple patterns --------------- WildPat PostTcType -- Wild card + -- The sole reason for a type on a WildPat is to + -- support hsPatType :: Pat Id -> Type + | VarPat id -- Variable | VarPatOut id (DictBinds id) -- Used only for overloaded Ids; the -- bindings give its overloaded instances @@ -122,16 +125,11 @@ data Pat id | SigPatOut (LPat id) -- Pattern with a type signature Type - ------------ Dictionary patterns (translation only) --------------- - | DictPat -- Used when destructing Dictionaries with an explicit case - [id] -- Superclass dicts - [id] -- Methods - ------------ Pattern coercions (translation only) --------------- | CoPat HsWrapper -- If co::t1 -> t2, p::t2, -- then (CoPat co p) :: t1 (Pat id) -- Why not LPat? Ans: existing locn will do - Type + Type -- Type of whole pattern, t1 -- During desugaring a (CoPat co pat) turns into a cast with 'co' on -- the scrutinee, followed by a match on 'pat' \end{code} @@ -208,9 +206,6 @@ pprPat (TypePat ty) = ptext SLIT("{|") <> ppr ty <> ptext SLIT("|}") pprPat (CoPat co pat _) = parens (pprHsWrapper (ppr pat) co) pprPat (SigPatIn pat ty) = ppr pat <+> dcolon <+> ppr ty pprPat (SigPatOut pat ty) = ppr pat <+> dcolon <+> ppr ty -pprPat (DictPat ds ms) = parens (sep [ptext SLIT("{-dict-}"), - brackets (interpp'SP ds), - brackets (interpp'SP ms)]) pprUserCon c (InfixCon p1 p2) = ppr p1 <+> ppr c <+> ppr p2 pprUserCon c details = ppr c <+> pprConArgs details @@ -219,8 +214,8 @@ pprConArgs (PrefixCon pats) = interppSP pats pprConArgs (InfixCon p1 p2) = interppSP [p1,p2] pprConArgs (RecCon rpats) = braces (hsep (punctuate comma (map (pp_rpat) rpats))) where - pp_rpat (HsRecField v p d) = - hsep [ppr d, ppr v, char '=', ppr p] + pp_rpat (HsRecField v p _d) = + hsep [ppr v, char '=', ppr p] -- add parallel array brackets around a document -- @@ -302,7 +297,6 @@ isConPat (ConPatOut {}) = True isConPat (ListPat {}) = True isConPat (PArrPat {}) = True isConPat (TuplePat {}) = True -isConPat (DictPat ds ms) = (length ds + length ms) > 1 isConPat other = False isSigPat (SigPatIn _ _) = True @@ -356,6 +350,5 @@ isIrrefutableHsPat pat go1 (NPlusKPat _ _ _ _) = False go1 (TypePat _) = panic "isIrrefutableHsPat: type pattern" - go1 (DictPat _ _) = panic "isIrrefutableHsPat: type pattern" \end{code}