1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
use std::fmt::{Display, Formatter};
use std::iter::{empty, Empty};
use std::str::FromStr;
/// `Never` is a type that cannot be instantiated.
///
/// This is a [bottom type](https://en.wikipedia.org/wiki/Bottom_type).
///
/// # Examples
/// ```
/// use malachite_base::nevers::Never;
///
/// let x: Option<Never> = None;
/// ```
#[derive(Clone, Copy, Debug, Hash, Eq, Ord, PartialEq, PartialOrd)]
pub enum Never {}
impl Display for Never {
/// Would convert a [`Never`] to a [`String`].
fn fmt(&self, _f: &mut Formatter) -> std::fmt::Result {
unreachable!()
}
}
impl FromStr for Never {
type Err = &'static str;
/// Would convert a [`String`] to a [`Never`].
///
/// Since a [`Never`] can never be instantiated, `from_str` never succeeds.
///
/// # Worst-case complexity
/// Constant time and additional memory.
///
/// # Examples
/// ```
/// use malachite_base::nevers::Never;
/// use std::str::FromStr;
///
/// assert_eq!(Never::from_str("abc"), Err("Never has no possible values"));
/// ```
#[inline]
fn from_str(_: &str) -> Result<Never, &'static str> {
Err("Never has no possible values")
}
}
/// Generates all (none) of the [`Never`]s.
///
/// The output length is 0.
///
/// # Worst-case complexity per iteration
/// Constant time and additional memory.
///
/// # Examples
/// ```
/// extern crate itertools;
///
/// use itertools::Itertools;
/// use malachite_base::nevers::nevers;
///
/// assert_eq!(nevers().collect_vec(), &[]);
/// ```
pub const fn nevers() -> Empty<Never> {
empty()
}