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>