Я работаю над фрагментом кода, где мне нужно обработать списки кортежей, где и порядок и имена «ключей» (fst
s кортежей) соответствуют определенному шаблон. Я выполняю отказоустойчивость, проверяя и (при необходимости) генерируя действительный список на основе ввода.Заполнение списка кортежей семантическим способом
Вот пример того, что я имею в виду:
Учитывая шаблон ключей, ["hello", "world", "this", "is", "a", "test"]
и список [("hello", Just 1), ("world", Just 2), ("test", Just 3)]
, передавая его к моей функции validate
бы привести к сбою проверки - как порядок и значения ключей не совпадают с шаблоном.
При отсутствии проверки, я хочу, чтобы создать новый список, который будет выглядеть [("hello", Just 1), ("world", Just 2), ("this", Nothing), ("is", Nothing), ("a", Nothing), ("test", Just 3)]
.
Я попытался выполнить эту последнюю стадию, используя (неполный) список понимание:
[(x, y) | x <- template, y <- l]
(Очевидно, что это отсутствует этап, на котором пустые записи будут заменены Nothing
с, и работает в предположении, что вход имеет тип [(String, Maybe Int)]
).
Что было бы проще семантический способ сделать это?
Рассматривали ли вы с помощью 'Map Струнный Int' в качестве промежуточного представления«список для проверки»? Затем вы можете просто пройти по шаблону, создав новое значение '[(String, Maybe Int)]', заполнив значение «Int», когда оно связано с «String» в фокусе на этой карте. – Jubobs
Думаете, вы могли бы связать меня с документом для этого? Я все еще начинаю с Haskell, и googling просто создает кучу страниц о типах «Map», «String» и «Int», отдельно. Помимо этого, это звучит как многообещающее лидерство. – Jules
https://hackage.haskell.org/package/containers-0.5.6.3/docs/Data-Map-Strict.html – Fraser