support for arbitrary field access patterns. example:
(f 3).x
(r1.f 3).x
((f 2).x 3).y