I've tried to modify 'foreach' so that it would treat an aggregate as if it were an aggregate[string] map, so you could iterate over it, recursively if needed. It turns out that this road leads only to madness; the compiler can't tell whether the foreach variables are supposed to receive keys...