(x) @x {
node @x.y
node @x.y
}
The above is a trivial example of a duplicate node error that we'd catch at runtime, but which we could instead catch statically by a simple analysis approximating the dynamic semantics w.r.t. node assignments. More interesting examples—guarded by interesting patterns, for example—are likely the only ones that we care about in practice (the above doesn't seem to happen very often and is easy enough to discover and resolve when it does), and are pretty much all dependent on exhaustiveness checking (#64).
cf #64 (exhaustiveness checks)
The above is a trivial example of a duplicate node error that we'd catch at runtime, but which we could instead catch statically by a simple analysis approximating the dynamic semantics w.r.t. node assignments. More interesting examples—guarded by interesting patterns, for example—are likely the only ones that we care about in practice (the above doesn't seem to happen very often and is easy enough to discover and resolve when it does), and are pretty much all dependent on exhaustiveness checking (#64).
cf #64 (exhaustiveness checks)