
23 Apr
2021
23 Apr
'21
4:31 p.m.
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