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 67 68 69 70 71 72 73 74 75
// Copyright © 2024 Mikhail Hogrefe
//
// This file is part of Malachite.
//
// Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU
// Lesser General Public License (LGPL) as published by the Free Software Foundation; either version
// 3 of the License, or (at your option) any later version. See <https://www.gnu.org/licenses/>.
use core::fmt::{Display, Formatter};
use core::iter::{empty, Empty};
use core::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) -> core::fmt::Result {
unreachable!()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct NeverError;
impl FromStr for Never {
type Err = NeverError;
/// 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, NeverError};
/// use std::str::FromStr;
///
/// assert_eq!(Never::from_str("abc"), Err(NeverError));
/// ```
#[inline]
fn from_str(_: &str) -> Result<Never, NeverError> {
Err(NeverError)
}
}
/// Generates all (none) of the [`Never`]s.
///
/// The output length is 0.
///
/// # Worst-case complexity per iteration
/// Constant time and additional memory.
///
/// # Examples
/// ```
/// use itertools::Itertools;
/// use malachite_base::nevers::nevers;
///
/// assert_eq!(nevers().collect_vec(), &[]);
/// ```
pub const fn nevers() -> Empty<Never> {
empty()
}