[Haskell-cafe] Beginner question

Miguel Mitrofanov miguelimo38 at yandex.ru
Fri Jan 2 12:05:50 EST 2009


On 2 Jan 2009, at 19:57, Benjamin Bach wrote:

> Supposing I have the following code:
>
>> module Main(main) where
>>    main = putStr (show [])

What type is your "[]" here?

main :: IO ()

putStr :: String -> IO ()

show [] :: String

show :: Show a => a -> String

Now, how is Hugs or GHCi supposed to know the type of "[]"? The only  
information it has is that it's type belongs to the class "Show".

You may think it's irrelevant, since empty lists are showed the same;  
but they are not: for example, ([] :: [Char]) would be shown as  
'""' (empty string).

> I will get these errors from GHC and Hugs respectively:
>
>> Main.hs:2:16:
>>    Ambiguous type variable `a' in the constraint:
>>      `Show a' arising from a use of `show' at Main.hs:2:16-22
>>    Probable fix: add a type signature that fixes these type  
>> variable(s)
>
>> ERROR "src/Main.hs":2 - Unresolved top-level overloading
>> *** Binding             : main
>> *** Outstanding context : Show b
>
> But if I change my code to the following, it will compile.
>
>> module Main(main) where
>>    main = putStr (show [1])
>
> I have no problems typing in "putStr (show [])" in Hugs... runs fine.
> So what's wrong? I've really tried hard to think of an explanation,
> but with no luck..
>
> Thanks,
> Benjamin
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list