
18 Mar
2011
18 Mar
'11
9:22 a.m.
I believe this is caused by type equalities that are introduced by the Type a argument. In tr2 you get something like a ~ Int or a ~ String, allowing the function to type check. In tr1 that equality is never introduced so the type checker thinks a and Int are distinct types. But I'm sure someone else can provide a better (more correct) explanation.