豊福です。

  花谷さん、nobsunさん、ありがとうございます。
Listモジュールの zip系は調べたんですが行と列の入れ替え系には
考え至りませんでした。

  この関数が欲しくなったのは、算譜の記 2004-04-27 のはらさん
のコメント(今はなぜか見られないようですが)中の

-- アイデアは「多項式の積」
xp zero add mul [] _ = []
xp zero add mul (x:xs) ys = zipWith' add
                              (map (mul x) ys)
                              (zero : xp zero add mul xs ys)
  where
  zipWith' op [] ys = ys
  zipWith' op xs [] = xs
  zipWith' op (x:xs) (y:ys) = op x y : zipWith' op xs ys

の add と mul を分離できないかというところからでした。

xp zero add mul xs ys =
               map (foldl add zero) -- 足し算
             $ foldr transpose [] -- 桁揃え
             $ map (\ (a,bs) -> map (mul a) bs) -- 掛け算
             $ zip xs -- xs と組み合わせる
             $ iterate (zero:) ys -- 桁ずらし

掛け算の筆算みたいでしょ。
---
                        豊福
                        nobu_toyofuku / nifty.com

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/