Использование карты с двумя списками вместо одного. Можете ли вы гнездиться?

Мне нужно запустить функцию, которая принимает два аргумента несколько раз. У меня есть два списка, содержащие эти аргументы, и я хотел бы иметь возможность использовать mapили что-то подобное для вызова функции с соответствующими аргументами.

Функция, которую я хочу вызвать, имеет следующий тип:

runParseTest :: String -> String -> IO()

Списки создаются следующим образом:

-- 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]

Предположим, что nameсодержит ["test1.js", "test2 .js", "test3.js"]и libsсодержит ["tests/libraries/test1.js", "tests/libraries/test2.js", "tests/libraries /test3.js"]

Я хочу называть их так:

runParseTest "test1.js" "tests/libraries/test1.js"
runParseTest "test2.js" "tests/libraries/test2.js"
runParseTest "test3.js" "tests/libraries/test3.js"

Я знаю, что мог бы создать вспомогательную функцию, которая делает это довольно легко, но из интереса, можно ли сделать это в одной строке, используя карта?

Это то, что у меня есть до сих пор, но очевидно, что первым аргументом всегда является «тест»:

mapM_ (runParseTest "test") libs

Прошу прощения, если это неясно. Я могу предоставить больше информации, если это необходимо.

7
задан Nick Brunt 25 February 2012 в 22:16
поделиться