Constructor. Takes root value and a zero-argument function to call to produce the children. If childrenFunc is not provided, the root has no children. data RoseTree a = RoseTree a (RoseTree a)
function(root, childrenFunc) {
  if (!(this instanceof RoseTree)) {
    return new RoseTree(root, childrenFunc);
  }
  this.root = root;
  this._children = childrenFunc ? new Thunk(childrenFunc) : emptyThunk;
}