title: Should do-notation be avoided in Haskell?
body: <p>Most Haskell tutorials teach the use of do-notation for IO.</p>
  
  <p>I also started with the do-notation, but that makes my code look more like an imperative language more than a FP language.</p>
  
  <p>This week I saw a tutorial use IO with <code>&lt;$&gt;</code></p>
  
  <pre><code>stringAnalyzer &lt;$&gt; readFile "testfile.txt"
  </code></pre>
  
  <p>instead of using <code>do</code></p>
  
  <pre><code>main = do
      strFile &lt;- readFile "testfile.txt"
      let analysisResult = stringAnalyzer strFile
      return analysisResult
  </code></pre>
  
  <p>And the log analysis tool is finished without the <code>do</code>.</p>
  
  <p>So my question is "<strong>Should we avoid do-notation in any case?</strong>".</p>
  
  <p>I know maybe <code>do</code> will make the code better in some cases.</p>
  
  <p>Also, <strong>why do most tutorials teach IO with <code>do</code>?</strong></p>
  
  <p>In my opinion <code>&lt;$&gt;</code> and <code>&lt;*&gt;</code> makes the code more FP than IO.</p>