never-say-never

Crates.ionever-say-never
lib.rsnever-say-never
version6.6.666
sourcesrc
created_at2022-01-19 13:47:40.487343
updated_at2022-01-19 14:10:42.226503
descriptionThe never type (the true one!) in stable Rust.
homepage
repositoryhttps://github.com/danielhenrymantilla/never-say-never.rs
max_upload_size
id516746
size23,338
Daniel Henry-Mantilla (danielhenrymantilla)

documentation

https://docs.rs/never-say-never

README

::never-say-never

Repository Latest version Documentation MSRV unsafe forbidden License CI

The ! type. In stable Rust. Since 1.14.0.

Better than an enum Never {} definition would be, since an instance of type ! automagically coerces to any type, whereas an instance of enum EmptyEnum {} needs an explicit match it {}.

That is, the following fails to compile:

let x: u32 = match <u32 as TryFrom<u8>>::try_from(42) {
    | Ok(it) => it,
    | Err(unreachable) => unreachable, // Error, expected `u32`, found `Infallible`
};

but the following doesn't!

use ::never_say_never::Never;

let x: u32 = match Ok::<_, Never>(42) {
    | Ok(it) => it,
    | Err(unreachable) => unreachable,
};
Commit count: 2

cargo fmt