[Haskell-beginners] general observation about programming
michael at orlitzky.com
Fri Feb 26 22:08:06 UTC 2016
On 02/26/2016 12:41 PM, Rein Henrichs wrote:
> Pointfree is good for reasoning about *composition*. It can often be
> more readable than pointful code when the focus of the function is on
> composition of other functions. For example, take this function from
> Bird's /Pearls of Functional Algorithm Design/:
> boxes = map ungroup . ungroup . map cols . group . map group
> Compare the pointful version:
> boxes matrix = map ungroup (ungroup (map cols (group (map group matrix))))
> Readibility is subjective, but I think many people will agree that the
> pointfree version is easier to read.
Sure, but does anyone have any idea what that first version is supposed
to do? It would be much better to write it out:
boxes matrix = one_big_list
-- The function (group . map group) produces a list of box
-- matrices, transposing each one in the process.
transposed_box_matrices = group (map group matrix)
-- The "cols" function performs a transpose, so mapping it over
-- transposed_matrices gives us the box matrices we want.
box_matrices = map cols transposed_box_matrices
-- Now we concat everything into one big matrix for some reason.
-- This is the inverse of the (group . map group) that we did
one_big_list = map ungroup (ungroup box_matrices)
You don't even need to write a book to explain what it does =)
More information about the Beginners