fn car (w :&World, x :Q) -> Ret { let y = { match &mut *x.clone().lock().unwrap() { Node::Cons(cell) => Some(cell.car.clone()), _ => None }}; match y { Some(y) => Ok(y), None => error (w, "Not a cons", x.clone()) }} // I don't like this solution because the error is not signal right // where it happens. Suppose there would be more information to an error // than just "Oh! Sorry.". What to do then? Define a new structure^Wenum // for all the information? // [Again: error() is a function dropping you into another REPL // and _not_ a sentinel. ]