<div dir="ltr">I'm in Bird's <i>Thinking Functionally with Haskell </i>and he has this code to transpose a matrix based on a list of row lists<div><br></div><div><font face="monospace">transpose :: [[a]] -> [[a]]</font><br></div><div><font face="monospace">transpose [xs] = [[x] | x <- xs]<br>transpose (xs:xss) = zipWith (:) xs (transpose xss)</font><br></div><div><br></div><div>then he says <font face="monospace">transpose</font> can be rewritten with this pattern</div><div><br></div><div><font face="monospace">transpose [] = ...</font><br></div><div><br></div><div>what could be the rest of it? The answer he gives is</div><div><br></div><div><font face="monospace">transpose2 :: [[a]] -> [[a]]<br>transpose2 [] = repeat []  <br>transpose2 (xs:xss) = zipWith (:) xs (transpose2 xss)</font><br></div><div><br></div><div>where <font face="monospace">repeat [] </font>gives an infinite list of repetitions. And, he says, note that</div><div><br></div><div><font face="monospace">transpose [xs] =  zipWith (;) xs (repeat []) = [[x] | x <- xs]</font><br></div><div><br></div><div>I suppose I get this last equation, but I don't understand <font face="monospace">repeat</font> in <font face="monospace">transpose2</font>. Can someone explain this to me?</div><div><br></div><div>LB</div><div><br></div></div>