Hi,<div><br></div><div>For one of my toy project I had to find the longest common prefix of a list of strings. </div><div>I figured, that this function should only work on list-structure, meaning it should have type</div><div>
<br></div><div>&gt; longestCommonPrefix :: [[a]] -&gt; [a]</div><div><br></div><div>Sadly the best I could come up with was using explicit recursion. It works as far as I tested it, but I have the feeling that there&#39;s a better way to do it.</div>
<div>Here is the code:</div><div><br></div><div><div>&gt; longestCommonPrefix :: Eq a =&gt; [[a]] -&gt; [a]</div><div>&gt; longestCommonPrefix []   = []</div><div>&gt; longestCommonPrefix xss | any null xss = []</div><div>
&gt;                                        | otherwise    = loop xss []</div><div>&gt;  where loop ::Eq b =&gt; [[b]] -&gt; [b] -&gt; [b]</div><div>&gt;            loop xss acc =</div><div>&gt;              let xs = concatMap (take 1) xss </div>
<div>&gt;              in if any (\x -&gt; x /= head xs) (tail xs)</div><div>&gt;                  then reverse acc</div><div>&gt;                  else loop (map tail xss) (head xs : acc)</div></div><div><br></div>