They lost me at the point, after demonstrating how a functor can be defined on a list, when they claimed that a functor can similarly be defined on a binary tree.<p>One of the ten or so &quot;Aha!&quot; moments that each Haskell novice must experience on one&#x27;s journey to mastery is the realization that you can&#x27;t make Set an instance of Functor, at least as Functor is commonly defined in the standard Prelude.  And the reason why one cannot do so is echoed by their misleading diagram in which their functor replaces each node in a binary tree with its mapped value.  What needs to be appreciated is that the resulting tree is no longer ordered (assuming that the original was), and cannot be used to locate an element in logarithmic time.