packages feed

text-0.11.1.0: tests/benchmarks/src/Data/Text/Benchmarks/Sort.hs

-- | Implements the unix @sort@ program
--
{-# LANGUAGE OverloadedStrings #-}
module Data.Text.Benchmarks.Sort
    ( benchmark
    ) where

import Criterion (Benchmark, bench)
import Data.Monoid (mconcat)
import System.IO (Handle)
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
import qualified Data.List as L
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TLB
import qualified Data.Text.Lazy.Encoding as TL

benchmark :: FilePath -> Handle -> IO Benchmark
benchmark fp sink = return $ bench "Sort" $ do
    t <- T.decodeUtf8 `fmap` B.readFile fp
    BL.hPutStr sink $ TL.encodeUtf8 $ sort t

sort :: T.Text -> TL.Text
sort = TLB.toLazyText . mconcat . L.intersperse (TLB.fromText "\n") .
    map TLB.fromText . L.sort . T.lines