Silent name shadowing
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
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.