The canonical way to get a perceptual hash is using the pHash library. In fact, we can get nearly the same performance in Haskell using hip and repa.
Here I'd like to show an example of runtime complexity, arising from a practical problem.
A question in compiler design is: what optimizations should a given compiler perform? Optimizations for functional languages in particular are not well-known; it is not obvious which optimizations will provide the greatest speedup on user code.
I read a recent Functional Pearl by Hinze and this inspired me to write up an example of projective programming and its motivation in logic/model theory.
This post was inspired by a curious
question on
Twitter: is curry or uncurry more common in Haskell code?