title: Why is the constant returned faster?
body: <p>I have the following snippet:</p>
  
  <pre><code>import Network.MessagePackRpc.Server
  
  ping :: String -&gt; IO String
  ping s = return s
  
  main :: IO ()
  main = do
    serve 8081 [ ("add", fun add), ("ping", fun ping) ]
  </code></pre>
  
  <p>Now, what I observe is that when I send a string with e.g. 100000 identical 1024-Byte strings to it, the small snippet runs in approximately 2s. If I go and replace return s with e.g. <code>return "the-1024-byte-string"</code> then this runs approximately 25% faster. I have exercised this up and down. I am really surprised that the impact is so huge. Does anyone have an explanation?</p>