如何修复我的 inserPair haskell 代码以适用于所有测试?

How can I fix my inserPair haskell code to work for all of the tests?

指定将新对插入键值对列表的函数。如果要插入的键已经在列表中,则相应的值将被覆盖,否则,该对将附加到列表的末尾。 它不适用于案例 2。任何人都可以帮助我在那里更改我的代码以修复我的代码吗?

insertPair :: Eq a => (a,b) -> [(a,b)] -> [(a,b)]
insertPair (a,b) [] =[(a,b)] -- case 1
insertPair (a,b) ((c,d):xs) 
 | a == c = [(c,b)] --case 2
 | otherwise = ((c,d):xs) ++ [(a,b)] --case 3 
insertPair (5,"haskell") [(0,"c++"),(5,"python"),(4,"rust")] == [(0,"c++"),(5,"haskell"),(4,"rust")]
insertPair (3,"haskell") [(0,"c++"),(5,"python"),(4,"rust")] == [(0,"c++"),(5,"python"),(4,"rust"),(3,"haskell")]
insertPair (4,"go") [] == [(4,"go")]
insertPair ('b',False) [('a',False), ('b',True)] == [('a',False), ('b',False)]
insertPair ('b',False) [('a',False)] == [('a',False), ('b',False)]

第三种情况没有意义:键仍有可能出现在列表的其余部分 xs。因此,您应该在该列表上递归。第二种情况还应该添加xs作为尾部:剩余元素的列表:

insertPair :: Eq a => (a,b) -> [(a,b)] -> [(a,b)]
insertPair (a,b) [] = [(a,b)]
insertPair (a,b) ((c,d):xs) 
 | a == c = (c,b) : xs  -- add xs
 | otherwise = (c,d) : insertPair …  -- todo: recurse

需要填写部分的地方