benchmark :: Handle -> Benchmark
benchmark sink = bench "BigTable" $ whnfIO $ do
    hPutStr sink "Content-Type: text/html\n\n<table>"
    hPutStr sink . toLazyText . makeTable =<< rows
    hPutStr sink "</table>"
  where
    -- We provide the number of rows in IO so the builder value isn't shared
    -- between the benchmark samples.
    rows :: IO Int
    rows = return 20000
    {-# NOINLINE rows #-}
benchmark :: Handle -> Benchmark
benchmark sink = bench "BigTable" $ whnfIO $ do
    hPutStr sink "Content-Type: text/html\n\n<table>"
    hPutStr sink . toLazyText . makeTable =<< rows
    hPutStr sink "</table>"
  where
    -- We provide the number of rows in IO so the builder value isn't shared
    -- between the benchmark samples.
    rows :: IO Int
    rows = return 20000
    {-# NOINLINE rows #-}
benchmark sink = bench "BigTable" $ whnfIO $ do
    hPutStr sink "Content-Type: text/html\n\n<table>"
    hPutStr sink . toLazyText . makeTable =<< rows
    hPutStr sink "</table>"
  where
    -- We provide the number of rows in IO so the builder value isn't shared
    -- between the benchmark samples.
    rows :: IO Int
    rows = return 20000
    {-# NOINLINE rows #-}