
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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe