# Choice
An implementation of affine addative conjunction in the rust type system.
This can be used to group mutually exclusive function parameters so that they can have overlapping captures.
## Usage
The following code using `Result` does not work as it
```rs
Ok(0)
.map(|x: i32| sender.send(x + 1))
.map_err(|y: i32| sender.send(y - 1));
//! ^^^^^^^^ use of moved value: `sender`
```
Whereas using `Either` and passing a `Choice` of two functions circumvents this issues by storing the two branches in the same object.
```rs
Either::Left(0).choose_map(Exclusive::new(
sender,
|s| move |x: i32| s.send(x + 1),
|s| move |y: i32| s.send(y - 1),
));
```