{-# OPTIONS_GHC -O2 -cpp #-}

import Data.Array.IArray
import qualified Data.Array.Diff as DA
import qualified Data.Array as A

maxPos   = 1000
maxLoops = 10000

loop arr i c | i>maxPos  = arr // [(maxPos,c)]
             | otherwise = (loop arr (i+1)) $! (arr!i)+c

loop2 i arr | i>maxLoops = arr
            | otherwise  = loop2 (i+1) $ loop arr 1 0

main = print $ loop2 1 arr ! maxPos

#ifdef UseDiff
arr :: DA.DiffArray Int Int
#else
arr :: A.Array Int Int
#endif
arr = array (1,maxPos) [(i,1)|i<-[1..maxPos]] 
