© 2021 Strange Loop
Tacit programming, or programming in the “point-free” style, allows you to define a function without reference to one or more of its arguments. Thanks to automatic currying, point-free definitions can be easy to write in Haskell, OCaml, and F#.
But is point-free syntax just point-less? Ostensibly, tacit definitions can calibrate your code to the appropriate level of abstraction. But which level is most appropriate? When is a point-free definition better than its “pointed” variation? And when is it spectacularly worse?
Let's be explicit about tacit programming. Let's learn eta-reduction to produce it. Let's develop our intuition for its expressive power. Let's hunt for it in trusted libraries. Let's probe its origins in John Backus' function-level programming. Let's see it amplified in Joy and J, languages designed for maximum quiet. Let's speak at length, about the unspoken.
Amar Shah is a web developer and a Haskell enthusiast. Outside of work, he loves delving into category theory, plumbing Hoogle, and extolling the virtues of parameterized type polymorphism to anyone who will listen. Amar has degrees in math and anthropology, and he has conducted research in ethnomusicology, the academic study of musical culture. He lives with his wife and four-year-old daughter in Louisville, Kentucky, where he organizes the local Haskell user group.