+isLiftedPatBind :: HsBind id -> Bool
+-- A pattern binding with a compound pattern, not just a variable
+-- (I# x) yes
+-- (# a, b #) no, even if a::Int#
+-- x no, even if x::Int#
+-- We want to warn about a missing bang-pattern on the yes's
+isLiftedPatBind (PatBind { pat_lhs = p }) = isLiftedLPat p
+isLiftedPatBind _ = False
+
+isLiftedLPat :: LPat id -> Bool
+isLiftedLPat (L _ (ParPat p)) = isLiftedLPat p
+isLiftedLPat (L _ (BangPat p)) = isLiftedLPat p
+isLiftedLPat (L _ (AsPat _ p)) = isLiftedLPat p
+isLiftedLPat (L _ (TuplePat _ Unboxed _)) = False
+isLiftedLPat (L _ (VarPat {})) = False
+isLiftedLPat (L _ (WildPat {})) = False
+isLiftedLPat _ = True
+