Completar una lista de tuplas de forma semántica

Estoy trabajando en un código en el que tengo que procesar listas de tuplas en las que tanto el orden como los nombres de las "claves" (fsts de las tuplas) coinciden con una plantilla determinada. Estoy implementando la tolerancia a fallas al validar y (si es necesario) generar una lista válida basada en la entrada.

Aquí hay un ejemplo de lo que quiero decir:

Dada la plantilla de claves,["hello", "world", "this", "is", "a", "test"]y una lista[("hello", Just 1), ("world", Just 2), ("test", Just 3)], pasándolo a mi funciónvalidate causaría una falla en la validación, ya que el orden y los valores de las claves no coinciden con la plantilla.

Al fallar la validación, quiero generar una nueva lista, que se vería como[("hello", Just 1), ("world", Just 2), ("this", Nothing), ("is", Nothing), ("a", Nothing), ("test", Just 3)].

Intenté realizar este último paso usando una comprensión de lista (incompleta):

[(x, y) | x <- template, y <- l]

(Obviamente, a este le falta el paso donde las entradas vacías se reemplazarían porNothings, y funciona bajo el supuesto de que la entrada es de tipo[(String, Maybe Int)])

¿Cuál sería la forma semántica más fácil de hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta