```rust
type argtuple (symbol ident)*
// a body is one or more expressions
// type body {expr}+
// syntax (inputs) (outputs)
syntax bind (name symbol, binder symbol, args argtuple, rest body) {
binder(flatten(args, fn(name) body))
}
syntax try (e expr, rest body) {
if e.iserr() e else body
}
fn open(p path, body invokable(File, ?)) [? | os.Err!] {
bind f File(os.open(p), 0)
bind out body(f)
try os.close(f.fd)
out
}
fn main (ctx Ctx) int {
bind f open ./test.txt
}
```