main = do
  let
    bw1 i = BW1 i i
    bw2 i = BW2 (bw1 i) (bw1 i)
    a1 = foldl' addBW1 (bw1 0) $ replicate 1000000 (bw1 1)
    a2 = foldl' addBW2 (bw2 0) $ replicate 1000000 (bw2 1)
    a3 = foldl' (+) 0 $ replicate 1000000 1
  t0 <- getCurrentTime
  a1 `seq` return ()
  t1 <- getCurrentTime
  a2 `seq` return ()
  t2 <- getCurrentTime
  a3 `seq` return ()
  t3 <- getCurrentTime
  putStrLn ""
  putStrLn $ "BW1:     " ++ show (diffUTCTime t1 t0)
  putStrLn $ "BW2:     " ++ show (diffUTCTime t2 t1)
  putStrLn $ "Integer: " ++ show (diffUTCTime t3 t2)
main = do
  let
    bw1 i = BW1 i i
    bw2 i = BW2 (bw1 i) (bw1 i)
    a1 = foldl' addBW1 (bw1 0) $ replicate 1000000 (bw1 1)
    a2 = foldl' addBW2 (bw2 0) $ replicate 1000000 (bw2 1)
    a3 = foldl' (+) 0 $ replicate 1000000 1
  t0 <- getCurrentTime
  a1 `seq` return ()
  t1 <- getCurrentTime
  a2 `seq` return ()
  t2 <- getCurrentTime
  a3 `seq` return ()
  t3 <- getCurrentTime
  putStrLn ""
  putStrLn $ "BW1:     " ++ show (diffUTCTime t1 t0)
  putStrLn $ "BW2:     " ++ show (diffUTCTime t2 t1)
  putStrLn $ "Integer: " ++ show (diffUTCTime t3 t2)
main = do
  let
    bw1 i = BW1 i i
    bw2 i = BW2 (bw1 i) (bw1 i)
    a1 = foldl' addBW1 (bw1 0) $ replicate 1000000 (bw1 1)
    a2 = foldl' addBW2 (bw2 0) $ replicate 1000000 (bw2 1)
    a3 = foldl' (+) 0 $ replicate 1000000 1
  t0 <- getCurrentTime
  a1 `seq` return ()
  t1 <- getCurrentTime
  a2 `seq` return ()
  t2 <- getCurrentTime
  a3 `seq` return ()
  t3 <- getCurrentTime
  putStrLn ""
  putStrLn $ "BW1:     " ++ show (diffUTCTime t1 t0)
  putStrLn $ "BW2:     " ++ show (diffUTCTime t2 t1)
  putStrLn $ "Integer: " ++ show (diffUTCTime t3 t2)