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