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()
}