In Haskell, what does it mean if a binding "shadows an existing binding"?
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.
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.
精彩评论