import Control.Monad import Data.Array.IO yoba :: Int -> IO Int yoba n = do arr <- newArray_ (0, n) :: IO (IOUArray Int Int) writeArray arr 0 0 forM_ [1..n] (\v -> readArray arr (v - 1) >>= readArray arr >>= writeArray arr v . (v -)) readArray arr n main = yoba 50000000 >>= print