title: Why do we have map, fmap and liftM?
body: <pre><code>map :: (a -&gt; b) -&gt; [a] -&gt; [b]
  
  fmap :: Functor f =&gt; (a -&gt; b) -&gt; f a -&gt; f b
  
  liftM :: Monad m =&gt; (a -&gt; b) -&gt; m a -&gt; m b
  </code></pre>
  
  <p>Why do we have three different functions that do essentially the same thing?</p>