title: transforming IO String to String
body: <p>I am having an issue converting  IO String() to a String()
  Below is the function to eval an expression.</p>
  
  <pre><code>foobar :: String -&gt; IO String
  
  eval :: String -&gt; Sh () ()
  eval x =  do
   s &lt;- foobar x
   shellPutStrLn $ s
  </code></pre>
  
  <p>This isnt working, because eval returns IO String instead of Sh. The
  moment some IO is done within a function it transforms/taints it into
  IO String.
  How do I prevent the transformation  or convert an IO String to String ?</p>