κeenのHappy Hacκing Blog | Lispエイリアンの狂想曲

Rustの型レベルLispっぽいの作った

κeenです。ふとした気紛れでRustの型レベルLispっぽいの作りました。

実装自体は去年Scalaで作た時とほぼ同じ。 ただしRustでコンパイル時に文字列を処理しようとするとコンパイラプラグインが必要になるので今回はあきらめて素のRustの式のまま。

こんな感じです。

println!("{}", eval!(List3<Add, _2, _3>));

Lisp…?感ありますがLispと言い張ります。

少しだけ工夫した点はシンボルをアルファベットのListにすることで任意の文字列を表現出来るようにした点、関数をFunFun2 といったトレイトで抽象化することでユーザも関数を定義出来るようにした点です。

例えばフィボナッチ数列は

pub type Fib = Symbol<Sym3<F, I, B>>;

impl Fun1<_0> for Fib {
    type Out = _1;
}

impl Fun1<_1> for Fib {
    type Out = _1;
}

impl <T1N: Num, N1_O: Num, N2_O: Num, NO: Num>Fun1<Number<Succ<Succ<T1N>>>> for Fib
    where Fib: Fun1<Number<Succ<T1N>>, Out = Number<N1_O>>,
          Fib: Fun1<Number<     T1N >, Out = Number<N2_O>>,
          Add: Fun2<Number<N1_O>, Number<N2_O>, Out = Number<NO>>
{
    type Out = Number<NO>;
}

と定義出来ます。

ただし、Rustの型検査が許す再帰深度がかなり小さいため、List2<Fib, _6>で音を上げます。

   Compiling rustlisp v0.1.0 (file:///home/kim/Rust/rustlisp)
error[E0275]: overflow evaluating the requirement `_: std::marker::Sized`
 --> <rustlisp macros>:1:20
  |
1 | ( $ t : ty ) => { << $ t as Eval > :: Out as Expr > :: to_string (  ) }
  |                    ^^^^^^^^^^^^^^^^^^^^^^
src/main.rs:18:20: 18:41 note: in this expansion of eval! (defined in <rustlisp macros>)
<std macros>:2:27: 2:58 note: in this expansion of format_args!
<std macros>:3:1: 3:54 note: in this expansion of print! (defined in <std macros>)
src/main.rs:18:5: 18:43 note: in this expansion of println! (defined in <std macros>)
  |
  = note: consider adding a `#![recursion_limit="128"]` attribute to your crate
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Zero>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Zero>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun2<rustlisp::num::Number<_>, rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::A, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::SymCons<rustlisp::symbol::D, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::fun::Fun1<rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>>` for `rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::F, rustlisp::symbol::SymCons<rustlisp::symbol::I, rustlisp::symbol::SymCons<rustlisp::symbol::B, rustlisp::symbol::Eos>>>>`
  = note: required because of the requirements on the impl of `rustlisp::eval::Eval` for `rustlisp::cons::ConsCell<rustlisp::symbol::Symbol<rustlisp::symbol::SymCons<rustlisp::symbol::F, rustlisp::symbol::SymCons<rustlisp::symbol::I, rustlisp::symbol::SymCons<rustlisp::symbol::B, rustlisp::symbol::Eos>>>>, rustlisp::cons::ConsCell<rustlisp::num::Number<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Succ<rustlisp::num::Zero>>>>>>>, rustlisp::cons::Nil>>`

error: aborting due to previous error

error: Could not compile `rustlisp`.

To learn more, run the command again with --verbose.

スタックを作ってどうこう、とかも考えたのですが上手くいきませんでした。悲しい。

ということで小ネタでした。

Written by κeen
Older article
Scala 2.12.0変更点