
El sáb, 22-01-2011 a las 11:06 -0600, aditya siram escribió:
Ok I've figured out why I can't compile it. But now I'm more confused than ever. The problem was that I have a -XNoMonomorphismRestriction flag on Ghci. Removing this allowed me to compile.
This is indeed a bit tricky, it seems. res has a type-class polymorphic type Read a => ... (the ... is complicated by the fact that you have given a strange signature to test, see below) With the monomorphism restriction on, ghc takes the type-signature for test, inferes a type for res in the line Just $ fst $ head res, and uses this type for the null res test. Interestingly, it doesn't infer a monomorphic type for res, but insists that the instantiation for the type-class parameter is the same in both occurences. With no monomorphism restriction, ghc doesn't do this inference, because the type for res in null res may be different to the type of res in Just $ fst $ head res. (i.e., the instantion for the type-class parameter may be different) Finally, are you sure that the given type signature is what you want? Don't you want test :: Read a => String -> Maybe a Jürgen