Transcript from the "Partial Application" Lesson
>> Richard Feldman: We can also use List.map with a different function that's going to call our pluralized function from before. Here's how that might look. Same thing as before, except now we're taking a number. We're calling pluralize leaf, leaves, and num. And that's going to give us back 0 leaves, 1 leaf, and 2 leaves.
[00:00:16] Now we've modified pluralize so that it concatenates the actual number on there, using string.fromint. What if I told you, you could also write the exact same logic this way instead, list.map pluralize leaf leaves, and then 0, 1, 2. So this is the same code that we had before except I didn't use an anonymous function, I just left off an argument to pluralize.
[00:00:42] And somehow, I'm getting the same result. So the reason this works is because this code actually defines the same structure in Elm. When I say pluralize leaf and leaves, I leave off that last argument. Elm says, I see that you've only partially called this function, you've only partially applied it.
[00:01:03] You didn't give it all three arguments that it needs you left one off.
[00:01:17] What Elm does is it says, okay, you didn't give me all the arguments I wanted, what I'm gonna do is I'm not gonna run pluralized yet. What we are doing is I'm gonna give you back an anonymous function that takes whatever arguments are remaining, and then sort of finishes the job.
[00:01:30] So actually, anytime you see pluralize leaf and leaves, that is a partially applied function. And is going to evaluate not to actually running the function but it is going to evaluate to an anonymous function that takes the remaining arguments and then returns the result of finishing the job.
>> Richard Feldman: So that's why this code does the same thing as the completely fully written out version above. Anytime you call a function without this, that's just what you're going to get, those two are actually completely equivalent in Elm.