[Haskell-beginners] Identical function and variable names and type inference

Daniel Fischer daniel.is.fischer at web.de
Wed Sep 2 17:37:58 EDT 2009


Am Mittwoch 02 September 2009 23:24:46 schrieb aditya siram:
> Hi all,
> Recently I wrote a function that takes a unique identifier that I called
> 'id'. I then tried to apply the 'id' function to it and GHC did not like
> that. But it should.
>
> For example in 'test' I have told the compiler that the id argument is an
> Int. So type inference should be able to determine the first 'id' in 'id
> id' couldn't possibly be an Int, but it complains. So I explicitly told the
> compiler the type of 'id' in test1 - this didn't work either. The final
> function 'test3' works as expected. Is there something I am not understand
> about the way type inference is supposed to work?
>
> test :: Int -> Int
> test id = id id
>
> test1 :: Int -> Int
> test1 id = idFunc id
>     where
>       idFunc :: a -> a
>       idFunc = id
>
> test2 :: Int -> Int
> test2 myid at id = id myid
>
> test3 :: Int -> Int
> test3 id = Prelude.id id
>
> thanks ...
> -deech

It's not type inference, it's scoping.
By calling the function's parameter id, you shadow the name id, so within that scope each 
(unqualified) mention of the name id refers to the function's parameter.
In test3, you use the qualified name Prelude.id, thus tell the compiler that it's not the 
parameter you want but the identity function.


More information about the Beginners mailing list