template<typename T>
ConsList<T> cons(T car, const ConsList<T>& cdr=ConsList<T>()) {
  return std::make_shared<ConsNode<T> > (car,cdr);
}