// Locals' types are subject to unification.
start ::= <<push_scope>><<decl>> -> <<use>>
for[T] decl ::= <<fresh_local[T]>> <<fresh_local[Vec[T]]>> <<fresh_local[u8]>>
// This never emits `x0, x0`, since the type `T` in the expansion of `decl`
// can't be both `u8` and `Vec[u8]` at the same time.
use ::= u8 <<choose_local[u8]>>, vec <<choose_local[Vec[u8]]>>

// output 0: x0 x1 x2 -> u8 x0, vec x1
// output 1: x0 x1 x2 -> u8 x2, vec x0
// output 2: x0 x1 x2 -> u8 x2, vec x1
