{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PackageImports #-} {-# LANGUAGE QuasiQuotes #-} import Criterion ( bench, bgroup, whnf ) import Criterion.Main ( defaultMain ) import qualified Data.ByteString as B import qualified Data.Text as T import qualified "string-interpolate" Data.String.Interpolate as SI import qualified "interpolate" Data.String.Interpolate.IsString as I import "formatting" Formatting ( (%) ) import qualified "formatting" Formatting as F import qualified "formatting" Formatting.ShortFormatters as F -------------------------------------------------------------------------------- -- Interpolating short Strings -------------------------------------------------------------------------------- shortStringSI :: String -> String shortStringSI str = [SI.i|A fine day to die, #{str}.|] shortStringI :: String -> String shortStringI str = [I.i|A fine day to die, #{str}.|] shortStringF :: String -> String shortStringF = F.formatToString ("A fine day to die, " % F.s % ".") -------------------------------------------------------------------------------- -- Interpolating short Text -------------------------------------------------------------------------------- shortTextSI :: T.Text -> T.Text shortTextSI t = [SI.i|A fine day to die, #{t}.|] shortTextI :: T.Text -> T.Text shortTextI t = [I.i|A fine day to die, #{t}.|] shortTextF :: T.Text -> T.Text shortTextF = F.sformat ("A fine day to die, " % F.st % ".") -------------------------------------------------------------------------------- -- Interpolating short ByteString -------------------------------------------------------------------------------- shortByteStringSI :: B.ByteString -> B.ByteString shortByteStringSI b = [SI.i|A fine day to die, #{b}.|] shortByteStringI :: B.ByteString -> B.ByteString shortByteStringI b = [I.i|A fine day to die, #{b}.|] main :: IO () main = defaultMain [ bgroup "Small Strings Bench" $ [ bench "string-interpolate" $ whnf shortStringSI "William" , bench "interpolate" $ whnf shortStringI "William" , bench "formatting" $ whnf shortStringF "William" ] , bgroup "Small Text Bench" $ [ bench "string-interpolate" $ whnf shortTextSI "William" , bench "interpolate" $ whnf shortTextI "William" , bench "formatting" $ whnf shortTextF "William" ] , bgroup "Small ByteString Bench" $ [ bench "string-interpolate" $ whnf shortByteStringSI "William" , bench "interpolate" $ whnf shortByteStringI "William" -- "formatting" doesn't support ByteStrings. ] ]