whole_func_string: function roseify(f) {
    var roseified = function() {
      var restArgs = [].slice.call(arguments, 1);
      return arrayToRoseTrees(
        f.apply(null, arguments),
        function(value) {
          return roseified.apply(null, [value].concat(restArgs));
        }
      );
    };
    return roseified;
  }
func_code_string: function roseify(f) {
    var roseified = function() {
      var restArgs = [].slice.call(arguments, 1);
      return arrayToRoseTrees(
        f.apply(null, arguments),
        function(value) {
          return roseified.apply(null, [value].concat(restArgs));
        }
      );
    };
    return roseified;
  }
func_documentation_string: Takes a shrink function that returns a list of smaller values, and returns a shrink function that returns a rose tree, with the same shrink function used for further shrinks.  (a -> [a]) -> (a -> [RoseTree a]) ... with a caveat:  If f takes 2 or more args, we assume the first arg is the value to shrink and we replace that in recursive calls while propagating the rest.