我正在尝试使用现有的 MapReduce 实现(Real World Haskell中的那个)编写一个简单的程序。
作为使用框架的一个例子,这里有一些代码来计算文件中的单词数:
module Main where
import Control.Monad (forM_)
import Data.Int (Int64)
import qualified Data.ByteString.Lazy.Char8 as LB
import System.Environment (getArgs)
import LineChunks (chunkedReadWith)
import MapReduce (mapReduce, rdeepseq)
wordCount :: [LB.ByteString] -> Int
wordCount = mapReduce rdeepseq (length . LB.words)
rdeepseq sum
main :: IO ()
main = do
args <- getArgs
forM_ args $ \path -> do
numWords <- chunkedReadWith wordCount path
putStrLn $ "Words: " ++ show numWords
我需要使用相同的 MapReduce 框架来编写一个程序来搜索一些字符串(比如“il”),并返回找到它们的行号。例如,输出可能是:
verILy: found on lines 34, 67, 23
ILlinois: found on lines 1, 2, 56
vILla: found on lines 4, 5, 6
(“il”的大写不是必需的。)
我是 Haskell 初学者,还没有任何具体的想法。我确实注意到 Data.ByteString.Lazy.Char8 类有一个成员函数findIndices
。可以使用这个吗?
任何正确方向的代码或提示将不胜感激。