partial method

VarArgsFunction<T> partial([
  1. List preArgs = const [],
  2. Map<String, dynamic> preKwargs = const <String, dynamic>{}
])

Creates a new VarArgsFunction with pre-filled arguments.

This is similar to partial application in functional programming:

var greet = VarArgsFunction<String>((args, kwargs) {
  var name = args.isNotEmpty ? args[0] : 'Guest';
  var greeting = kwargs['greeting'] ?? 'Hello';
  return '$greeting, $name!';
});

var greetJohn = greet.partial(['John']);
print(greetJohn()); // Outputs: Hello, John!

var sayHi = greet.partial([], {'greeting': 'Hi'});
print(sayHi('Alice')); // Outputs: Hi, Alice!

Implementation

VarArgsFunction<T> partial(
    [List<dynamic> preArgs = const [],
    Map<String, dynamic> preKwargs = const <String, dynamic>{}]) {
  return VarArgsFunction<T>((args, kwargs) {
    final combinedArgs = [...preArgs, ...args];
    final combinedKwargs = {...preKwargs, ...kwargs};
    return callback(combinedArgs, combinedKwargs);
  });
}