为了简化我面临的问题,假设这种数据类型:
data Item = X Int | Y Char deriving (Eq, Show..)
Run Code Online (Sandbox Code Playgroud)
和两个清单
let a = [X 1, Y 'g']
let b = [X 2]
Run Code Online (Sandbox Code Playgroud)
我需要使用相同的构造函数替换a第一个(或任何)项中的所有项b.结果将是:[X 2, Y 'g'].
有什么建议?
您可以创建一个函数来替换这些项目:
specialReplace :: Item -> Item -> Item
specialReplace (X x1) (X x2) = (X x1)
specialReplace (Y y1) (Y y2) = (Y y1)
specialReplace _ a = a
Run Code Online (Sandbox Code Playgroud)
进而:
foldr (\el list -> map (specialReplace el) list) a b
Run Code Online (Sandbox Code Playgroud)
将运行您的a列表并相应地应用相关的替换b。当然,如果列表中引入了多个X或s ,则最后将使用最后一个。Yb
Your live exampleAnother live example