行列式のhaskell版

pmat :: Int -> [[a]] -> [[a]]
pmat n d = [tail (d !! i) | i <- [0..length d - 1], i /= n]

sig :: (Integral a, Num b) => a -> b
sig a = if mod a 2 == 0 then 1 else -1

det :: (Num a, Fractional a) => [[a]] -> a
det [[x]] = x
det [[a, b], [c, d]] = a * d - b * c
det d = sum [sig i * head (d !! i) * det (pmat i d) | i <- [0..length d - 1]]


main = do
    let xs = [1..]
    let d = [[x | x <- take 10 xs] | _ <- take 10 xs]
    print (det d)

pythonだと8秒弱かかるのが、haskellだと5秒くらい。この差が大きのか小さいのかは
よくわからない。ただ、haskellコンパイラに文句言われるのがちょっと面倒。

今のところ、iterator/generatorがある分、pythonの方が優れてるような気がする。