title: Haskell Map function implementation issues
body: <p>I just began to learn Haskell and am having trouble with adjusting to the language, for example on the implementation of <code>map</code> more specifically when trying to do similar operations as in the example bellow;</p>
  
  <pre><code>rotate :: Dimensions -&gt;  imgBlock -&gt; [(imgBlock,Int)]
  rotate d ((p, pix), s, t) 
    = zip [((p, f pix), s, t) | f &lt;- transformate (fst d)] [0..7]
  
  makeAllRotations :: Dimensions -&gt; [imgBlock] -&gt; [(imgBlock,Int)]
  makeAllRotations d ib = map concat (rotate d ib)              //Error points Here
  </code></pre>
  
  <p>Where</p>
  
  <pre><code>type imgBlock = (Block, Int, Int)
  type Block = (Pnt, Pxl)
  type Dimensions = (Int, Int)
  </code></pre>
  
  <p>And this is one of the errors i get</p>
  
  <pre><code>asdf.hs:73:30:
      Couldn't match expected type `(imgBlock, Int)'
                  with actual type `[a0]'
      Expected type: [[a0]] -&gt; (imgBlock, Int)
        Actual type: [[a0]] -&gt; [a0]
      In the first argument of `map', namely `concat'
      In the expression: map concat (rotate d ib)
  </code></pre>
  
  <p>I find myself quite frustrated trying to adjust to this new programming 'paradigm' where most of the things I managed to do are through trial and error. I am obviously not understanding <code>map</code> correctly, although i have read the documentation on this <a href="http://zvon.org/other/haskell/Outputprelude/map_f.html" rel="nofollow">website</a>, but all the examples are shown in console like <code>map (2+) [1,2,3]</code> not so much when using them in functions. </p>
  
  <p>Could I get some pointers on where am i going wrong on my <code>map</code> implementation. Thks</p>