
#8643: Silent name shadowing ------------------------------------+------------------------------------- Reporter: mirpa | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.4.1 Keywords: | Operating System: Unknown/Multiple Architecture: Unknown/Multiple | Type of failure: None/Unknown Difficulty: Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #5288 | ------------------------------------+------------------------------------- I have code like: {{{ let baseTex = (getTexPropNode nodes . NC.properties . NC.av $ geometry)
= baseTex = (flip Map.lookup texs) . NC.tdSource }}} which gives me error: {{{ Games/secunda/Graph.hs:224:23: Couldn't match expected type `TexProperty -> Maybe a0' with actual type `Maybe b0' In the second argument of `(>>=)', namely `baseTex' In the first argument of `(>>=)', namely `(getTexPropNode nodes . NC.properties . NC.av $ geometry) >>= baseTex' In the expression: (getTexPropNode nodes . NC.properties . NC.av $ geometry) >>= baseTex >>= (flip Map.lookup texs) . NC.tdSource }}}
However if I try to get type of expressin on the right hand side of {{{let baseTex = ...}}} in ghci then I get no error. Problem is that I am importing module with function {{{baseTex :: TexProperty -> Maybe TexDesc}}} and that function is shadowed by {{{let}}} expression which should have type of {{{Maybe Texture}}}. I tried to use {{{ghc-options: -Wall -fwarn-name-shadowing}}} in Cabal with no effect. From above error I conclude, that I made a type error. So I try to get type of expression in ghci which results in correct type - that makes my confusion. While I am trying to concentrate on type error, I am missing that I shadowed function by variable. This is not for the first time I've done same mistake. I would appreciate to get warnings about name shadowing since they makes me belief that I am using names of different type. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8643 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler