Тип [[("String", "String", 2.0)],[("String", "String", 2.0),("String", "String", 2.0)]]
равен Fractional t => [[(String, String, t)]]
, или для упрощения [[(String, String, Double)]]
.
Итак, чтобы добавить элемент в каждый вложенный список, нам нужна функция (String, String, Double) -> [[(String, String, Double)]] -> [[(String, String, Double)]]
.Другими словами, a -> [[a]] -> [[a]]
:
append :: a -> [[a]] -> [[a]]
append x xs = map (\xss -> xss ++ [x]) xs
И, наконец,
> append ("String","String",0.0) [[("String", "String", 2.0)],[("String", "String", 2.0),("String", "String", 2.0)]]
[[("String","String",2.0),("String","String",0.0)],[("String","String",2.0),("String","String",2.0),("String","String",0.0)]]
Кстати, обратите внимание, что добавление элементов в конец списка - это O (n), таким образом, вывозможно, стоит добавить его в начало:
append' :: a -> [[a]] -> [[a]]
append' x = map ((:) x)