EG
"foo" | "bar"
тоже можноSize: a a a
EG
"foo" | "bar"
тоже можноEG
42..∞
нельзяp
T: Finite
EG
trait Finite {
fn size() -> Int;
fn get(n: 0..Self::size()) -> Self;
}
p
EG
e
trait Finite {
fn size() -> Int;
fn get(n: 0..Self::size()) -> Self;
}
p
trait Finite {
type Item;
fn size() -> Int;
fn get(n: 0..Self::size()) -> Self::Item;
}
EG
trait Finite {
type Item;
fn size() -> Int;
fn get(n: 0..Self::size()) -> Self::Item;
}
EG
get()
получает энный объект этого типа.EG
impl Finite for Bool {
fn size() -> Int { 2 }
fn get(n: 0..2) -> Self {
if n == 0 { false } else { true }
}
}
EG
random_choice
получается примерно такая:n = get_random_number(0, T::size());
T::get(n)
EG
Finite
подразумевает, что у типа есть конечное количество пронумерованных значенийEG
Countable
для счётных типов, но я ХЗ зачемtrait Countable {
fn get(n: Int) -> Self;
}
e
λ => fmap (\a -> (show a) ++ "bar") [1..10]
["1bar","2bar","3bar","4bar","5bar","6bar","7bar","8bar","9bar","10bar"]
e
EG
EG
e
EG