Print infix function definitions correctly in HsSyn
[ghc-hetmet.git] / compiler / deSugar / Match.lhs
index b40bb53..ca18706 100644 (file)
@@ -1,40 +1,39 @@
 %
+% (c) The University of Glasgow 2006
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
-\section[Main_match]{The @match@ function}
+
+The @match@ function
 
 \begin{code}
 module Match ( match, matchEquations, matchWrapper, matchSimply, matchSinglePat ) where
 
 #include "HsVersions.h"
 
-import DynFlags        ( DynFlag(..), dopt )
+import DynFlags
 import HsSyn           
-import TcHsSyn         ( mkVanillaTuplePat, hsPatType )
-import Check            ( check, ExhaustivePat )
+import TcHsSyn
+import Check
 import CoreSyn
-import Literal         ( Literal )
-import CoreUtils       ( bindNonRec, exprType )
+import Literal
+import CoreUtils
 import DsMonad
-import DsBinds         ( dsLHsBinds, dsCoercion )
-import DsGRHSs         ( dsGRHSs )
+import DsBinds
+import DsGRHSs
 import DsUtils
-import Id              ( idName, idType, Id )
-import DataCon         ( DataCon )
-import MatchCon                ( matchConFamily )
-import MatchLit                ( matchLiterals, matchNPlusKPats, matchNPats, 
-                         tidyLitPat, tidyNPat, hsLitKey, hsOverLitKey )
-import PrelInfo                ( pAT_ERROR_ID )
-import TcType          ( Type )
-import Type            ( splitFunTysN, coreEqType )
-import TysWiredIn      ( consDataCon, mkListTy, unitTy,
-                         tupleCon, parrFakeCon, mkPArrTy )
-import BasicTypes      ( Boxity(..) )
-import ListSetOps      ( equivClasses, runs )
-import SrcLoc          ( unLoc, Located(..) )
-import Maybes          ( isJust )
-import Util             ( lengthExceeds, notNull )
-import Name            ( Name )
+import Id
+import DataCon
+import MatchCon
+import MatchLit
+import PrelInfo
+import Type
+import TysWiredIn
+import BasicTypes
+import ListSetOps
+import SrcLoc
+import Maybes
+import Util
+import Name
 import Outputable
 \end{code}
 
@@ -124,8 +123,8 @@ pp_context (DsMatchContext kind _loc) msg rest_of_msg_fun
   where
     (ppr_match, pref)
        = case kind of
-            FunRhs fun -> (pprMatchContext kind, \ pp -> ppr fun <+> pp)
-            other      -> (pprMatchContext kind, \ pp -> pp)
+            FunRhs fun _ -> (pprMatchContext kind, \ pp -> ppr fun <+> pp)
+            other        -> (pprMatchContext kind, \ pp -> pp)
 
 ppr_pats pats = sep (map ppr pats)
 
@@ -448,15 +447,6 @@ tidy1 v (TuplePat pats boxity ty)
     arity = length pats
     tuple_ConPat = mkPrefixConPat (tupleCon boxity arity) pats ty
 
-tidy1 v (DictPat dicts methods)
-  = case num_of_d_and_ms of
-       0 -> tidy1 v (TuplePat [] Boxed unitTy) 
-       1 -> tidy1 v (unLoc (head dict_and_method_pats))
-       _ -> tidy1 v (mkVanillaTuplePat dict_and_method_pats Boxed)
-  where
-    num_of_d_and_ms     = length dicts + length methods
-    dict_and_method_pats = map nlVarPat (dicts ++ methods)
-
 -- LitPats: we *might* be able to replace these w/ a simpler form
 tidy1 v (LitPat lit)
   = returnDs (idDsWrapper, tidyLitPat lit)
@@ -610,7 +600,8 @@ JJQC 30-Nov-1997
 
 \begin{code}
 matchWrapper ctxt (MatchGroup matches match_ty)
-  = do { eqns_info   <- mapM mk_eqn_info matches
+  = ASSERT( notNull matches )
+    do { eqns_info   <- mapM mk_eqn_info matches
        ; new_vars    <- selectMatchVars arg_pats
        ; result_expr <- matchEquations ctxt new_vars eqns_info rhs_ty
        ; return (new_vars, result_expr) }