Optimise concatenation of empty list?
@AndreasK pointed out some low-hanging optimization fruit for Data.List.(++) in !616 (diffs). Namely, xs ++ [] ends up rebuilding xs. Perhaps we should rather expose,
(++) xs [] = xs
(++) xs ys = go
where
go (x:xs) = x : go xs
go [] = ys
Just a thought.