public Result<IValue> call(Type[] actualTypes, IValue[] actuals, Map<String, IValue> keyArgValues) {
Type returnType = getReturnType();
Type instantiatedReturnType = returnType.instantiate(ctx
.getCurrentEnvt().getTypeBindings());
IInteger maxDepth = (IInteger) actuals[0];
RandomValueTypeVisitor v = new RandomValueTypeVisitor(
getValueFactory(), (ModuleEnvironment) getEnv().getRoot(),
maxDepth.intValue(), generators, ctx.getCurrentEnvt().getTypeBindings());
IValue returnVal = instantiatedReturnType.accept(v);
return makeResult(instantiatedReturnType, returnVal, eval);