Skip to content

Language suggestion: partial application for functions #351

Open
@xareelee

Description

@xareelee

It's just a suggestion for Dart lang, not a bug report. I did not find a way to publish my suggestion, so I file this here.

Partial application would be useful for functional programming.

With question mark ? when calling a function, it turns a function into 'currying' similar to a proposal in tc39. For example,

foo(x, y, z) {
  return (x - y) / z;
}

// currying with placeholders
var a = foo(8, 2, ?);  
// same as 
// var a = (z) => foo(8, 2, z);  
a(2);  //~> foo(8, 2, ?)(2) ~> foo(8, 2, 2) ~> 3 
a(3);  //~> foo(8, 2, ?)(3) ~> foo(8, 2, 3) ~> 2
a(6);  //~> foo(8, 2, ?)(6) ~> foo(8, 2, 6) ~> 1

// useful for functional programming
[2, 3, 6].map(foo(8, 2, ?));  //~> [3, 2, 1]
[3, 2, 1].map(foo(?, 5, -1));  //~> [2, 3, 4]
[2, 3, 4].map(foo(9, ?, 1));  //~> [7, 6, 5]

// calling with multiple placeholders
foo(?, ?, 3)(9, 6);  //~> foo(9, 6, 3) ~> 1
foo(?, ?, 3)(?, 6)(9);  //~> 1

This feature would be useful to make functions ease-of-use in functional programming with Future/Promise and Stream/Rx, because the design of the function parameter ordering is irrelative.

request(query)  // return a Future<ResponseData>
  .then(processData(?, options))   // pass data to processData(data, options)
  .then(writeDataIntoDatabase(database, ?));  // pass data to writeDataIntoDatabase(database, data)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions