# If a closure closes over a variable that is statically known *and*
# available dynamically through `with`, the statically known one must
# have precedence.

let
  # introduce statically known `a` (this should be the result)
  a = 1;
in

# introduce some closure depth to force both kinds of upvalue
  # resolution, and introduce a dynamically known `a` within the
  # closures
let f = b: with { a = 2; }; c: a + b + c;
in f 0 0
