This is a really great demonstration of Hole Driven Development, a form of development powered by parametricity. Here’s an awesome video demonstrating its power:
Analogies, names and tutorials to understand a library are all inexact and less powerful than reading type-signatures. Figuring out how to perform Hole Driven Development is a skill, but a really important one.
I find this a bit silly. Only using the type signatures of functions to build your application is a bit irresponsible because you are purposely ignoring the function’s implementation and its implications. Maybe the function uses the wrong kind of algorithm, maybe it’s really inefficient, maybe it doesn’t actually do what you think it does.
Also, in Haskell your function’s implementation can use functions that aren’t passed as arguments. You can really run into some nasty situations that way.
I also watched puffnfresh’s video, much of the same.