Remove the unused HsExpr constructor DictPat
[ghc-hetmet.git] / compiler / hsSyn / HsPat.lhs
index f2ba6b3..42da265 100644 (file)
@@ -1,4 +1,5 @@
 %
+% (c) The University of Glasgow 2006
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
 \section[PatSyntax]{Abstract Haskell syntax---patterns}
@@ -23,21 +24,20 @@ module HsPat (
 import {-# SOURCE #-} HsExpr           ( SyntaxExpr )
 
 -- friends:
-import HsBinds         ( DictBinds, HsBind(..), HsWrapper, isIdHsWrapper, pprHsWrapper,
-                         emptyLHsBinds, pprLHsBinds )
-import HsLit           ( HsLit(HsCharPrim), HsOverLit )
-import HsTypes         ( LHsType, PostTcType )
-import HsDoc            ( LHsDoc, ppr_mbDoc )
-import BasicTypes      ( Boxity, tupleParens )
+import HsBinds
+import HsLit
+import HsTypes
+import HsDoc
+import BasicTypes
 -- others:
 import PprCore         ( {- instance OutputableBndr TyVar -} )
-import TysWiredIn      ( nilDataCon, charDataCon, charTy )
-import Var             ( TyVar )
-import DataCon         ( DataCon, dataConTyCon )
-import TyCon           ( isProductTyCon )
+import TysWiredIn
+import Var
+import DataCon
+import TyCon
 import Outputable      
-import Type            ( Type )
-import SrcLoc          ( Located(..), unLoc, noLoc )
+import Type
+import SrcLoc
 \end{code}
 
 
@@ -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}