# Passing Flags and Named Parameters Around
TODO: How to create wrappers around external commands? Allow `extern` to have blocks:
## Problem no. 1: How to pass flags around
### Functional call syntax
```
foo(flag: true)
```
### `apply` command
(requires const record and/or dynamic signature verification)
```
apply foo { flag: true }
```
### Special unpacking syntax
(requires const record and/or dynamic signature verification)
```
bar ...$kwargs
```
}
Unpacking single flag: `bar ...$foo`
## Problem no. 2: How to allow arbitrary flags in signature
(such that it's compatible with Problem no. 1)
```
> def foo [...rest, ...--kwargs] {
print 'rest:' $rest
print 'kwargs:' $kwargs
}
> foo spam -x --foo --bar baz
rest:
0 spam
kwargs:
x true
foo true
bar baz
```
## Conclusion
The "Functional call syntax" solution seems to me like the simplest method for passing flags around. The other methods based on record unpacking (`apply` or `...$kwargs`) require either a const record, or dynamic signature verification.
Allowing arbitrary flags in signature also required dynamic signature verification. IMO it is not necessarily needed since you can pass a normal record around:
```
def foo [x: record] { ... }
```