

Eta-reduction in Haskell and English

The other day Katara and I were putting together a model, and she asked what a certain small green part was for. I said "It's a thing for connecting a thing to another thing." Katara objected that this was a completely unhelpful explanation, but I disagreed. I would have agreed that it was an excessively verbose explanation, but she didn't argue that point. Later, it occurred to me that Haskell has a syntax for eliding unnecessary variables in cases like this. In Haskell, one can abbreviate the expression λx → λy → x + y to just (+) . (Perl users may find it helpful to know that the Perl equivalent of the expression above is sub { my ($x) = @_; return sub { my ($y) = @_; return $x + $y } } .) This is an example of a general transformation called η-reduction. In general, for any function f, λx → f x is a function that takes an argument x and returns f x. But that's exactly what f does. So we can replace the longer version with the shorter version, and that's η-reduction, or we can go the other way, which is η-expansion. Anyway, once I thought of this it occurred to me that, just like the longer expression could be reduced to (+) , my original explanation that the small green part was "a thing for connecting a thing to another thing" could be η-reduced to "a connector". Perhaps if I had said that in the first place Katara would not have complained. Happy new year, all readers.

[Other articles in category /lang] permanent link

