[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