title: Why are Foldable and Functor separate classes?
body: <p>The <a href="https://wiki.haskell.org/Foldable_and_Traversable" rel="nofollow">wiki page</a> says both classes deal with container operations, with Foldable being a class of containers that have <code>foldr</code> defined over them, and for Functor it's <code>fmap</code>.</p>
  
  <p>However, what is the fundamental difference between types that are Foldable and types that are Functors?</p>
  
  <p>The wiki hints at this distinction:</p>
  
  <blockquote>
    <p>The class [Foldable] does not require Functor superclass in order to allow containers like Set or StorableVector</p>
  </blockquote>
  
  <p>But I'm still not sure why a Set couldn't be mapped over to obtain another set, if I'm interpreting that correctly.</p>