我正在尝试实现MapReduce
函数。我必须在没有任何并行性的情况下做到这一点,到目前为止我有这个:
import Data.Map
import Data.Char
map_ list = toList $ fromListWith (+) [(x, 1) | x <- list]
main_ = map_ $ getWords "test.txt" --getting error here
prettyprint [(x, y):xs] = x ++ " : " ++ y -- trying to print out list
-- Loads words from a text file into a list.
getWords :: FilePath -> IO [String]
getWords path = do contents <- readFile path
return ([map toLower x | x <- words contents]) --- Ambiguous occurrence `map'
主要任务是使用MapReduce
从文件中获取单词列表以及每个新单词的频率。
我不明白在这种情况下减少是如何工作的。我只知道我正在将列表映射到计算单词频率的函数。如何减少?
只是解决你的编译问题...
Prelude
和Data.Map
都定义了函数map
。
解决歧义的一个好方法是像这样限定Data.Map
的导入:
import qualified Data.Map as M
然后用M.map
来指代Data.Map
中的函数,用普通map
来指代前奏版本。
main_
的问题是getWords
是一个IO [String]
,所以你需要用<-
运算符提取列表,然后才能使用它:
main_ = do ws <- getWords
-- do something with ws
print $ map_ ws