In Haskell, what does it mean if a binding “shadow

2019-02-16 19:03发布

问题:

I'm getting a warning from GHC when I compile:

Warning: This binding for 'pats' shadows an existing binding in the definition of 'match_ignore_ancs'

Here's the function:

match_ignore_ancs (TextPat _ c) (Text t) = c t
match_ignore_ancs (TextPat _ _) (Element _ _ _) = False
match_ignore_ancs (ElemPat _ _ _) (Text t) = False
match_ignore_ancs (ElemPat _ c pats) (Element t avs xs) =
   c t avs && match_pats pats xs

Any idea what this means and how I can fix it?

Cheers.

回答1:

It means that you have a symbol pats defined somewhere else in your program or imported from some library module, and it's visible in the same scope as match_ignore_ancs, so when you name a parameter pats, it hides (i.e. "shadows") that existing symbol.

Just rename the pats parameter to something that doesn't have a collision.