First, what type would such a function have?<div>Certainly not [a]-&gt;[b], because that type say that it can take a list of any type and turn it into a list of any other type, e.g.,</div><div>[Int]-&gt;[Bool].</div><div><br>
</div><div><br><div class="gmail_quote">On Thu, Dec 30, 2010 at 4:05 AM, william murphy <span dir="ltr">&lt;<a href="mailto:will.t.murphy@gmail.com">will.t.murphy@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi All,<br><br>I&#39;ve spent a lot of time trying to write a version of concat, which concatenates lists of any &quot;depth&quot;:<br>So:<br><span style="font-family:courier new,monospace">concat&#39;&#39; [[[1,2],[3,4]],[[5]]] </span>              would return: <span style="font-family:courier new,monospace">[1,2,3,4,5]</span><br>

<br><br>The code is:<br><span style="font-family:courier new,monospace">concat&#39;&#39; :: [a] -&gt; [b]</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">concat&#39;&#39; ((y:ys):xs) = (concat&#39;&#39; (y:ys)) ++ (concat&#39;&#39; xs)</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">concat&#39;&#39; []          = []</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">concat&#39;&#39; (x:xs)      = (x:xs)</span><br>

<br><br>And the inevitable error is:<br><span style="font-family:courier new,monospace">test.hs:298:12:</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    Couldn&#39;t match expected type `a&#39; against inferred type `[t]&#39;</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">      `a&#39; is a rigid type variable bound by</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">          the type signature for `concat&#39;&#39;&#39; at test.hs:297:13</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">    In the pattern: y : ys</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    In the pattern: (y : ys) : xs</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">    In the definition of `concat&#39;&#39;&#39;:</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">        concat&#39;&#39; ((y : ys) : xs) = (concat&#39;&#39; (y : ys)) ++ (concat&#39;&#39; xs)</span><br style="font-family:courier new,monospace">

<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">test.hs:300:24:</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    Couldn&#39;t match expected type `b&#39; against inferred type `[t]&#39;</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">      `b&#39; is a rigid type variable bound by</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">          the type signature for `concat&#39;&#39;&#39; at test.hs:297:20</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">    In the first argument of `(:)&#39;, namely `x&#39;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    In the expression: (x : xs)</span><br style="font-family:courier new,monospace">

<span style="font-family:courier new,monospace">    In the definition of `concat&#39;&#39;&#39;: concat&#39;&#39; (x : xs) = (x : xs)</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">Failed, modules loaded: none.</span><br style="font-family:courier new,monospace">

<br><br>Any help or advice would be appreciated.<br>Will<br>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>