This essay is as much an apology for Miranda and Haskell style lazy-by-default evaluation as it is for functional programming itself, and it's therefore absurd that in 2016 it's still being posted here, let alone enthusiastically upvoted.
Lazy-by-default evaluation is a bad idea. It makes the design of the compiler orders of magnitude more complicated (see GHC) and in practice results in nasty performance-related bugs (space leaks) that can be catastrophic when encountered in production.
Idris is gaining on Haskell in large part because of its strictness, and the GHC high priests not long ago relented and added a strictness pragma to their compiler in response (which does not actually give you a strict program). And of course they did this without any frank acknowledgement that the choice of default evaluation strategy for Haskell was a colossal mistake. Nor has the Haskell community apologized for its extremely disingenuous past advocacy that sold lazy-by-default evaluation as a powerful optimization, like this paper does, when in practice it's usually the exact opposite.
The Haskell community is extremely cultish, even by the standards of FP.