我是Haskell的新手,我一直试图在列表中映射每对的第一项.
显然这有效:
map :: (a -> b) -> [a] -> [b]
map f xs = [f x | x <- xs]
Run Code Online (Sandbox Code Playgroud)
但是我该如何让它发挥作用呢
map :: (a -> b) -> [(a, Int)] -> [b]
Run Code Online (Sandbox Code Playgroud)
我只是想让它暂时忽略Int值并将f应用到第一个例子中.我现在已经尝试了很多年,所以感谢任何帮助.
type Anagrams = Map String [String]
buildAnagrams :: IO Anagrams
buildAnagrams = do
list <- readCSV "mydict.csv"
return $ foldr f Map.empty list
where
f :: String -> Anagrams -> Anagrams
f s = Map.insertWith (++) (sort s) [s]
Run Code Online (Sandbox Code Playgroud)
我有这个函数,它构建一个映射来从字典文件中查找anagrams,该文件不会改变.我希望将地图作为全局变量,因为它需要被其他函数使用.目前函数在buildAnagrams上使用unsafePerformIO,但我知道不建议这样做.整个程序也很慢,因为它多次构建地图.必须有更好的方法来做到这一点?