Solution (source code)

= Solution

Set both $\oplus$ and $\otimes$ equal to <list concatenation>, with $a=[]$. <Associativity> gives `xs ++ (ys ++ zs) = (xs ++ ys) ++ zs`, which is equation (1). The two identity laws give `xs ++ [] = [] ++ xs`, which is equation (2). Part (b) therefore yields

``
concat :: [[a]] -> [a]
concat = foldl (++) []
``

Thus $\boxed{\operatorname{concat}=\operatorname{foldl}\,(\mathbin{+\!+})\,[\,]}$ on finite <lists>. The argument order is unchanged: the accumulator is the already concatenated prefix, and the next inner <list> is appended to its right. This preserves the order but repeatedly copies that prefix.