X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2FhsSyn%2FHsPat.lhs;h=e87a6a27b446ba774fc223b3923dcb6fceffb5d8;hb=a1895147d4d0480f65535c99488ba25873e97bff;hp=84eadb77946b21e84bad43e09ed8bbf089fd9a5e;hpb=7707c269e935f3e433839cccca96b36ca44048ca;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsPat.lhs b/compiler/hsSyn/HsPat.lhs index 84eadb7..e87a6a2 100644 --- a/compiler/hsSyn/HsPat.lhs +++ b/compiler/hsSyn/HsPat.lhs @@ -25,7 +25,7 @@ module HsPat ( isBangHsBind, hsPatNeedsParens, patsAreAllCons, isConPat, isSigPat, isWildPat, - patsAreAllLits, isLitPat, isIrrefutableHsPat + patsAreAllLits, isLitPat, isIrrefutableHsPat, hasViewPat ) where import {-# SOURCE #-} HsExpr (SyntaxExpr, LHsExpr, pprLExpr) @@ -369,6 +369,34 @@ patterns are treated specially, of course. The 1.3 report defines what ``irrefutable'' and ``failure-free'' patterns are. \begin{code} +hasViewPat :: LPat id -> Bool +hasViewPat (L _ p) = go p where + go (WildPat _) = False + go (VarPat _) = False + go (VarPatOut _ _) = False + go (LazyPat p) = hasViewPat p + go (AsPat _ p) = hasViewPat p + go (ParPat p) = hasViewPat p + go (BangPat p) = hasViewPat p + go (ListPat p _) = any hasViewPat p + go (TuplePat p _ _) = any hasViewPat p + go (PArrPat p _) = any hasViewPat p + go (ConPatIn _ p) = go' p + go (ConPatOut _ _ _ _ p _) = go' p + go (ViewPat _ _ _) = True + go (QuasiQuotePat _) = False + go (LitPat _) = False + go (NPat _ _ _) = False + go (NPlusKPat _ _ _ _) = False + go (TypePat _) = False + go (SigPatIn p _) = hasViewPat p + go (SigPatOut p _) = hasViewPat p + go (CoPat _ _ _) = False + go' p = case p of + PrefixCon ps -> any hasViewPat ps + RecCon (HsRecFields fs _) -> any (hasViewPat . hsRecFieldArg) fs + InfixCon p1 p2 -> hasViewPat p1 || hasViewPat p2 + isWildPat :: Pat id -> Bool isWildPat (WildPat _) = True isWildPat _ = False