単純なファイル パーサーを pythonto haskell に書き直そうとしましたが、非常に遅いことがわかりました (同じマシンで約 15 倍遅い)。ghc -O2 でコンパイルされたコード。
目標は、正規表現が一致する行数をカウントすることです。サンプル テキスト ファイルは巨大です (数 GiB)。
コードは次のとおりです。
import Text.Regex.Posix
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BC
filename = "sample.dat"
mcount' :: String -> [BS.ByteString] -> Int
mcount' sample file = foldr (\e acc -> if e =~ sample then acc+1 else acc) 0 file
main = do
fcnt <- fmap BC.lines $ BS.readFile filename
print $ mcount' "myregex" fcnt
パフォーマンスを (大幅に) 改善するにはどうすればよいですか?