Re: bug (?) in type checking of record update

Jeff, I think this unification should be re-instated: --- type.c 12 Feb 2003 05:49:14 -0000 1.64 +++ type.c 12 Feb 2003 15:42:34 -0000 @@ -1814,11 +1814,8 @@ instantiate(t); shouldBe(line,snd(f),e,update,arg(fun(tr)),or); } /* Unmentioned component */ - /* this is just a sanity check, and avoiding it lets us - handle records with polymoprhic components else if (!unify(arg(fun(td)),od,arg(fun(tr)),or)) internal("typeUpdFlds"); - */ tr = arg(tr); td = arg(td); It always succeeds, because it just unifies the type variable for the input field with the one for the output one, but this affects the type of the expression, and may trigger later errors, e.g. we currently have data Container a = Container { contents :: a, info :: String } Hugs> :t Container { contents = True, info = "foo" } { info = "bar" } Container{contents = True, info = "foo"}{info = "bar"} :: Container a Would that break records with polymorphic components? Ross
participants (1)
-
Ross Paterson