packages feed

country-0.2.4.2: bench/Main.hs

{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE TypeApplications #-}

import Data.Text (Text)
import Gauge.Main (bench, defaultMain, whnf)

import qualified Country
import qualified Data.List as List
import qualified Data.Text as Text

main :: IO ()
main =
  defaultMain
    [ bench "decode" (whnf decodeManyCountries ex1)
    ]

ex1 :: Text
{-# NOINLINE ex1 #-}
ex1 =
  Text.intercalate
    (Text.singleton '\n')
    (List.map Country.encodeEnglish [minBound .. maxBound])

decodeManyCountries :: Text -> Word
{-# NOINLINE decodeManyCountries #-}
decodeManyCountries txt =
  List.foldl'
    (\acc t -> acc + maybe 0 (fromIntegral . Country.encodeNumeric) (Country.decode t))
    (0 :: Word)
    (Text.split (== '\n') txt)