note that this doesn't check contractiveness of Rec types.