I like this. It remedies the most obvious representational flaw in functional languages -- at least compared to OO. Does it depend on R6RS? . . . I might consider a port to Chicken.
(There is an inconsistency, though: the typing of fields is the reverse of the typing of instances)