text / tests / benchmarks / FileIndices.hs

The default branch has multiple heads

{-# LANGUAGE BangPatterns #-}

import System.Environment (getArgs)
import qualified Data.Text.Lazy.IO as T
import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.Encoding as T
import qualified Data.ByteString.Lazy.Char8 as B
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Search as B

text :: FilePath -> String -> IO ()
text file pat = T.readFile file >>= print . T.count (T.pack pat)

textBS :: FilePath -> String -> IO ()
textBS file pat = B.readFile file >>= print . T.count (T.pack pat) . T.decodeUtf8

bytestring :: FilePath -> String -> IO ()
bytestring file pat = B.readFile file >>= print . length . B.indices (BS.pack pat)

main = do
  (name : file : pat : _) <- getArgs
  case name of
    "bs" -> bytestring file pat
    "text" -> text file pat
    "textBS" -> textBS file pat
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.