如何更新元组列表中的某个元组元素?

How to update a certain tuple element within a list of tuples?

Haskell初学者。

我有一个 (a, b) 类型的元组列表,如下所示:[(1, "One"), (2, "2")] 和一对 (key, value).

我想创建一个递归函数,它接受一对元组列表,所有类型 (a, b) 和 returns 在用传递的值替换与传递的键关联的所有值之后的列表:

changeTup :: (Eq a) => (a,b) -> [(a,b)] -> [(a,b)]

示例输出:

> changeTup (1, "Hello") [(1, "One"), (2, "Two")] 
=> [(1, "Hello"), (2, "Two")]

我做了一些挖掘,看起来最好的方法是使用 map。我试过了,但没有得到任何好的结果。

这是我的代码:

changeTup :: (Eq a) => (a,b) -> [(a,b)] -> [(a,b)]
changeTup (y,z) [] = [(y,z)]
changeTup (y,z) (x:xs) = map replace
    where replace (key, value)
            | y == key    = (key, z)
            | otherwise   = (key, value)

我不确定如何在 map 内增加列表 (x:xs)。我收到 expected type error.

关于 map 函数的事情是遍历列表(或另一个模糊的列表形状的东西)是它的全部工作。在你的代码中,你有一个非常好的 replace 函数,你想应用到列表的元素 (x : xs) - 这样做就像 map replace (x : xs)[=14 一样简单=]