 <blockquote> <p>But Haskell doesn't seem to be too happy with:</p> <pre><code>thecolour:leftofcurrent:rightofcurrent </code></pre> </blockquote> <p>That's because <code>leftofcurrent</code> is a List. If you want to combine those lists, it needs to be:</p> <pre class="lang-haskell prettyprint-override"><code>(thecolour:leftofcurrent) ++ rightofcurrent </code></pre> <p>Likewise, <code>(leftofcurrent:current:[])</code> is impossible because <code>leftofcurrent</code> is a List, but this is probably what you're after:</p> <pre class="lang-haskell prettyprint-override"><code>leftofcurrent ++ [current] </code></pre> <p>The cons operator <code>:</code> expects a single element on the left and a list on the right. But because of its fixity, you can chain them together so that a bunch of single items are separated by <code>:</code> and ended with a list. That is,</p> <pre class="lang-haskell prettyprint-override"><code>item1:item2:item3:[] -- is the same as item1:(item2:(item3:[])) </code></pre> <p>Also, your pattern matching is non-exhaustive. You need to handle the case where the second list parameter is empty.</p> <pre class="lang-haskell prettyprint-override"><code>putfront leftofcurrent [] thecolour = ... </code></pre>