import Math.Statistics.Fusion
import Data.Array.Vector
import qualified Data.Vector.Unboxed as V
import Text.Printf
import Data.List

main = printf "%f\n" (mean (V.replicate 1000000000 (pi :: Double)))

-- main = printf "%f\n" (var (replicateU 1000000000 (pi :: Double)))
--     where
--         mean x = fst $ foldl' (\(!m, !n) x -> (m+(x-m)/(n+1),n+1)) (0,0) x

{-
$wfold :: Int# -> Double# -> Double# -> Int# -> (# Int#, Double#, Double# #)
-}

{-
Main_zdwfold_info:
.Lc19X:
  movq %rdi,%rax
  cmpq $1000000000,%rax
  jne .Lc1a1
  movq %rsi,%rbx
  jmp *(%rbp)
.Lc1a1:
  movsd .Ln1a3(%rip),%xmm0
  subsd %xmm5,%xmm0
  cvtsi2sdq %rsi,%xmm7
  movsd %xmm0,%xmm8
  divsd %xmm7,%xmm8
  movsd %xmm5,%xmm7
  addsd %xmm8,%xmm7
  incq %rax
  movsd .Ln1a4(%rip),%xmm8
  subsd %xmm7,%xmm8
  mulsd %xmm8,%xmm0
  movsd %xmm6,%xmm8
  addsd %xmm0,%xmm8
  incq %rsi
  movsd %xmm7,%xmm5
  movsd %xmm8,%xmm6
  movq %rax,%rdi
  jmp Main_zdwfold_info

-}

{-
Main_mainzuzdszdwfoldlMzuloop_info:
        testq   %r14, %r14
        jle     .L11
        movq    %rsi, %rdx
        movsd   .LC0(%rip), %xmm0
        cvtsi2sdq       %rdx, %xmm8
        subsd   %xmm5, %xmm0
        leaq    -1(%r14), %r14
        divsd   %xmm8, %xmm0
        leaq    1(%rsi), %rsi
        addsd   %xmm0, %xmm5
        jmp     Main_mainzuzdszdwfoldlMzuloop_info
-}
