Calculating digits of pi

My father, Dik T. Winter, once wrote the following program in C to compute 800 digits of pi:

int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,
f[b]=d%--g,d/=g--,--b;d*=b);}

This version is featured on the website of the Applied Cryptography Group of Stanford University.

I came up with the following Haskell code, which is not limited in the number of digits it computes:

import System.Environment

pidigits _ _ _ _ 0 = []

pidigits j n a d num =
  if
    o > b || r + o > e
  then
    pidigits (j + 1) o b e num
  else
    q : pidigits (j + 1) (o * 10) ((b - q * e) * 10) e (num - 1)
  where
    o = n * (j + 1)
    b = (a + n * 2) * k
    e = d * k
    (q, r) = divMod (o * 3 + b) e
    k = j * 2 + 3

main = getArgs >>= (putStrLn . showpidigits . read . flip (!!) 0)

showpidigits = ("3." ++) . concat . map show . tail . pidigits 0 1 0 1

Source: pidigits.hs