
On 3/5/07, Simon Peyton-Jones
4. The "rigid type variable" thing isn't just an implementation question. What *would* you like the error message to say when you write f :: ([a], Int) -> Int f (x:xs, y) = x+y Here we unify 'a' with Int, which is wrong. What would a nicer error message say?
IMO, the "rigid type variable" error message is confusing for two reasons: (1) it doesn't suggest to the user (or at least the novice-to-intermediate user) what they should do to solve the problem, and (2) it makes the user feel like they need to go read six papers on type inference before they can make any progress when all they wanted to do is add two numbers. In this particular case, something like "Suggested fix: change 'a' in the type signature to 'Int'" would be an improvement: it addresses reason (1), and putting it ahead of the "rigid type variable" part (e.g., textually highlighting the more newbie-friendly portion of the error message) addresses reason (2). (I realize that the same error might occur in cases where the type variable isn't bound by a user type signature, but it's common enough for users to insert type signatures when the code isn't compiling that I think it's worth it to treat that as a special case, even if there isn't a more general way to improve the error message.) Cheers, Kirsten -- Kirsten Chevalier* chevalier@alum.wellesley.edu *Often in error, never in doubt "And I have grown with each disappointment through the years" -- Great Big Sea