Necesito ejecutar una función que toma dos argumentos varias veces. Tengo dos listas que contienen estos argumentos y me gustaría poder usar map
o algo similar para llamar a la función con los argumentos correspondientes.Uso del mapa con dos listas en lugar de una. ¿Puedes anidar?
La función Quiero llamar tiene este tipo:
runParseTest :: String -> String -> IO()
Las listas se crean de esta manera:
-- Get list of files in libraries directory
files <- getDirectoryContents "tests/libraries"
-- Filter out ".." and "." and add path
let names = filter (\x -> head x /= '.') files
let libs = ["tests/libraries/" ++ f | f <- names]
lo que permite decir que names
contiene ["test1.js", "test2.js", "test3.js"]
y libs
contiene ["tests/libraries/test1.js", "tests/libraries/test2.js", "tests/libraries/test3.js"]
Quiero llamarlos así:
runParseTest "test1.js" "tests/libraries/test1.js"
runParseTest "test2.js" "tests/libraries/test2.js"
runParseTest "test3.js" "tests/libraries/test3.js"
Sé que podría crear una función de ayuda que hace esto bastante fácilmente, pero por interés, ¿es posible hacerlo en una línea usando map
?
Esto es lo que tengo hasta ahora, pero es evidente que el primer argumento es siempre "prueba":
mapM_ (runParseTest "test") libs
Me disculpo si esto no está claro. Puedo proporcionar más información si es necesario.
Esto es lo que estaba buscando. De hecho, he escrito una nueva función llamada 'map2M_' que voy a publicar, pero esta es la forma" correcta "de hacerlo, estoy seguro. –