implementing a variant of chain::Cell which has the same semantics as Lisp