[INFO] cloning repository https://github.com/gfaster/lisp
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/gfaster/lisp" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgfaster%2Flisp", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgfaster%2Flisp'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] c173c8cceba15e08ff4d280e95b6620b403e7180
[INFO] checking gfaster/lisp against 8773d2c75a8e90130dcce745a7ec4e66bb9963db+rustflags=-Aunfulfilled-lint-expectations for pr-163637
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgfaster%2Flisp" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/gfaster/lisp
[INFO] finished tweaking git repo https://github.com/gfaster/lisp
[INFO] tweaked toml for git repo https://github.com/gfaster/lisp written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/gfaster/lisp on toolchain 8773d2c75a8e90130dcce745a7ec4e66bb9963db
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8773d2c75a8e90130dcce745a7ec4e66bb9963db" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/gfaster/lisp already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8773d2c75a8e90130dcce745a7ec4e66bb9963db" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15
[INFO] running `Command { std: "docker" "start" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15" "/opt/rustwide/cargo-home/bin/cargo" "+8773d2c75a8e90130dcce745a7ec4e66bb9963db" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Aunfulfilled-lint-expectations" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15" "/opt/rustwide/cargo-home/bin/cargo" "+8773d2c75a8e90130dcce745a7ec4e66bb9963db" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking lisp3 v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/env.rs:143:27
[INFO] [stdout]     |
[INFO] [stdout] 143 |     syms: HashMap<Symbol, Datum>,
[INFO] [stdout]     |                           ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 141 ~ struct EnvInner<'a> {
[INFO] [stdout] 142 |     up: Option<Rc<Env>>,
[INFO] [stdout] 143 ~     syms: HashMap<Symbol, Datum<'a>>,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> src/error.rs:61:22
[INFO] [stdout]    |
[INFO] [stdout] 61 |     WrongTypeToApply(Datum),
[INFO] [stdout]    |                      ^^^^^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout]  6 ~         pub enum Error<'a> {
[INFO] [stdout]  7 |             $($id $(($($tt)*))?),*
[INFO] [stdout] ...
[INFO] [stdout] 60 |     (manual) TypeError(Type, Type),
[INFO] [stdout] 61 ~     WrongTypeToApply(Datum<'a>),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> src/error.rs:61:22
[INFO] [stdout]    |
[INFO] [stdout] 61 |     WrongTypeToApply(Datum),
[INFO] [stdout]    |                      ^^^^^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] 16 ~         pub struct $id<'a> $(($(pub $field),*))?;
[INFO] [stdout] 17 |         impl std::fmt::Display for $id {
[INFO] [stdout] ...
[INFO] [stdout] 60 |     (manual) TypeError(Type, Type),
[INFO] [stdout] 61 ~     WrongTypeToApply(Datum<'a>),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:368:28
[INFO] [stdout]     |
[INFO] [stdout] 368 | impl std::fmt::Display for List {
[INFO] [stdout]     |                            ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 368 | impl std::fmt::Display for List<'_> {
[INFO] [stdout]     |                                ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:377:26
[INFO] [stdout]     |
[INFO] [stdout] 377 | impl std::fmt::Debug for List {
[INFO] [stdout]     |                          ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 377 | impl std::fmt::Debug for List<'_> {
[INFO] [stdout]     |                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:383:6
[INFO] [stdout]     |
[INFO] [stdout] 383 | impl List {
[INFO] [stdout]     |      ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 383 | impl List<'_> {
[INFO] [stdout]     |          ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:384:26
[INFO] [stdout]     |
[INFO] [stdout] 384 |     fn to_datum(self) -> Datum {
[INFO] [stdout]     |                          ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]     |
[INFO] [stdout] 384 |     fn to_datum(self) -> Datum<'static> {
[INFO] [stdout]     |                               +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:391:49
[INFO] [stdout]     |
[INFO] [stdout] 391 |     fn as_args<const N: usize>(self) -> Result<[Datum; N], MismatchedParamNum> {
[INFO] [stdout]     |                                                 ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]     |
[INFO] [stdout] 391 |     fn as_args<const N: usize>(self) -> Result<[Datum<'static>; N], MismatchedParamNum> {
[INFO] [stdout]     |                                                      +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:397:58
[INFO] [stdout]     |
[INFO] [stdout] 397 |     fn as_args_and_rem<const N: usize>(self) -> Result<([Datum; N], Self), MismatchedParamNum> {
[INFO] [stdout]     |                                                          ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]     |
[INFO] [stdout] 397 |     fn as_args_and_rem<const N: usize>(self) -> Result<([Datum<'static>; N], Self), MismatchedParamNum> {
[INFO] [stdout]     |                                                               +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:424:23
[INFO] [stdout]     |
[INFO] [stdout] 424 | impl IntoIterator for List {
[INFO] [stdout]     |                       ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 424 | impl IntoIterator for List<'_> {
[INFO] [stdout]     |                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:425:17
[INFO] [stdout]     |
[INFO] [stdout] 425 |     type Item = Datum;
[INFO] [stdout]     |                 ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 424 ~ impl<'a> IntoIterator for List {
[INFO] [stdout] 425 ~     type Item = Datum<'a>;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:427:21
[INFO] [stdout]     |
[INFO] [stdout] 427 |     type IntoIter = DatumIter;
[INFO] [stdout]     |                     ^^^^^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 424 ~ impl<'a> IntoIterator for List {
[INFO] [stdout] 425 |     type Item = Datum;
[INFO] [stdout] 426 |
[INFO] [stdout] 427 ~     type IntoIter = DatumIter<'a>;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:434:19
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum> for List {
[INFO] [stdout]     |                   ^^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum<'_>> for List {
[INFO] [stdout]     |                        ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:434:30
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum> for List {
[INFO] [stdout]     |                              ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum> for List<'_> {
[INFO] [stdout]     |                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:435:41
[INFO] [stdout]     |
[INFO] [stdout] 435 |     fn from_iter<T: IntoIterator<Item = Datum>>(iter: T) -> Self {
[INFO] [stdout]     |                                         ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
[INFO] [stdout] help: consider making the bound lifetime-generic with a new `'a` lifetime
[INFO] [stdout]     |
[INFO] [stdout] 435 |     fn from_iter<T: for<'a> IntoIterator<Item = Datum<'a>>>(iter: T) -> Self {
[INFO] [stdout]     |                     +++++++                          ++++
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 435 |     fn from_iter<'a, T: IntoIterator<Item = Datum<'a>>>(iter: T) -> Self {
[INFO] [stdout]     |                  +++                             ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MaybeUninit`
[INFO] [stdout]  --> src/gc.rs:1:84
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{cell::{Cell, RefCell}, marker::{PhantomData, PhantomPinned}, mem::{self, MaybeUninit}, pin::Pin, ptr::{self, NonNull}};
[INFO] [stdout]   |                                                                                    ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ops::Deref`
[INFO] [stdout]  --> src/gc/root_ref.rs:1:32
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{marker::PhantomData, ops::Deref, pin::Pin, ptr::NonNull};
[INFO] [stdout]   |                                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Gc`
[INFO] [stdout]  --> src/gc/root_ref.rs:3:13
[INFO] [stdout]   |
[INFO] [stdout] 3 | use super::{Gc, Root, RootTruth};
[INFO] [stdout]   |             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused macro definition: `root`
[INFO] [stdout]    --> src/gc.rs:339:14
[INFO] [stdout]     |
[INFO] [stdout] 339 | macro_rules! root {
[INFO] [stdout]     |              ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused macro definition: `reroot`
[INFO] [stdout]    --> src/gc.rs:351:14
[INFO] [stdout]     |
[INFO] [stdout] 351 | macro_rules! reroot {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `reroot` and `root`
[INFO] [stdout]   --> src/main.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | use gc::{Gc, root, reroot};
[INFO] [stdout]    |              ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/env.rs:143:27
[INFO] [stdout]     |
[INFO] [stdout] 143 |     syms: HashMap<Symbol, Datum>,
[INFO] [stdout]     |                           ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 141 ~ struct EnvInner<'a> {
[INFO] [stdout] 142 |     up: Option<Rc<Env>>,
[INFO] [stdout] 143 ~     syms: HashMap<Symbol, Datum<'a>>,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> src/error.rs:61:22
[INFO] [stdout]    |
[INFO] [stdout] 61 |     WrongTypeToApply(Datum),
[INFO] [stdout]    |                      ^^^^^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout]  6 ~         pub enum Error<'a> {
[INFO] [stdout]  7 |             $($id $(($($tt)*))?),*
[INFO] [stdout] ...
[INFO] [stdout] 60 |     (manual) TypeError(Type, Type),
[INFO] [stdout] 61 ~     WrongTypeToApply(Datum<'a>),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> src/error.rs:61:22
[INFO] [stdout]    |
[INFO] [stdout] 61 |     WrongTypeToApply(Datum),
[INFO] [stdout]    |                      ^^^^^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] 16 ~         pub struct $id<'a> $(($(pub $field),*))?;
[INFO] [stdout] 17 |         impl std::fmt::Display for $id {
[INFO] [stdout] ...
[INFO] [stdout] 60 |     (manual) TypeError(Type, Type),
[INFO] [stdout] 61 ~     WrongTypeToApply(Datum<'a>),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:368:28
[INFO] [stdout]     |
[INFO] [stdout] 368 | impl std::fmt::Display for List {
[INFO] [stdout]     |                            ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 368 | impl std::fmt::Display for List<'_> {
[INFO] [stdout]     |                                ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:377:26
[INFO] [stdout]     |
[INFO] [stdout] 377 | impl std::fmt::Debug for List {
[INFO] [stdout]     |                          ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 377 | impl std::fmt::Debug for List<'_> {
[INFO] [stdout]     |                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:383:6
[INFO] [stdout]     |
[INFO] [stdout] 383 | impl List {
[INFO] [stdout]     |      ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 383 | impl List<'_> {
[INFO] [stdout]     |          ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:384:26
[INFO] [stdout]     |
[INFO] [stdout] 384 |     fn to_datum(self) -> Datum {
[INFO] [stdout]     |                          ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]     |
[INFO] [stdout] 384 |     fn to_datum(self) -> Datum<'static> {
[INFO] [stdout]     |                               +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:391:49
[INFO] [stdout]     |
[INFO] [stdout] 391 |     fn as_args<const N: usize>(self) -> Result<[Datum; N], MismatchedParamNum> {
[INFO] [stdout]     |                                                 ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]     |
[INFO] [stdout] 391 |     fn as_args<const N: usize>(self) -> Result<[Datum<'static>; N], MismatchedParamNum> {
[INFO] [stdout]     |                                                      +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:397:58
[INFO] [stdout]     |
[INFO] [stdout] 397 |     fn as_args_and_rem<const N: usize>(self) -> Result<([Datum; N], Self), MismatchedParamNum> {
[INFO] [stdout]     |                                                          ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
[INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
[INFO] [stdout]     |
[INFO] [stdout] 397 |     fn as_args_and_rem<const N: usize>(self) -> Result<([Datum<'static>; N], Self), MismatchedParamNum> {
[INFO] [stdout]     |                                                               +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:424:23
[INFO] [stdout]     |
[INFO] [stdout] 424 | impl IntoIterator for List {
[INFO] [stdout]     |                       ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 424 | impl IntoIterator for List<'_> {
[INFO] [stdout]     |                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:425:17
[INFO] [stdout]     |
[INFO] [stdout] 425 |     type Item = Datum;
[INFO] [stdout]     |                 ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 424 ~ impl<'a> IntoIterator for List {
[INFO] [stdout] 425 ~     type Item = Datum<'a>;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:427:21
[INFO] [stdout]     |
[INFO] [stdout] 427 |     type IntoIter = DatumIter;
[INFO] [stdout]     |                     ^^^^^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 424 ~ impl<'a> IntoIterator for List {
[INFO] [stdout] 425 |     type Item = Datum;
[INFO] [stdout] 426 |
[INFO] [stdout] 427 ~     type IntoIter = DatumIter<'a>;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:434:19
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum> for List {
[INFO] [stdout]     |                   ^^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum<'_>> for List {
[INFO] [stdout]     |                        ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here
[INFO] [stdout]    --> src/main.rs:434:30
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum> for List {
[INFO] [stdout]     |                              ^^^^ expected lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] help: indicate the anonymous lifetime
[INFO] [stdout]     |
[INFO] [stdout] 434 | impl FromIterator<Datum> for List<'_> {
[INFO] [stdout]     |                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]    --> src/main.rs:435:41
[INFO] [stdout]     |
[INFO] [stdout] 435 |     fn from_iter<T: IntoIterator<Item = Datum>>(iter: T) -> Self {
[INFO] [stdout]     |                                         ^^^^^ expected named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout]     = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
[INFO] [stdout] help: consider making the bound lifetime-generic with a new `'a` lifetime
[INFO] [stdout]     |
[INFO] [stdout] 435 |     fn from_iter<T: for<'a> IntoIterator<Item = Datum<'a>>>(iter: T) -> Self {
[INFO] [stdout]     |                     +++++++                          ++++
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]     |
[INFO] [stdout] 435 |     fn from_iter<'a, T: IntoIterator<Item = Datum<'a>>>(iter: T) -> Self {
[INFO] [stdout]     |                  +++                             ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MaybeUninit`
[INFO] [stdout]  --> src/gc.rs:1:84
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{cell::{Cell, RefCell}, marker::{PhantomData, PhantomPinned}, mem::{self, MaybeUninit}, pin::Pin, ptr::{self, NonNull}};
[INFO] [stdout]   |                                                                                    ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ops::Deref`
[INFO] [stdout]  --> src/gc/root_ref.rs:1:32
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{marker::PhantomData, ops::Deref, pin::Pin, ptr::NonNull};
[INFO] [stdout]   |                                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Gc`
[INFO] [stdout]  --> src/gc/root_ref.rs:3:13
[INFO] [stdout]   |
[INFO] [stdout] 3 | use super::{Gc, Root, RootTruth};
[INFO] [stdout]   |             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused macro definition: `root`
[INFO] [stdout]    --> src/gc.rs:339:14
[INFO] [stdout]     |
[INFO] [stdout] 339 | macro_rules! root {
[INFO] [stdout]     |              ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused macro definition: `reroot`
[INFO] [stdout]    --> src/gc.rs:351:14
[INFO] [stdout]     |
[INFO] [stdout] 351 | macro_rules! reroot {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `reroot` and `root`
[INFO] [stdout]   --> src/main.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | use gc::{Gc, root, reroot};
[INFO] [stdout]    |              ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:10:43
[INFO] [stdout]    |
[INFO] [stdout] 10 |     env.declare("car".into(), Datum::Func(car));
[INFO] [stdout]    |                               ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                               |
[INFO] [stdout]    |                               arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {car}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 |     env.declare("cdr".into(), Datum::Func(cdr));
[INFO] [stdout]    |                               ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                               |
[INFO] [stdout]    |                               arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {cdr}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:10:43
[INFO] [stdout]    |
[INFO] [stdout] 10 |     env.declare("car".into(), Datum::Func(car));
[INFO] [stdout]    |                               ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                               |
[INFO] [stdout]    |                               arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {car}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 |     env.declare("cdr".into(), Datum::Func(cdr));
[INFO] [stdout]    |                               ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                               |
[INFO] [stdout]    |                               arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {cdr}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:12:46
[INFO] [stdout]    |
[INFO] [stdout] 12 |     env.declare("setcar".into(), Datum::Func(setcar));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {setcar}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:12:46
[INFO] [stdout]    |
[INFO] [stdout] 12 |     env.declare("setcar".into(), Datum::Func(setcar));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {setcar}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:13:46
[INFO] [stdout]    |
[INFO] [stdout] 13 |     env.declare("setcdr".into(), Datum::Func(setcdr));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {setcdr}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:14:44
[INFO] [stdout]    |
[INFO] [stdout] 14 |     env.declare("cons".into(), Datum::Func(cons));
[INFO] [stdout]    |                                ----------- ^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                |
[INFO] [stdout]    |                                arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {cons}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:15:45
[INFO] [stdout]    |
[INFO] [stdout] 15 |     env.declare("apply".into(), Datum::Func(apply));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {apply}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:13:46
[INFO] [stdout]    |
[INFO] [stdout] 13 |     env.declare("setcdr".into(), Datum::Func(setcdr));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {setcdr}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:14:44
[INFO] [stdout]    |
[INFO] [stdout] 14 |     env.declare("cons".into(), Datum::Func(cons));
[INFO] [stdout]    |                                ----------- ^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                |
[INFO] [stdout]    |                                arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {cons}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:15:45
[INFO] [stdout]    |
[INFO] [stdout] 15 |     env.declare("apply".into(), Datum::Func(apply));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {apply}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:16:41
[INFO] [stdout]    |
[INFO] [stdout] 16 |     env.declare("+".into(), Datum::Func(add));
[INFO] [stdout]    |                             ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {intrinsics::add}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:17:41
[INFO] [stdout]    |
[INFO] [stdout] 17 |     env.declare("-".into(), Datum::Func(sub));
[INFO] [stdout]    |                             ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {intrinsics::sub}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:18:41
[INFO] [stdout]    |
[INFO] [stdout] 18 |     env.declare("*".into(), Datum::Func(mul));
[INFO] [stdout]    |                             ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {intrinsics::mul}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:16:41
[INFO] [stdout]    |
[INFO] [stdout] 16 |     env.declare("+".into(), Datum::Func(add));
[INFO] [stdout]    |                             ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {intrinsics::add}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:19:44
[INFO] [stdout]    |
[INFO] [stdout] 19 |     env.declare("list".into(), Datum::Func(list));
[INFO] [stdout]    |                                ----------- ^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                |
[INFO] [stdout]    |                                arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {list}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:17:41
[INFO] [stdout]    |
[INFO] [stdout] 17 |     env.declare("-".into(), Datum::Func(sub));
[INFO] [stdout]    |                             ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {intrinsics::sub}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:20:46
[INFO] [stdout]    |
[INFO] [stdout] 20 |     env.declare("lambda".into(), Datum::Func(lambda));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {lambda}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:18:41
[INFO] [stdout]    |
[INFO] [stdout] 18 |     env.declare("*".into(), Datum::Func(mul));
[INFO] [stdout]    |                             ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {intrinsics::mul}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:21:45
[INFO] [stdout]    |
[INFO] [stdout] 21 |     env.declare("defun".into(), Datum::Func(defun));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {defun}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:19:44
[INFO] [stdout]    |
[INFO] [stdout] 19 |     env.declare("list".into(), Datum::Func(list));
[INFO] [stdout]    |                                ----------- ^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                |
[INFO] [stdout]    |                                arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {list}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:22:46
[INFO] [stdout]    |
[INFO] [stdout] 22 |     env.declare("defvar".into(), Datum::Func(defvar));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {defvar}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:23:43
[INFO] [stdout]    |
[INFO] [stdout] 23 |     env.declare("set".into(), Datum::Func(set));
[INFO] [stdout]    |                               ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                               |
[INFO] [stdout]    |                               arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {set}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:20:46
[INFO] [stdout]    |
[INFO] [stdout] 20 |     env.declare("lambda".into(), Datum::Func(lambda));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {lambda}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:24:47
[INFO] [stdout]    |
[INFO] [stdout] 24 |     env.declare("display".into(), Datum::Func(display));
[INFO] [stdout]    |                                   ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                   |
[INFO] [stdout]    |                                   arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {display}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:21:45
[INFO] [stdout]    |
[INFO] [stdout] 21 |     env.declare("defun".into(), Datum::Func(defun));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {defun}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:22:46
[INFO] [stdout]    |
[INFO] [stdout] 22 |     env.declare("defvar".into(), Datum::Func(defvar));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {defvar}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:23:43
[INFO] [stdout]    |
[INFO] [stdout] 23 |     env.declare("set".into(), Datum::Func(set));
[INFO] [stdout]    |                               ----------- ^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                               |
[INFO] [stdout]    |                               arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {set}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:25:42
[INFO] [stdout]    |
[INFO] [stdout] 25 |     env.declare("if".into(), Datum::Func(if_expr));
[INFO] [stdout]    |                              ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {if_expr}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:26:48
[INFO] [stdout]    |
[INFO] [stdout] 26 |     env.declare("function".into(), Datum::Func(function));
[INFO] [stdout]    |                                    ----------- ^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                    |
[INFO] [stdout]    |                                    arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {function}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:27:45
[INFO] [stdout]    |
[INFO] [stdout] 27 |     env.declare("quote".into(), Datum::Func(quote));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {quote}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:28:47
[INFO] [stdout]    |
[INFO] [stdout] 28 |     env.declare("unquote".into(), Datum::Func(unquote));
[INFO] [stdout]    |                                   ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                   |
[INFO] [stdout]    |                                   arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {unquote}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:24:47
[INFO] [stdout]    |
[INFO] [stdout] 24 |     env.declare("display".into(), Datum::Func(display));
[INFO] [stdout]    |                                   ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                   |
[INFO] [stdout]    |                                   arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {display}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:29:50
[INFO] [stdout]    |
[INFO] [stdout] 29 |     env.declare("quasiquote".into(), Datum::Func(quasiquote));
[INFO] [stdout]    |                                      ----------- ^^^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                      |
[INFO] [stdout]    |                                      arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {quasiquote}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:25:42
[INFO] [stdout]    |
[INFO] [stdout] 25 |     env.declare("if".into(), Datum::Func(if_expr));
[INFO] [stdout]    |                              ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {if_expr}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:30:45
[INFO] [stdout]    |
[INFO] [stdout] 30 |     env.declare("progn".into(), Datum::Func(progn));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {progn}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:26:48
[INFO] [stdout]    |
[INFO] [stdout] 26 |     env.declare("function".into(), Datum::Func(function));
[INFO] [stdout]    |                                    ----------- ^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                    |
[INFO] [stdout]    |                                    arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {function}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:31:51
[INFO] [stdout]    |
[INFO] [stdout] 31 |     env.declare("expandmacro".into(), Datum::Func(expandmacro));
[INFO] [stdout]    |                                       ----------- ^^^^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                       |
[INFO] [stdout]    |                                       arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {expandmacro}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:32:48
[INFO] [stdout]    |
[INFO] [stdout] 32 |     env.declare("defmacro".into(), Datum::Func(defmacro));
[INFO] [stdout]    |                                    ----------- ^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                    |
[INFO] [stdout]    |                                    arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {defmacro}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:27:45
[INFO] [stdout]    |
[INFO] [stdout] 27 |     env.declare("quote".into(), Datum::Func(quote));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {quote}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:33:47
[INFO] [stdout]    |
[INFO] [stdout] 33 |     env.declare("tagbody".into(), Datum::Func(tagbody));
[INFO] [stdout]    |                                   ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                   |
[INFO] [stdout]    |                                   arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {tagbody}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:28:47
[INFO] [stdout]    |
[INFO] [stdout] 28 |     env.declare("unquote".into(), Datum::Func(unquote));
[INFO] [stdout]    |                                   ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                   |
[INFO] [stdout]    |                                   arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {unquote}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:29:50
[INFO] [stdout]    |
[INFO] [stdout] 29 |     env.declare("quasiquote".into(), Datum::Func(quasiquote));
[INFO] [stdout]    |                                      ----------- ^^^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                      |
[INFO] [stdout]    |                                      arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {quasiquote}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:30:45
[INFO] [stdout]    |
[INFO] [stdout] 30 |     env.declare("progn".into(), Datum::Func(progn));
[INFO] [stdout]    |                                 ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {progn}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:31:51
[INFO] [stdout]    |
[INFO] [stdout] 31 |     env.declare("expandmacro".into(), Datum::Func(expandmacro));
[INFO] [stdout]    |                                       ----------- ^^^^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                       |
[INFO] [stdout]    |                                       arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {expandmacro}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:32:48
[INFO] [stdout]    |
[INFO] [stdout] 32 |     env.declare("defmacro".into(), Datum::Func(defmacro));
[INFO] [stdout]    |                                    ----------- ^^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                    |
[INFO] [stdout]    |                                    arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {defmacro}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:34:42
[INFO] [stdout]    |
[INFO] [stdout] 34 |     env.declare("go".into(), Datum::Func(go));
[INFO] [stdout]    |                              ----------- ^^ expected fn pointer, found fn item
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {go}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:35:46
[INFO] [stdout]    |
[INFO] [stdout] 35 |     env.declare("gensym".into(), Datum::Func(gensym));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {gensym}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:33:47
[INFO] [stdout]    |
[INFO] [stdout] 33 |     env.declare("tagbody".into(), Datum::Func(tagbody));
[INFO] [stdout]    |                                   ----------- ^^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                   |
[INFO] [stdout]    |                                   arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {tagbody}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:34:42
[INFO] [stdout]    |
[INFO] [stdout] 34 |     env.declare("go".into(), Datum::Func(go));
[INFO] [stdout]    |                              ----------- ^^ expected fn pointer, found fn item
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {go}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/intrinsics.rs:35:46
[INFO] [stdout]    |
[INFO] [stdout] 35 |     env.declare("gensym".into(), Datum::Func(gensym));
[INFO] [stdout]    |                                  ----------- ^^^^^^ expected fn pointer, found fn item
[INFO] [stdout]    |                                  |
[INFO] [stdout]    |                                  arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                  found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {gensym}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Gc<'_, Cons<'_>>: From<Cons<'_>>` is not satisfied
[INFO] [stdout]    --> src/intrinsics.rs:71:45
[INFO] [stdout]     |
[INFO] [stdout]  71 |     Ok(Datum::Cons(Cons::new_pair(car, cdr).into()))
[INFO] [stdout]     |                                             ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Cons<'_>>` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the trait `From<Root<'_, T>>` is implemented for `Gc<'_, T>`
[INFO] [stdout]    --> src/gc.rs:232:1
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl<'root, T: Trace + 'root> From<Root<'root, T>> for Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `Cons<'_>` to implement `Into<Gc<'_, Cons<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Gc<'_, Cons<'_>>: From<Cons<'_>>` is not satisfied
[INFO] [stdout]    --> src/intrinsics.rs:71:45
[INFO] [stdout]     |
[INFO] [stdout]  71 |     Ok(Datum::Cons(Cons::new_pair(car, cdr).into()))
[INFO] [stdout]     |                                             ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Cons<'_>>` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the trait `From<Root<'_, T>>` is implemented for `Gc<'_, T>`
[INFO] [stdout]    --> src/gc.rs:232:1
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl<'root, T: Trace + 'root> From<Root<'root, T>> for Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `Cons<'_>` to implement `Into<Gc<'_, Cons<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:75:43
[INFO] [stdout]     |
[INFO] [stdout]  75 |     let func = cons(l, env.clone())?.eval(env)?;
[INFO] [stdout]     |                                      ---- ^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |                                      |
[INFO] [stdout]     |                                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/main.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^        ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:75:43
[INFO] [stdout]     |
[INFO] [stdout]  75 |     let func = cons(l, env.clone())?.eval(env)?;
[INFO] [stdout]     |                                      ---- ^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |                                      |
[INFO] [stdout]     |                                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/main.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^        ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:120:29
[INFO] [stdout]     |
[INFO] [stdout] 120 |     let dat = Datum::Lambda(Rc::new(l));
[INFO] [stdout]     |               ------------- ^^^^^^^^^^ expected `Gc<'_, Lambda<'_>>`, found `Rc<Lambda<'_>>`
[INFO] [stdout]     |               |
[INFO] [stdout]     |               arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Lambda<'_>>`
[INFO] [stdout]                found struct `Rc<Lambda<'_>>`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> src/main.rs:25:5
[INFO] [stdout]     |
[INFO] [stdout]  25 |     Lambda(Gc<'r, Lambda<'r>>),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:120:29
[INFO] [stdout]     |
[INFO] [stdout] 120 |     let dat = Datum::Lambda(Rc::new(l));
[INFO] [stdout]     |               ------------- ^^^^^^^^^^ expected `Gc<'_, Lambda<'_>>`, found `Rc<Lambda<'_>>`
[INFO] [stdout]     |               |
[INFO] [stdout]     |               arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Lambda<'_>>`
[INFO] [stdout]                found struct `Rc<Lambda<'_>>`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> src/main.rs:25:5
[INFO] [stdout]     |
[INFO] [stdout]  25 |     Lambda(Gc<'r, Lambda<'r>>),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:272:31
[INFO] [stdout]     |
[INFO] [stdout] 272 |     m.expand(args.as_list()?, env)
[INFO] [stdout]     |       ------                  ^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |       |
[INFO] [stdout]     |       arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/main.rs:195:8
[INFO] [stdout]     |
[INFO] [stdout] 195 |     fn expand(&self, l: List, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^^^                 ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:272:31
[INFO] [stdout]     |
[INFO] [stdout] 272 |     m.expand(args.as_list()?, env)
[INFO] [stdout]     |       ------                  ^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |       |
[INFO] [stdout]     |       arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/main.rs:195:8
[INFO] [stdout]     |
[INFO] [stdout] 195 |     fn expand(&self, l: List, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^^^                 ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:286:55
[INFO] [stdout]     |
[INFO] [stdout] 286 |     let body = Datum::Cons(Cons::new_pair(Datum::Func(progn), body).into());
[INFO] [stdout]     |                                           ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]     |                                           |
[INFO] [stdout]     |                                           arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                   found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {progn}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> src/main.rs:24:5
[INFO] [stdout]     |
[INFO] [stdout]  24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:286:55
[INFO] [stdout]     |
[INFO] [stdout] 286 |     let body = Datum::Cons(Cons::new_pair(Datum::Func(progn), body).into());
[INFO] [stdout]     |                                           ----------- ^^^^^ expected fn pointer, found fn item
[INFO] [stdout]     |                                           |
[INFO] [stdout]     |                                           arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected fn pointer `for<'a> fn(List<'a>, Gc<'_, Env>) -> Result<Datum<'_>, _>`
[INFO] [stdout]                   found fn item `for<'a> fn(List<'a>, Rc<Env>) -> Result<Datum<'a>, _> {progn}`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> src/main.rs:24:5
[INFO] [stdout]     |
[INFO] [stdout]  24 |     Func(fn(List, Gc<'r, Env>) -> LispResult<'r>),
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Gc<'_, Cons<'_>>: From<Cons<'_>>` is not satisfied
[INFO] [stdout]    --> src/intrinsics.rs:286:69
[INFO] [stdout]     |
[INFO] [stdout] 286 |     let body = Datum::Cons(Cons::new_pair(Datum::Func(progn), body).into());
[INFO] [stdout]     |                                                                     ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Cons<'_>>` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the trait `From<Root<'_, T>>` is implemented for `Gc<'_, T>`
[INFO] [stdout]    --> src/gc.rs:232:1
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl<'root, T: Trace + 'root> From<Root<'root, T>> for Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `Cons<'_>` to implement `Into<Gc<'_, Cons<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Gc<'_, Cons<'_>>: From<Cons<'_>>` is not satisfied
[INFO] [stdout]    --> src/intrinsics.rs:286:69
[INFO] [stdout]     |
[INFO] [stdout] 286 |     let body = Datum::Cons(Cons::new_pair(Datum::Func(progn), body).into());
[INFO] [stdout]     |                                                                     ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Cons<'_>>` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the trait `From<Root<'_, T>>` is implemented for `Gc<'_, T>`
[INFO] [stdout]    --> src/gc.rs:232:1
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl<'root, T: Trace + 'root> From<Root<'root, T>> for Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `Cons<'_>` to implement `Into<Gc<'_, Cons<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:291:28
[INFO] [stdout]     |
[INFO] [stdout] 291 |     let ret = Datum::Macro(Rc::new(m));
[INFO] [stdout]     |               ------------ ^^^^^^^^^^ expected `Gc<'_, Macro<'_>>`, found `Rc<Macro<'_>>`
[INFO] [stdout]     |               |
[INFO] [stdout]     |               arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Macro<'_>>`
[INFO] [stdout]                found struct `Rc<Macro<'_>>`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> src/main.rs:27:5
[INFO] [stdout]     |
[INFO] [stdout]  27 |     Macro(Gc<'r, Macro<'r>>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:291:28
[INFO] [stdout]     |
[INFO] [stdout] 291 |     let ret = Datum::Macro(Rc::new(m));
[INFO] [stdout]     |               ------------ ^^^^^^^^^^ expected `Gc<'_, Macro<'_>>`, found `Rc<Macro<'_>>`
[INFO] [stdout]     |               |
[INFO] [stdout]     |               arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Macro<'_>>`
[INFO] [stdout]                found struct `Rc<Macro<'_>>`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> src/main.rs:27:5
[INFO] [stdout]     |
[INFO] [stdout]  27 |     Macro(Gc<'r, Macro<'r>>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/intrinsics.rs:306:24
[INFO] [stdout]     |
[INFO] [stdout] 306 |         let car = cons.get_car();
[INFO] [stdout]     |                        ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/main.rs:20:1
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/intrinsics.rs:306:24
[INFO] [stdout]     |
[INFO] [stdout] 306 |         let car = cons.get_car();
[INFO] [stdout]     |                        ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/main.rs:20:1
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:308:34
[INFO] [stdout]     |
[INFO] [stdout] 303 |         labels.insert(sym, head.clone());
[INFO] [stdout]     |         ------             ------------ this argument has type `Gc<'_, Cons<'_>>`...
[INFO] [stdout]     |         |
[INFO] [stdout]     |         ... which causes `labels` to have type `HashMap<Symbol, Gc<'_, Cons<'_>>>`
[INFO] [stdout] ...
[INFO] [stdout] 308 |             labels.insert(label, cons.clone());
[INFO] [stdout]     |                    ------        ^^^^^^^^^^^^ expected `Gc<'_, Cons<'_>>`, found `Datum<'_>`
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Cons<'_>>`
[INFO] [stdout]                  found enum `Datum<'_>`
[INFO] [stdout] help: the return type of this call is `Datum<'_>` due to the type of the argument passed
[INFO] [stdout]    --> src/intrinsics.rs:308:13
[INFO] [stdout]     |
[INFO] [stdout] 308 |             labels.insert(label, cons.clone());
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^------------^
[INFO] [stdout]     |                                  |
[INFO] [stdout]     |                                  this argument influences the return type of `insert`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/std/src/collections/hash/map.rs:1332:11
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:308:34
[INFO] [stdout]     |
[INFO] [stdout] 303 |         labels.insert(sym, head.clone());
[INFO] [stdout]     |         ------             ------------ this argument has type `Gc<'_, Cons<'_>>`...
[INFO] [stdout]     |         |
[INFO] [stdout]     |         ... which causes `labels` to have type `HashMap<Symbol, Gc<'_, Cons<'_>>>`
[INFO] [stdout] ...
[INFO] [stdout] 308 |             labels.insert(label, cons.clone());
[INFO] [stdout]     |                    ------        ^^^^^^^^^^^^ expected `Gc<'_, Cons<'_>>`, found `Datum<'_>`
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Cons<'_>>`
[INFO] [stdout]                  found enum `Datum<'_>`
[INFO] [stdout] help: the return type of this call is `Datum<'_>` due to the type of the argument passed
[INFO] [stdout]    --> src/intrinsics.rs:308:13
[INFO] [stdout]     |
[INFO] [stdout] 308 |             labels.insert(label, cons.clone());
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^------------^
[INFO] [stdout]     |                                  |
[INFO] [stdout]     |                                  this argument influences the return type of `insert`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/std/src/collections/hash/map.rs:1332:11
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/intrinsics.rs:312:21
[INFO] [stdout]     |
[INFO] [stdout] 312 |         next = cons.get_cdr()
[INFO] [stdout]     |                     ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/main.rs:20:1
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:316:37
[INFO] [stdout]     |
[INFO] [stdout] 316 |         let res = ip.get_car().eval(env.clone())?;
[INFO] [stdout]     |                                ---- ^^^^^^^^^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/main.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^        ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:322:18
[INFO] [stdout]     |
[INFO] [stdout] 314 |     let mut ip = head;
[INFO] [stdout]     |                  ---- expected due to this value
[INFO] [stdout] ...
[INFO] [stdout] 322 |             ip = next;
[INFO] [stdout]     |                  ^^^^ expected `Gc<'_, Cons<'_>>`, found `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Cons<'_>>`
[INFO] [stdout]                  found enum `Datum<'_>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/intrinsics.rs:312:21
[INFO] [stdout]     |
[INFO] [stdout] 312 |         next = cons.get_cdr()
[INFO] [stdout]     |                     ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/main.rs:20:1
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: `?` operator has incompatible types
[INFO] [stdout]    --> src/intrinsics.rs:337:32
[INFO] [stdout]     |
[INFO] [stdout] 337 |         let name: Rc<String> = name.try_as()?;
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^ expected `Rc<String>`, found `Gc<'_, _>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `?` operator cannot convert from `Gc<'_, _>` to `Rc<String>`
[INFO] [stdout]     = note: expected struct `Rc<String>`
[INFO] [stdout]                found struct `Gc<'_, _>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:316:37
[INFO] [stdout]     |
[INFO] [stdout] 316 |         let res = ip.get_car().eval(env.clone())?;
[INFO] [stdout]     |                                ---- ^^^^^^^^^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/main.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^        ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/intrinsics.rs:322:18
[INFO] [stdout]     |
[INFO] [stdout] 314 |     let mut ip = head;
[INFO] [stdout]     |                  ---- expected due to this value
[INFO] [stdout] ...
[INFO] [stdout] 322 |             ip = next;
[INFO] [stdout]     |                  ^^^^ expected `Gc<'_, Cons<'_>>`, found `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Cons<'_>>`
[INFO] [stdout]                  found enum `Datum<'_>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: `?` operator has incompatible types
[INFO] [stdout]    --> src/intrinsics.rs:337:32
[INFO] [stdout]     |
[INFO] [stdout] 337 |         let name: Rc<String> = name.try_as()?;
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^ expected `Rc<String>`, found `Gc<'_, _>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `?` operator cannot convert from `Gc<'_, _>` to `Rc<String>`
[INFO] [stdout]     = note: expected struct `Rc<String>`
[INFO] [stdout]                found struct `Gc<'_, _>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:211:42
[INFO] [stdout]     |
[INFO] [stdout] 202 | impl<'a, T: Trace + 'a> RootTruth<Gc<'a, T>> {
[INFO] [stdout]     |          - found this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 211 |         Root { truth: PhantomData, item: this.item.item }
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^ expected `NonNull<Allocation<T>>`, found `NonNull<T>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<Allocation<T>>`
[INFO] [stdout]                found struct `NonNull<T>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:225:19
[INFO] [stdout]     |
[INFO] [stdout] 222 | impl<'root, T: Trace + 'root> Root<'root, T> {
[INFO] [stdout]     |             - expected this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 225 |             item: self.item,
[INFO] [stdout]     |                   ^^^^^^^^^ expected `NonNull<T>`, found `NonNull<Allocation<T>>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<T>`
[INFO] [stdout]                found struct `NonNull<Allocation<T>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:245:19
[INFO] [stdout]     |
[INFO] [stdout] 238 | impl<'root, 'old, T> Root<'root, T> 
[INFO] [stdout]     |                   - found this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 245 |             item: item.item,
[INFO] [stdout]     |                   ^^^^^^^^^ expected `NonNull<Allocation<_>>`, found `NonNull<T>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<Allocation<_>>`
[INFO] [stdout]                found struct `NonNull<T>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:211:42
[INFO] [stdout]     |
[INFO] [stdout] 202 | impl<'a, T: Trace + 'a> RootTruth<Gc<'a, T>> {
[INFO] [stdout]     |          - found this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 211 |         Root { truth: PhantomData, item: this.item.item }
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^ expected `NonNull<Allocation<T>>`, found `NonNull<T>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<Allocation<T>>`
[INFO] [stdout]                found struct `NonNull<T>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:225:19
[INFO] [stdout]     |
[INFO] [stdout] 222 | impl<'root, T: Trace + 'root> Root<'root, T> {
[INFO] [stdout]     |             - expected this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 225 |             item: self.item,
[INFO] [stdout]     |                   ^^^^^^^^^ expected `NonNull<T>`, found `NonNull<Allocation<T>>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<T>`
[INFO] [stdout]                found struct `NonNull<Allocation<T>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:294:16
[INFO] [stdout]     |
[INFO] [stdout] 290 | impl<'root, T> Gc<'root, T> {
[INFO] [stdout]     |             - expected this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 294 |         Self { item, _lifetime: PhantomData, _aliased: PhantomPinned }
[INFO] [stdout]     |                ^^^^ expected `NonNull<T>`, found `NonNull<Allocation<T>>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<T>`
[INFO] [stdout]                found struct `NonNull<Allocation<T>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `marked` on type `T`
[INFO] [stdout]    --> src/gc.rs:300:34
[INFO] [stdout]     |
[INFO] [stdout] 290 | impl<'root, T> Gc<'root, T> {
[INFO] [stdout]     |             - type parameter 'T' declared here
[INFO] [stdout] ...
[INFO] [stdout] 300 |         unsafe { (*ptr.as_ptr()).marked.set(mark) }
[INFO] [stdout]     |                                  ^^^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:245:19
[INFO] [stdout]     |
[INFO] [stdout] 238 | impl<'root, 'old, T> Root<'root, T> 
[INFO] [stdout]     |                   - found this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 245 |             item: item.item,
[INFO] [stdout]     |                   ^^^^^^^^^ expected `NonNull<Allocation<_>>`, found `NonNull<T>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<Allocation<_>>`
[INFO] [stdout]                found struct `NonNull<T>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `marked` on type `T`
[INFO] [stdout]    --> src/gc.rs:305:34
[INFO] [stdout]     |
[INFO] [stdout] 290 | impl<'root, T> Gc<'root, T> {
[INFO] [stdout]     |             - type parameter 'T' declared here
[INFO] [stdout] ...
[INFO] [stdout] 305 |         unsafe { (*ptr.as_ptr()).marked.get() == with_mark }
[INFO] [stdout]     |                                  ^^^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `item` on type `T`
[INFO] [stdout]    --> src/gc.rs:321:35
[INFO] [stdout]     |
[INFO] [stdout] 313 | impl<T> std::ops::Deref for Gc<'_, T> {
[INFO] [stdout]     |      - type parameter 'T' declared here
[INFO] [stdout] ...
[INFO] [stdout] 321 |         unsafe { &(*ptr.as_ptr()).item }
[INFO] [stdout]     |                                   ^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/gc.rs:294:16
[INFO] [stdout]     |
[INFO] [stdout] 290 | impl<'root, T> Gc<'root, T> {
[INFO] [stdout]     |             - expected this type parameter
[INFO] [stdout] ...
[INFO] [stdout] 294 |         Self { item, _lifetime: PhantomData, _aliased: PhantomPinned }
[INFO] [stdout]     |                ^^^^ expected `NonNull<T>`, found `NonNull<Allocation<T>>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `NonNull<T>`
[INFO] [stdout]                found struct `NonNull<Allocation<T>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `marked` on type `T`
[INFO] [stdout]    --> src/gc.rs:300:34
[INFO] [stdout]     |
[INFO] [stdout] 290 | impl<'root, T> Gc<'root, T> {
[INFO] [stdout]     |             - type parameter 'T' declared here
[INFO] [stdout] ...
[INFO] [stdout] 300 |         unsafe { (*ptr.as_ptr()).marked.set(mark) }
[INFO] [stdout]     |                                  ^^^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `marked` on type `T`
[INFO] [stdout]    --> src/gc.rs:305:34
[INFO] [stdout]     |
[INFO] [stdout] 290 | impl<'root, T> Gc<'root, T> {
[INFO] [stdout]     |             - type parameter 'T' declared here
[INFO] [stdout] ...
[INFO] [stdout] 305 |         unsafe { (*ptr.as_ptr()).marked.get() == with_mark }
[INFO] [stdout]     |                                  ^^^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `item` on type `T`
[INFO] [stdout]    --> src/gc.rs:321:35
[INFO] [stdout]     |
[INFO] [stdout] 313 | impl<T> std::ops::Deref for Gc<'_, T> {
[INFO] [stdout]     |      - type parameter 'T' declared here
[INFO] [stdout] ...
[INFO] [stdout] 321 |         unsafe { &(*ptr.as_ptr()).item }
[INFO] [stdout]     |                                   ^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:162:27
[INFO] [stdout]     |
[INFO] [stdout] 162 |                 return Ok(ret)
[INFO] [stdout]     |                        -- ^^^ expected `Gc<'_, T>`, found `Box<_>`
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, T>`
[INFO] [stdout]                found struct `Box<_>`
[INFO] [stdout] help: the type constructed contains `Box<_>` due to the type of the argument passed
[INFO] [stdout]    --> src/main.rs:162:24
[INFO] [stdout]     |
[INFO] [stdout] 162 |                 return Ok(ret)
[INFO] [stdout]     |                        ^^^---^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           this argument influences the type of `Ok`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/result.rs:562:4
[INFO] [stdout] help: consider unboxing the value
[INFO] [stdout]     |
[INFO] [stdout] 162 |                 return Ok(*ret)
[INFO] [stdout]     |                           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:184:46
[INFO] [stdout]     |
[INFO] [stdout] 184 |         intrinsics::progn(self.body.clone(), env)
[INFO] [stdout]     |         -----------------                    ^^^ expected `Rc<Env>`, found `Gc<'_, Env>`
[INFO] [stdout]     |         |
[INFO] [stdout]     |         arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Rc<Env>`
[INFO] [stdout]                found struct `Gc<'_, Env>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/intrinsics.rs:262:8
[INFO] [stdout]     |
[INFO] [stdout] 262 | pub fn progn(l: List, env: Rc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^^          ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:162:27
[INFO] [stdout]     |
[INFO] [stdout] 162 |                 return Ok(ret)
[INFO] [stdout]     |                        -- ^^^ expected `Gc<'_, T>`, found `Box<_>`
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, T>`
[INFO] [stdout]                found struct `Box<_>`
[INFO] [stdout] help: the type constructed contains `Box<_>` due to the type of the argument passed
[INFO] [stdout]    --> src/main.rs:162:24
[INFO] [stdout]     |
[INFO] [stdout] 162 |                 return Ok(ret)
[INFO] [stdout]     |                        ^^^---^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           this argument influences the type of `Ok`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/result.rs:562:4
[INFO] [stdout] help: consider unboxing the value
[INFO] [stdout]     |
[INFO] [stdout] 162 |                 return Ok(*ret)
[INFO] [stdout]     |                           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Cell<Datum<'_>>: From<Option<Gc<'_, Cons<'_>>>>` is not satisfied
[INFO] [stdout]    --> src/main.rs:212:24
[INFO] [stdout]     |
[INFO] [stdout] 212 |             cdr: cdr.0.into(),
[INFO] [stdout]     |                        ^^^^ the trait `From<Option<Gc<'_, Cons<'_>>>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Option<Gc<'_, Cons<'_>>>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]       but trait `From<Datum<'_>>` is implemented for it
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/cell.rs:397:0
[INFO] [stdout]     = help: for that trait implementation, expected `Datum<'_>`, found `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]     = note: required for `Option<Gc<'_, Cons<'_>>>` to implement `Into<Cell<Datum<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:184:46
[INFO] [stdout]     |
[INFO] [stdout] 184 |         intrinsics::progn(self.body.clone(), env)
[INFO] [stdout]     |         -----------------                    ^^^ expected `Rc<Env>`, found `Gc<'_, Env>`
[INFO] [stdout]     |         |
[INFO] [stdout]     |         arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Rc<Env>`
[INFO] [stdout]                found struct `Gc<'_, Env>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/intrinsics.rs:262:8
[INFO] [stdout]     |
[INFO] [stdout] 262 | pub fn progn(l: List, env: Rc<Env>) -> LispResult {
[INFO] [stdout]     |        ^^^^^          ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Cell<Datum<'_>>: From<Option<Gc<'_, Cons<'_>>>>` is not satisfied
[INFO] [stdout]    --> src/main.rs:212:24
[INFO] [stdout]     |
[INFO] [stdout] 212 |             cdr: cdr.0.into(),
[INFO] [stdout]     |                        ^^^^ the trait `From<Option<Gc<'_, Cons<'_>>>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Option<Gc<'_, Cons<'_>>>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]       but trait `From<Datum<'_>>` is implemented for it
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/cell.rs:397:0
[INFO] [stdout]     = help: for that trait implementation, expected `Datum<'_>`, found `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]     = note: required for `Option<Gc<'_, Cons<'_>>>` to implement `Into<Cell<Datum<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:219:18
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 219 |         if right.get_cdr().is_some() {
[INFO] [stdout]     |                  ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:222:25
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 222 |         Ok((left, right.get_car()))
[INFO] [stdout]     |                         ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:219:18
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 219 |         if right.get_cdr().is_some() {
[INFO] [stdout]     |                  ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Cell<Datum<'_>>: From<Option<_>>` is not satisfied
[INFO] [stdout]    --> src/main.rs:228:23
[INFO] [stdout]     |
[INFO] [stdout] 228 |             cdr: None.into(),
[INFO] [stdout]     |                       ^^^^ the trait `From<Option<_>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Option<_>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]       but trait `From<Datum<'_>>` is implemented for it
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/cell.rs:397:0
[INFO] [stdout]     = help: for that trait implementation, expected `Datum<'_>`, found `Option<_>`
[INFO] [stdout]     = note: required for `Option<_>` to implement `Into<Cell<Datum<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:222:25
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 222 |         Ok((left, right.get_car()))
[INFO] [stdout]     |                         ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated function or constant named `new` found for struct `Gc<'_, _>` in the current scope
[INFO] [stdout]    --> src/main.rs:236:27
[INFO] [stdout]     |
[INFO] [stdout] 236 |             let new = Gc::new(Cons::new(datum));
[INFO] [stdout]     |                           ^^^ associated function or constant not found in `Gc<'_, _>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- associated function or constant `new` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Cell<Datum<'_>>: From<Option<_>>` is not satisfied
[INFO] [stdout]    --> src/main.rs:228:23
[INFO] [stdout]     |
[INFO] [stdout] 228 |             cdr: None.into(),
[INFO] [stdout]     |                       ^^^^ the trait `From<Option<_>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Option<_>>` is not implemented for `Cell<Datum<'_>>`
[INFO] [stdout]       but trait `From<Datum<'_>>` is implemented for it
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/cell.rs:397:0
[INFO] [stdout]     = help: for that trait implementation, expected `Datum<'_>`, found `Option<_>`
[INFO] [stdout]     = note: required for `Option<_>` to implement `Into<Cell<Datum<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:254:22
[INFO] [stdout]     |
[INFO] [stdout] 254 |         self.cdr.set(cdr)
[INFO] [stdout]     |                  --- ^^^ expected `Datum<'_>`, found `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]     |                  |
[INFO] [stdout]     |                  arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Datum<'r>`
[INFO] [stdout]                found enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/cell.rs:436:17
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated function or constant named `new` found for struct `Gc<'_, _>` in the current scope
[INFO] [stdout]    --> src/main.rs:236:27
[INFO] [stdout]     |
[INFO] [stdout] 236 |             let new = Gc::new(Cons::new(datum));
[INFO] [stdout]     |                           ^^^ associated function or constant not found in `Gc<'_, _>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- associated function or constant `new` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:266:9
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |                          ------------- expected `Option<Datum<'_>>` because of return type
[INFO] [stdout] ...
[INFO] [stdout] 266 |         cdr
[INFO] [stdout]     |         ^^^ expected `Option<Datum<'_>>`, found `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Datum<'_>>`
[INFO] [stdout]                found enum `Datum<'r>`
[INFO] [stdout] help: try wrapping the expression in `Some`
[INFO] [stdout]     |
[INFO] [stdout] 266 |         Some(cdr)
[INFO] [stdout]     |         +++++   +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:271:34
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 271 |         self.get_cdr().map(|x| x.get_car())
[INFO] [stdout]     |                                  ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:254:22
[INFO] [stdout]     |
[INFO] [stdout] 254 |         self.cdr.set(cdr)
[INFO] [stdout]     |                  --- ^^^ expected `Datum<'_>`, found `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]     |                  |
[INFO] [stdout]     |                  arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Datum<'r>`
[INFO] [stdout]                found enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/cell.rs:436:17
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:266:9
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |                          ------------- expected `Option<Datum<'_>>` because of return type
[INFO] [stdout] ...
[INFO] [stdout] 266 |         cdr
[INFO] [stdout]     |         ^^^ expected `Option<Datum<'_>>`, found `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Datum<'_>>`
[INFO] [stdout]                found enum `Datum<'r>`
[INFO] [stdout] help: try wrapping the expression in `Some`
[INFO] [stdout]     |
[INFO] [stdout] 266 |         Some(cdr)
[INFO] [stdout]     |         +++++   +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:276:39
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 276 |         self.get_cdr().and_then(|x| x.get_cdr()).map(|x| x.get_car())
[INFO] [stdout]     |                                       ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:302:46
[INFO] [stdout]     |
[INFO] [stdout] 302 |             Datum::Macro(m) => m.expand(List(self.get_cdr()), env.clone())?.eval(env),
[INFO] [stdout]     |                                         ---- ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |                                         |
[INFO] [stdout]     |                                         arguments to this struct are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] note: tuple struct defined here
[INFO] [stdout]    --> src/main.rs:364:8
[INFO] [stdout]     |
[INFO] [stdout] 364 | struct List<'r>(Option<Gc<'r, Cons<'r>>>);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:303:38
[INFO] [stdout]     |
[INFO] [stdout] 303 |             Datum::Func(f) => f(List(self.get_cdr()), env),
[INFO] [stdout]     |                                 ---- ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |                                 |
[INFO] [stdout]     |                                 arguments to this struct are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] note: tuple struct defined here
[INFO] [stdout]    --> src/main.rs:364:8
[INFO] [stdout]     |
[INFO] [stdout] 364 | struct List<'r>(Option<Gc<'r, Cons<'r>>>);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:271:34
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 271 |         self.get_cdr().map(|x| x.get_car())
[INFO] [stdout]     |                                  ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:304:45
[INFO] [stdout]     |
[INFO] [stdout] 304 |             Datum::Lambda(l) => l.eval(List(self.get_cdr()), env),
[INFO] [stdout]     |                                        ---- ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |                                        |
[INFO] [stdout]     |                                        arguments to this struct are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] note: tuple struct defined here
[INFO] [stdout]    --> src/main.rs:364:8
[INFO] [stdout]     |
[INFO] [stdout] 364 | struct List<'r>(Option<Gc<'r, Cons<'r>>>);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:276:39
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 276 |         self.get_cdr().and_then(|x| x.get_cdr()).map(|x| x.get_car())
[INFO] [stdout]     |                                       ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:302:46
[INFO] [stdout]     |
[INFO] [stdout] 302 |             Datum::Macro(m) => m.expand(List(self.get_cdr()), env.clone())?.eval(env),
[INFO] [stdout]     |                                         ---- ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |                                         |
[INFO] [stdout]     |                                         arguments to this struct are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] note: tuple struct defined here
[INFO] [stdout]    --> src/main.rs:364:8
[INFO] [stdout]     |
[INFO] [stdout] 364 | struct List<'r>(Option<Gc<'r, Cons<'r>>>);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:303:38
[INFO] [stdout]     |
[INFO] [stdout] 303 |             Datum::Func(f) => f(List(self.get_cdr()), env),
[INFO] [stdout]     |                                 ---- ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |                                 |
[INFO] [stdout]     |                                 arguments to this struct are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] note: tuple struct defined here
[INFO] [stdout]    --> src/main.rs:364:8
[INFO] [stdout]     |
[INFO] [stdout] 364 | struct List<'r>(Option<Gc<'r, Cons<'r>>>);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `extend_with` found for struct `Gc<'_, Env>` in the current scope
[INFO] [stdout]    --> src/main.rs:307:32
[INFO] [stdout]     |
[INFO] [stdout] 307 |                 inner.eval(env.extend_with(&e)).inspect_err(|e| eprintln!("dynamic extent error {e}"))
[INFO] [stdout]     |                                ^^^^^^^^^^^ method not found in `Gc<'_, Env>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- method `extend_with` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:304:45
[INFO] [stdout]     |
[INFO] [stdout] 304 |             Datum::Lambda(l) => l.eval(List(self.get_cdr()), env),
[INFO] [stdout]     |                                        ---- ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |                                        |
[INFO] [stdout]     |                                        arguments to this struct are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'_, Cons<'_>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] note: tuple struct defined here
[INFO] [stdout]    --> src/main.rs:364:8
[INFO] [stdout]     |
[INFO] [stdout] 364 | struct List<'r>(Option<Gc<'r, Cons<'r>>>);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:329:21
[INFO] [stdout]     |
[INFO] [stdout] 329 |         self.cons = curr.get_cdr();
[INFO] [stdout]     |         ---------   ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |         |
[INFO] [stdout]     |         expected due to the type of this binding
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'r, Cons<'r>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `extend_with` found for struct `Gc<'_, Env>` in the current scope
[INFO] [stdout]    --> src/main.rs:307:32
[INFO] [stdout]     |
[INFO] [stdout] 307 |                 inner.eval(env.extend_with(&e)).inspect_err(|e| eprintln!("dynamic extent error {e}"))
[INFO] [stdout]     |                                ^^^^^^^^^^^ method not found in `Gc<'_, Env>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- method `extend_with` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Gc<'_, Cons<'_>>` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/main.rs:339:45
[INFO] [stdout]     |
[INFO] [stdout] 339 |             Datum::Cons(cons) => write!(f, "{cons}"),
[INFO] [stdout]     |                                             ^^^^^^ `Gc<'_, Cons<'_>>` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or `{:#?}` for pretty-print) instead
[INFO] [stdout]     = note: required for `&Gc<'_, Cons<'_>>` to implement `std::fmt::Display`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:329:21
[INFO] [stdout]     |
[INFO] [stdout] 329 |         self.cons = curr.get_cdr();
[INFO] [stdout]     |         ---------   ^^^^^^^^^^^^^^ expected `Option<Gc<'_, Cons<'_>>>`, found `Option<Datum<'_>>`
[INFO] [stdout]     |         |
[INFO] [stdout]     |         expected due to the type of this binding
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected enum `Option<Gc<'r, Cons<'r>>>`
[INFO] [stdout]                found enum `Option<Datum<'_>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Gc<'_, Cons<'_>>` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/main.rs:339:45
[INFO] [stdout]     |
[INFO] [stdout] 339 |             Datum::Cons(cons) => write!(f, "{cons}"),
[INFO] [stdout]     |                                             ^^^^^^ `Gc<'_, Cons<'_>>` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or `{:#?}` for pretty-print) instead
[INFO] [stdout]     = note: required for `&Gc<'_, Cons<'_>>` to implement `std::fmt::Display`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:356:35
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 356 |             write!(f, " {}", cons.get_car())?;
[INFO] [stdout]     |                                   ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_car` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:356:35
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_car` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 356 |             write!(f, " {}", cons.get_car())?;
[INFO] [stdout]     |                                   ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_car` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:357:24
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 357 |             cdr = cons.get_cdr();
[INFO] [stdout]     |                        ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `get_cdr` found for enum `Datum<'r>` in the current scope
[INFO] [stdout]    --> src/main.rs:357:24
[INFO] [stdout]     |
[INFO] [stdout]  20 | enum Datum<'r> {
[INFO] [stdout]     | -------------- method `get_cdr` not found for this enum
[INFO] [stdout] ...
[INFO] [stdout] 357 |             cdr = cons.get_cdr();
[INFO] [stdout]     |                        ^^^^^^^ method not found in `Datum<'_>`
[INFO] [stdout]     |
[INFO] [stdout] note: the method `get_cdr` exists on the type `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/main.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 |     fn get_cdr(&self) -> Option<Datum> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `extend` found for struct `Gc<'_, Env>` in the current scope
[INFO] [stdout]    --> src/main.rs:479:23
[INFO] [stdout]     |
[INFO] [stdout] 479 |         let env = env.extend();
[INFO] [stdout]     |                       ^^^^^^ method not found in `Gc<'_, Env>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- method `extend` not found for this struct
[INFO] [stdout]     |
[INFO] [stdout]     = help: items from traits can only be used if the trait is implemented and in scope
[INFO] [stdout]     = note: the following trait defines an item `extend`, perhaps you need to implement it:
[INFO] [stdout]             candidate #1: `Extend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Gc<'_, Cons<'_>>: From<Cons<'_>>` is not satisfied
[INFO] [stdout]    --> src/main.rs:529:53
[INFO] [stdout]     |
[INFO] [stdout] 529 |         (Datum::Cons(Cons::new_pair(car, List(cdr)).into()), rem)
[INFO] [stdout]     |                                                     ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Cons<'_>>` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the trait `From<Root<'_, T>>` is implemented for `Gc<'_, T>`
[INFO] [stdout]    --> src/gc.rs:232:1
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl<'root, T: Trace + 'root> From<Root<'root, T>> for Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `Cons<'_>` to implement `Into<Gc<'_, Cons<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the size for values of type `(dyn Any + 'static)` cannot be known at compilation time
[INFO] [stdout]    --> src/main.rs:540:26
[INFO] [stdout]     |
[INFO] [stdout] 540 |                 let ret: Gc<dyn Any> = Gc::new(buf);
[INFO] [stdout]     |                          ^^^^^^^^^^^ doesn't have a size known at compile-time
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `Sized` is not implemented for `(dyn Any + 'static)`
[INFO] [stdout] note: required by an implicit `Sized` bound in `Gc`
[INFO] [stdout]    --> src/gc.rs:273:22
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     |                      ^ required by the implicit `Sized` requirement on this type parameter in `Gc`
[INFO] [stdout] help: consider relaxing the implicit `Sized` restriction
[INFO] [stdout]    --> src/gc.rs:273:23
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T: ?Sized> {
[INFO] [stdout]     |                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `extend` found for struct `Gc<'_, Env>` in the current scope
[INFO] [stdout]    --> src/main.rs:479:23
[INFO] [stdout]     |
[INFO] [stdout] 479 |         let env = env.extend();
[INFO] [stdout]     |                       ^^^^^^ method not found in `Gc<'_, Env>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- method `extend` not found for this struct
[INFO] [stdout]     |
[INFO] [stdout]     = help: items from traits can only be used if the trait is implemented and in scope
[INFO] [stdout]     = note: the following trait defines an item `extend`, perhaps you need to implement it:
[INFO] [stdout]             candidate #1: `Extend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated function or constant named `new` found for struct `Gc<'_, _>` in the current scope
[INFO] [stdout]    --> src/main.rs:540:44
[INFO] [stdout]     |
[INFO] [stdout] 540 |                 let ret: Gc<dyn Any> = Gc::new(buf);
[INFO] [stdout]     |                                            ^^^ associated function or constant not found in `Gc<'_, _>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- associated function or constant `new` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Gc<'_, Cons<'_>>: From<Cons<'_>>` is not satisfied
[INFO] [stdout]    --> src/main.rs:529:53
[INFO] [stdout]     |
[INFO] [stdout] 529 |         (Datum::Cons(Cons::new_pair(car, List(cdr)).into()), rem)
[INFO] [stdout]     |                                                     ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<Cons<'_>>` is not implemented for `Gc<'_, Cons<'_>>`
[INFO] [stdout]    --> src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the trait `From<Root<'_, T>>` is implemented for `Gc<'_, T>`
[INFO] [stdout]    --> src/gc.rs:232:1
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl<'root, T: Trace + 'root> From<Root<'root, T>> for Gc<'root, T> {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `Cons<'_>` to implement `Into<Gc<'_, Cons<'_>>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the size for values of type `(dyn Any + 'static)` cannot be known at compilation time
[INFO] [stdout]    --> src/main.rs:540:26
[INFO] [stdout]     |
[INFO] [stdout] 540 |                 let ret: Gc<dyn Any> = Gc::new(buf);
[INFO] [stdout]     |                          ^^^^^^^^^^^ doesn't have a size known at compile-time
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `Sized` is not implemented for `(dyn Any + 'static)`
[INFO] [stdout] note: required by an implicit `Sized` bound in `Gc`
[INFO] [stdout]    --> src/gc.rs:273:22
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     |                      ^ required by the implicit `Sized` requirement on this type parameter in `Gc`
[INFO] [stdout] help: consider relaxing the implicit `Sized` restriction
[INFO] [stdout]    --> src/gc.rs:273:23
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T: ?Sized> {
[INFO] [stdout]     |                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated function or constant named `new` found for struct `Gc<'_, _>` in the current scope
[INFO] [stdout]    --> src/main.rs:540:44
[INFO] [stdout]     |
[INFO] [stdout] 540 |                 let ret: Gc<dyn Any> = Gc::new(buf);
[INFO] [stdout]     |                                            ^^^ associated function or constant not found in `Gc<'_, _>`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/gc.rs:273:1
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub struct Gc<'root, T> {
[INFO] [stdout]     | ----------------------- associated function or constant `new` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:631:28
[INFO] [stdout]     |
[INFO] [stdout] 631 |     read_file("stdlib.cl", root_env.clone()).unwrap();
[INFO] [stdout]     |     ---------              ^^^^^^^^^^^^^^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |     |
[INFO] [stdout]     |     arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/main.rs:619:4
[INFO] [stdout]     |
[INFO] [stdout] 619 | fn read_file(p: impl AsRef<std::path::Path>, env: Gc<Env>) -> std::io::Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^                                 ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:637:41
[INFO] [stdout]     |
[INFO] [stdout] 637 |         match read(&buf).eval(Gc::clone(&root_env)) {
[INFO] [stdout]     |                               --------- ^^^^^^^^^ expected `&Gc<'_, Env>`, found `&Rc<Env>`
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Gc<'_, Env>`
[INFO] [stdout]                found reference `&Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/clone.rs:236:7
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:631:28
[INFO] [stdout]     |
[INFO] [stdout] 631 |     read_file("stdlib.cl", root_env.clone()).unwrap();
[INFO] [stdout]     |     ---------              ^^^^^^^^^^^^^^^^ expected `Gc<'_, Env>`, found `Rc<Env>`
[INFO] [stdout]     |     |
[INFO] [stdout]     |     arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Gc<'_, Env>`
[INFO] [stdout]                found struct `Rc<Env>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/main.rs:619:4
[INFO] [stdout]     |
[INFO] [stdout] 619 | fn read_file(p: impl AsRef<std::path::Path>, env: Gc<Env>) -> std::io::Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^                                 ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/main.rs:637:41
[INFO] [stdout]     |
[INFO] [stdout] 637 |         match read(&buf).eval(Gc::clone(&root_env)) {
[INFO] [stdout]     |                               --------- ^^^^^^^^^ expected `&Gc<'_, Env>`, found `&Rc<Env>`
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Gc<'_, Env>`
[INFO] [stdout]                found reference `&Rc<Env>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/8773d2c75a8e90130dcce745a7ec4e66bb9963db/library/core/src/clone.rs:236:7
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `this`
[INFO] [stdout]   --> src/gc.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 |     unsafe fn from_raw(this: NonNull<T>) -> NonNull<Self> {
[INFO] [stdout]    |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_this`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0310]: the parameter type `T` may not live long enough
[INFO] [stdout]   --> src/gc.rs:51:58
[INFO] [stdout]    |
[INFO] [stdout] 51 |             let ptr: P = unsafe { mem::transmute::<P, P>(alloc as *const _) };
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                                                          |
[INFO] [stdout]    |                                                          the parameter type `T` must be valid for the static lifetime...
[INFO] [stdout]    |                                                          ...so that the type `T` will meet its required lifetime bounds
[INFO] [stdout]    |
[INFO] [stdout] help: consider adding an explicit lifetime bound
[INFO] [stdout]    |
[INFO] [stdout] 46 |     unsafe fn push_alloc<'a, T: Trace + 'a + 'static>(alloc: *const Allocation<T>) {
[INFO] [stdout]    |                                            +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0310]: the parameter type `T` may not live long enough
[INFO] [stdout]   --> src/gc.rs:62:23
[INFO] [stdout]    |
[INFO] [stdout] 62 |             let ptr = ptr::null::<T>() as P;
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                       |
[INFO] [stdout]    |                       the parameter type `T` must be valid for the static lifetime...
[INFO] [stdout]    |                       ...so that the type `T` will meet its required lifetime bounds
[INFO] [stdout]    |
[INFO] [stdout] help: consider adding an explicit lifetime bound
[INFO] [stdout]    |
[INFO] [stdout] 57 |     unsafe fn push_root<T: Trace + 'static>() -> usize {
[INFO] [stdout]    |                                  +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0310]: the parameter type `T` may not live long enough
[INFO] [stdout]   --> src/gc.rs:74:23
[INFO] [stdout]    |
[INFO] [stdout] 74 |             let ptr = root.as_ptr() as P;
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                       |
[INFO] [stdout]    |                       the parameter type `T` must be valid for the static lifetime...
[INFO] [stdout]    |                       ...so that the type `T` will meet its required lifetime bounds
[INFO] [stdout]    |
[INFO] [stdout] help: consider adding an explicit lifetime bound
[INFO] [stdout]    |
[INFO] [stdout] 69 |     unsafe fn set_root<T: Trace + 'static>(slot: usize, root: NonNull<T>) {
[INFO] [stdout]    |                                 +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `this`
[INFO] [stdout]   --> src/gc.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 |     unsafe fn from_raw(this: NonNull<T>) -> NonNull<Self> {
[INFO] [stdout]    |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_this`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0310]: the parameter type `T` may not live long enough
[INFO] [stdout]   --> src/gc.rs:51:58
[INFO] [stdout]    |
[INFO] [stdout] 51 |             let ptr: P = unsafe { mem::transmute::<P, P>(alloc as *const _) };
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                                                          |
[INFO] [stdout]    |                                                          the parameter type `T` must be valid for the static lifetime...
[INFO] [stdout]    |                                                          ...so that the type `T` will meet its required lifetime bounds
[INFO] [stdout]    |
[INFO] [stdout] help: consider adding an explicit lifetime bound
[INFO] [stdout]    |
[INFO] [stdout] 46 |     unsafe fn push_alloc<'a, T: Trace + 'a + 'static>(alloc: *const Allocation<T>) {
[INFO] [stdout]    |                                            +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0310]: the parameter type `T` may not live long enough
[INFO] [stdout]   --> src/gc.rs:62:23
[INFO] [stdout]    |
[INFO] [stdout] 62 |             let ptr = ptr::null::<T>() as P;
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                       |
[INFO] [stdout]    |                       the parameter type `T` must be valid for the static lifetime...
[INFO] [stdout]    |                       ...so that the type `T` will meet its required lifetime bounds
[INFO] [stdout]    |
[INFO] [stdout] help: consider adding an explicit lifetime bound
[INFO] [stdout]    |
[INFO] [stdout] 57 |     unsafe fn push_root<T: Trace + 'static>() -> usize {
[INFO] [stdout]    |                                  +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0310]: the parameter type `T` may not live long enough
[INFO] [stdout]   --> src/gc.rs:74:23
[INFO] [stdout]    |
[INFO] [stdout] 74 |             let ptr = root.as_ptr() as P;
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                       |
[INFO] [stdout]    |                       the parameter type `T` must be valid for the static lifetime...
[INFO] [stdout]    |                       ...so that the type `T` will meet its required lifetime bounds
[INFO] [stdout]    |
[INFO] [stdout] help: consider adding an explicit lifetime bound
[INFO] [stdout]    |
[INFO] [stdout] 69 |     unsafe fn set_root<T: Trace + 'static>(slot: usize, root: NonNull<T>) {
[INFO] [stdout]    |                                 +++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0621]: explicit lifetime required in the type of `cdr`
[INFO] [stdout]   --> src/main.rs:86:26
[INFO] [stdout]    |
[INFO] [stdout] 86 |             Some(cdr) => Datum::Cons(cdr),
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^ lifetime `'r` required
[INFO] [stdout]    |
[INFO] [stdout] help: add explicit lifetime `'r` to the type of `cdr`
[INFO] [stdout]    |
[INFO] [stdout] 84 |     fn from_cdr(cdr: Option<Gc<'r, Cons<'r>>>) -> Self {
[INFO] [stdout]    |                                        ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: lifetime may not live long enough
[INFO] [stdout]    --> src/main.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl<'r> Datum<'r> {
[INFO] [stdout]     |      -- lifetime `'r` defined here
[INFO] [stdout] ...
[INFO] [stdout]  99 |     fn as_list(&self) -> Result<List, TypeError> {
[INFO] [stdout]     |                - let's call the lifetime of this reference `'1`
[INFO] [stdout] 100 |         match self {
[INFO] [stdout] 101 |             Datum::Cons(c) => Ok(List(Some(Gc::clone(c)))),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'r` but it is returning data with lifetime `'1`
[INFO] [stdout]     |
[INFO] [stdout]     = note: requirement occurs because of the type `List<'_>`, which makes the generic argument `'_` invariant
[INFO] [stdout]     = note: the struct `List<'r>` is invariant over the parameter `'r`
[INFO] [stdout]     = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: lifetime may not live long enough
[INFO] [stdout]    --> src/main.rs:141:31
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl<'r> Datum<'r> {
[INFO] [stdout]     |      -- lifetime `'r` defined here
[INFO] [stdout] ...
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |             - let's call the lifetime of this reference `'1`
[INFO] [stdout] ...
[INFO] [stdout] 141 |             Datum::Func(f) => Ok(Datum::Func(*f)),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'r` but it is returning data with lifetime `'1`
[INFO] [stdout]     |
[INFO] [stdout]     = note: requirement occurs because of the type `Datum<'_>`, which makes the generic argument `'_` invariant
[INFO] [stdout]     = note: the enum `Datum<'r>` is invariant over the parameter `'r`
[INFO] [stdout]     = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0621]: explicit lifetime required in the type of `env`
[INFO] [stdout]    --> src/main.rs:141:31
[INFO] [stdout]     |
[INFO] [stdout] 141 |             Datum::Func(f) => Ok(Datum::Func(*f)),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^ lifetime `'r` required
[INFO] [stdout]     |
[INFO] [stdout] help: add explicit lifetime `'r` to the type of `env`
[INFO] [stdout]     |
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<'r, Env>) -> LispResult {
[INFO] [stdout]     |                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing function parameter `env`
[INFO] [stdout]    --> src/main.rs:141:31
[INFO] [stdout]     |
[INFO] [stdout] 138 |             Datum::Symbol(s) => Ok(env.get(*s)?),
[INFO] [stdout]     |                                    --- `env` is borrowed here
[INFO] [stdout] ...
[INFO] [stdout] 141 |             Datum::Func(f) => Ok(Datum::Func(*f)),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0621]: explicit lifetime required in the type of `car`
[INFO] [stdout]    --> src/main.rs:250:9
[INFO] [stdout]     |
[INFO] [stdout] 250 |         self.car.set(car)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ lifetime `'r` required
[INFO] [stdout]     |
[INFO] [stdout] help: add explicit lifetime `'r` to the type of `car`
[INFO] [stdout]     |
[INFO] [stdout] 249 |     fn set_car(&self, car: Datum<'r>) {
[INFO] [stdout]     |                                 ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: lifetime may not live long enough
[INFO] [stdout]    --> src/main.rs:260:9
[INFO] [stdout]     |
[INFO] [stdout] 208 | impl<'r> Cons<'r> {
[INFO] [stdout]     |      -- lifetime `'r` defined here
[INFO] [stdout] ...
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |                - let's call the lifetime of this reference `'1`
[INFO] [stdout] ...
[INFO] [stdout] 260 |         car
[INFO] [stdout]     |         ^^^ method was supposed to return data with lifetime `'r` but it is returning data with lifetime `'1`
[INFO] [stdout]     |
[INFO] [stdout]     = note: requirement occurs because of the type `Datum<'_>`, which makes the generic argument `'_` invariant
[INFO] [stdout]     = note: the enum `Datum<'r>` is invariant over the parameter `'r`
[INFO] [stdout]     = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0621]: explicit lifetime required in the type of `cdr`
[INFO] [stdout]   --> src/main.rs:86:26
[INFO] [stdout]    |
[INFO] [stdout] 86 |             Some(cdr) => Datum::Cons(cdr),
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^ lifetime `'r` required
[INFO] [stdout]    |
[INFO] [stdout] help: add explicit lifetime `'r` to the type of `cdr`
[INFO] [stdout]    |
[INFO] [stdout] 84 |     fn from_cdr(cdr: Option<Gc<'r, Cons<'r>>>) -> Self {
[INFO] [stdout]    |                                        ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: lifetime may not live long enough
[INFO] [stdout]    --> src/main.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl<'r> Datum<'r> {
[INFO] [stdout]     |      -- lifetime `'r` defined here
[INFO] [stdout] ...
[INFO] [stdout]  99 |     fn as_list(&self) -> Result<List, TypeError> {
[INFO] [stdout]     |                - let's call the lifetime of this reference `'1`
[INFO] [stdout] 100 |         match self {
[INFO] [stdout] 101 |             Datum::Cons(c) => Ok(List(Some(Gc::clone(c)))),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'r` but it is returning data with lifetime `'1`
[INFO] [stdout]     |
[INFO] [stdout]     = note: requirement occurs because of the type `List<'_>`, which makes the generic argument `'_` invariant
[INFO] [stdout]     = note: the struct `List<'r>` is invariant over the parameter `'r`
[INFO] [stdout]     = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: lifetime may not live long enough
[INFO] [stdout]    --> src/main.rs:141:31
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl<'r> Datum<'r> {
[INFO] [stdout]     |      -- lifetime `'r` defined here
[INFO] [stdout] ...
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<Env>) -> LispResult {
[INFO] [stdout]     |             - let's call the lifetime of this reference `'1`
[INFO] [stdout] ...
[INFO] [stdout] 141 |             Datum::Func(f) => Ok(Datum::Func(*f)),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'r` but it is returning data with lifetime `'1`
[INFO] [stdout]     |
[INFO] [stdout]     = note: requirement occurs because of the type `Datum<'_>`, which makes the generic argument `'_` invariant
[INFO] [stdout]     = note: the enum `Datum<'r>` is invariant over the parameter `'r`
[INFO] [stdout]     = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0621]: explicit lifetime required in the type of `env`
[INFO] [stdout]    --> src/main.rs:141:31
[INFO] [stdout]     |
[INFO] [stdout] 141 |             Datum::Func(f) => Ok(Datum::Func(*f)),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^ lifetime `'r` required
[INFO] [stdout]     |
[INFO] [stdout] help: add explicit lifetime `'r` to the type of `env`
[INFO] [stdout]     |
[INFO] [stdout] 136 |     fn eval(&self, env: Gc<'r, Env>) -> LispResult {
[INFO] [stdout]     |                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing function parameter `env`
[INFO] [stdout]    --> src/main.rs:141:31
[INFO] [stdout]     |
[INFO] [stdout] 138 |             Datum::Symbol(s) => Ok(env.get(*s)?),
[INFO] [stdout]     |                                    --- `env` is borrowed here
[INFO] [stdout] ...
[INFO] [stdout] 141 |             Datum::Func(f) => Ok(Datum::Func(*f)),
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^^^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0621]: explicit lifetime required in the type of `car`
[INFO] [stdout]    --> src/main.rs:250:9
[INFO] [stdout]     |
[INFO] [stdout] 250 |         self.car.set(car)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ lifetime `'r` required
[INFO] [stdout]     |
[INFO] [stdout] help: add explicit lifetime `'r` to the type of `car`
[INFO] [stdout]     |
[INFO] [stdout] 249 |     fn set_car(&self, car: Datum<'r>) {
[INFO] [stdout]     |                                 ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: lifetime may not live long enough
[INFO] [stdout]    --> src/main.rs:260:9
[INFO] [stdout]     |
[INFO] [stdout] 208 | impl<'r> Cons<'r> {
[INFO] [stdout]     |      -- lifetime `'r` defined here
[INFO] [stdout] ...
[INFO] [stdout] 257 |     fn get_car(&self) -> Datum {
[INFO] [stdout]     |                - let's call the lifetime of this reference `'1`
[INFO] [stdout] ...
[INFO] [stdout] 260 |         car
[INFO] [stdout]     |         ^^^ method was supposed to return data with lifetime `'r` but it is returning data with lifetime `'1`
[INFO] [stdout]     |
[INFO] [stdout]     = note: requirement occurs because of the type `Datum<'_>`, which makes the generic argument `'_` invariant
[INFO] [stdout]     = note: the enum `Datum<'r>` is invariant over the parameter `'r`
[INFO] [stdout]     = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0106, E0277, E0308, E0310, E0515, E0599, E0609, E0621, E0726.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0106`.
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0106, E0277, E0308, E0310, E0515, E0599, E0609, E0621, E0726.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0106`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `lisp3` (bin "lisp3" test) due to 96 previous errors; 7 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `lisp3` (bin "lisp3") due to 96 previous errors; 7 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15", kill_on_drop: false }`
[INFO] [stdout] c7b839c008a6733d4feb21fc9ccf80fc55b31bb995118bcc1d71cb6e2d9abc15
