exclusive-choice

Crates.ioexclusive-choice
lib.rsexclusive-choice
version0.1.0
sourcesrc
created_at2024-08-11 05:22:14.923531
updated_at2024-08-11 05:22:14.923531
descriptionAn implementation of affine addative conjunction in the rust type system.
homepage
repositoryhttps://github.com/Vi-Kitten/Choice
max_upload_size
id1332992
size25,083
Kit (Vi-Kitten)

documentation

README

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

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.

Either::Left(0).choose_map(Exclusive::new(
    sender,
    |s| move |x: i32| s.send(x + 1),
    |s| move |y: i32| s.send(y - 1),
));
Commit count: 0

cargo fmt