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

Thomas Davie tom.davie at gmail.com
Wed Sep 2 17:33:08 EDT 2009


Ints can't make up the function part of an application, that must have  
type (a -> b).

In the mean time, the reason it didn't accept test id = id id is  
because it must fix the argument id to only one type. It infers that  
id must have type (a -> b), from the fact that it appears in the  
function position, then sees it in the argument position, and infers  
that a = (a -> b) which obviously causes a problem.  To resolve that  
problem, you need rank-2 polymorphism.

Bob

On 2 Sep 2009, at 23:24, aditya siram wrote:

> 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
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners



More information about the Beginners mailing list