In the demo, I tried let rec x = {f1=x} and got x : ({f1 : rec a = ({f1 : a})}). This seems correct, but wouldn't x : rec a = {f1 : a} be simpler?
I also tried let rec x = {f1=x;f2=x;f3=x;f4=x;f5=x;f6=x;f7=x} and got a huge type expression, apparently exponential in the number of fields. I think this is just x : rec a = {f1 : a, f2 : a, f3 : a, f4 : a, f5 : a, f6 : a, f7 : a}?