Pull to refresh

Comments 12

Succ — successor,
Nat — от natural number, бездумно взял из хаскелевого примера, о котором думал.
Серьезно? а 'Hello world' на нем можно написать? давайте целый цикл статей что можно написать на Rust'e
А разве это и не есть hello world? По моему хорошой туториал. только мало информации для новичков (лично я почти ничего не понял)
А разве это и не есть hello world?

Хз ирония или нет, но по мне это уже довольно продвинутое изнасилование системы типов.


только мало информации для новичков

Думаю, предполагается что читатель уже ознакомился с базовыми понятиями в, допустим, книге.

Мне правда показалось что это из разряда туториала, только для чуть более продвинутых новичков
Реализация арифметики в системе типов, даже без вычитания, вещь важная, вполне заслуживающая отдельной статьи.
Ну если надо писать целую статью, что бы рассказать как складывать числа, я боюсь представить какой консилиум собирается из специалистов, когда вам надо сделать чего по-серьезней на нем. В общем, ваш rust — говно
Если кто-то не понимает назначения и принципов построения систем типов в языках программирования, лучше сообщать об этом менее завуалировано.

Добавив немного магии, можно получить обратно нормальный вывод чисел:


impl ::std::fmt::Display for Zero {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        write!(f, "0")
    }
}

impl<T : Nat + ::std::fmt::Display> ::std::fmt::Display for Succ<T> {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        let res = format!("{}", T::new());
        match res.parse::<i32>() {
          Ok(n) => write!(f, "{}", 1 + n),
          Err(e) => write!(f, "ERROR")
        }
    }
}

для преобразование в число бы логичнее не заморачиваться с Display и parse а сделать так:


impl Into<i32> for Zero {
    fn into(self) -> i32 {
        0
    }
}

impl<T : Nat + Into<i32>> Into<i32> for Succ<T> {
    fn into(self) -> i32 {
        Into::into(T::new()) + 1
    }
}

let x : i32 = Into::into(nat);
println!("{}", x);

playpen

Sign up to leave a comment.

Articles