X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FhsSyn%2FHsPat.lhs;h=79b906207b54629de873bd8e107bb02318af71d8;hp=ee21ee3bfa7698e1112998cd47ef8e39721a2c28;hb=9da4639011348fb6c318e3cba4b08622f811d9c4;hpb=58d200ac9cb51faa5c94e7919217f170b35b8441 diff --git a/compiler/hsSyn/HsPat.lhs b/compiler/hsSyn/HsPat.lhs index ee21ee3..79b9062 100644 --- a/compiler/hsSyn/HsPat.lhs +++ b/compiler/hsSyn/HsPat.lhs @@ -22,7 +22,7 @@ module HsPat ( import {-# SOURCE #-} HsExpr ( SyntaxExpr ) -- friends: -import HsBinds ( DictBinds, HsBind(..), ExprCoFn, isIdCoercion, pprCoFn, +import HsBinds ( DictBinds, HsBind(..), HsWrapper, isIdHsWrapper, pprHsWrapper, emptyLHsBinds, pprLHsBinds ) import HsLit ( HsLit(HsCharPrim), HsOverLit ) import HsTypes ( LHsType, PostTcType ) @@ -122,14 +122,16 @@ data Pat id ------------ Dictionary patterns (translation only) --------------- | DictPat -- Used when destructing Dictionaries with an explicit case - [id] -- superclass dicts - [id] -- methods + [id] -- Superclass dicts + [id] -- Methods ------------ Pattern coercions (translation only) --------------- - | CoPat ExprCoFn -- If co::t1 -> t2, p::t2, + | CoPat HsWrapper -- If co::t1 -> t2, p::t2, -- then (CoPat co p) :: t1 - (Pat id) -- No nested location reqd - Type + (Pat id) -- Why not LPat? Ans: existing locn will do + Type + -- During desugaring a (CoPat co pat) turns into a cast with 'co' on + -- the scrutinee, followed by a match on 'pat' \end{code} HsConDetails is use both for patterns and for data type declarations @@ -193,7 +195,7 @@ pprPat (NPat l Nothing _ _) = ppr l pprPat (NPat l (Just _) _ _) = char '-' <> ppr l pprPat (NPlusKPat n k _ _) = hcat [ppr n, char '+', ppr k] pprPat (TypePat ty) = ptext SLIT("{|") <> ppr ty <> ptext SLIT("|}") -pprPat (CoPat co pat _) = parens (pprCoFn (ppr pat) co) +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-}"), @@ -237,9 +239,9 @@ mkNilPat ty = mkPrefixConPat nilDataCon [] ty mkCharLitPat :: Char -> OutPat id mkCharLitPat c = mkPrefixConPat charDataCon [noLoc $ LitPat (HsCharPrim c)] charTy -mkCoPat :: ExprCoFn -> OutPat id -> Type -> OutPat id +mkCoPat :: HsWrapper -> OutPat id -> Type -> OutPat id mkCoPat co lpat@(L loc pat) ty - | isIdCoercion co = lpat + | isIdHsWrapper co = lpat | otherwise = L loc (CoPat co pat ty) \end{code}