3 ms·
> Yes, but the exact FP idea here is that this distinction is meaningless; that curried functions are "actual results". Everyone knows that. At least everyone
by raincole 7mo ago
> Yes, but the exact FP idea here is that this distinction is meaningless; that curried functions are "actual results".
Everyone knows that. At least everyone who would click a post titled "A case against currying." The article's author clearly knows that too.
That's not the point. The point is that this distinction is very meaningful in practice, as many functions are only meant to be used in one way. It's extremely rare that you need to (printf "%d %d" foo). The extra freedom provided by currying is useful, but it should be opt-in.
Just because two things are fundamentally equivalent, it doesn't mean it's useless to distinguish them. Mathematics is the art of giving the same name to different things; and engineering is the art of giving different names to the same thing depending on the context.
- kccqzy 7mo ago> It's extremely rare that Not when a language embraces currying fully and then you find that it’s used all the fucking time. It’s really simple as that: a language makes the currying syntax easy, and programmers use it all the time; a language disallows currying or makes the currying syntax unwieldy, and programmers avoid it.
- momentoftop 7mo ago> It's extremely rare that you need to (printf "%d %d" foo) I write stuff like `map (printf "%d %d" m) ns` all the time. I daresay I even do the map as a partial application, so double currying.
- gf000 7mo agoBut arguably your intent would be much more clear with something like `map (printf "%d %d" m _) ns` or a lambda. I don't think parent is saying that partial application is bad, far from it. But to a reader it is valuable information whether it's partial or full application.
- octachron 7mo agoNot really when reading `iter (printf %"d %d" m) ns`, I am likely to read it in three steps - `iter`: this is a side-effect on a collection - `(printf`: ok, this is just printing, I don't care about what is printed, let's skip to the `)` - ns: ok, this is the collection being printed Notice that having a lambda or a partial application `_` will only add noise here. > But to a reader it is valuable information whether it's partial or full application. This can be a valuable information in some context, but in a functional language, functions are values. Thus a "partial application" (in term of closure construction) might be better read as a full application because the main type of concern in the current context is a functional type.