如何在Haskell的列表中的每个元素上应用函数?

时间:2016-06-23 16:02:09

标签: haskell happstack

我在这里有一个元组列表,我想在每个元组的第一个元素上应用函数dir..。我怎样才能做到这一点?非常感谢提前!

[ ("grid", gridResponse),
("graph", graphResponse),
("image", graphImageResponse),
("timetable-image", timetableImageResponse x),
("graph-fb",toResponse ""),
("post-fb",toResponse ""),
("test", getEmail),
("test-post", postToFacebook),
("post", postResponse),
("draw", drawResponse),                  
("about", aboutResponse),
("privacy" ,privacyResponse),
("static", serveDirectory),
("course", retrieveCourse),
("all-courses", allCourses),
("graphs", queryGraphs),
("course-info", courseInfo),
("depts", deptList),
("timesearch",searchResponse),
("calendar",calendarResponse),
("get-json-data",getGraphJSON),
("loading",loadingResponse),
("save-json", saveGraphJSON)]

1 个答案:

答案 0 :(得分:4)

map定义为:

map :: (a -> b) -> [a] -> [b]

这意味着它是一个函数,它接受从类型a到类型b的函数和类型a的列表,然后返回类型b的列表。正如@pdexter和@karakfa在评论中指出的那样,这正是您所需要的。

map f list

那么你需要什么?好吧,你的列表是一个元组列表,你想将一个函数应用到每个元组的第一个元素,所以(正如@karakfa指出的那样)你所需要的只是

map (dir . fst) list

这将函数fst与你的自定义dir函数组合在一起,为你提供一个新函数,它将获取元组的第一个元素并执行你的dir函数对它做的任何事情。然后map将其应用于整个列表。