Tôi cần chạy một hàm lấy hai đối số nhiều lần. Tôi có hai danh sách chứa các đối số này và tôi muốn có thể sử dụng map
hoặc một cái gì đó tương tự để gọi hàm với các arg tương ứng.Sử dụng bản đồ với hai danh sách thay vì một danh sách. Bạn có thể làm tổ không?
Chức năng tôi muốn gọi có kiểu này:
runParseTest :: String -> String -> IO()
Các danh sách được tạo ra như thế này:
-- 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]
Vì vậy, cho phép nói rằng names
chứa ["test1.js", "test2.js", "test3.js"]
và libs
chứa ["tests/libraries/test1.js", "tests/libraries/test2.js", "tests/libraries/test3.js"]
Tôi muốn gọi cho họ như sau:
runParseTest "test1.js" "tests/libraries/test1.js"
runParseTest "test2.js" "tests/libraries/test2.js"
runParseTest "test3.js" "tests/libraries/test3.js"
Tôi biết tôi có thể tạo một hàm trợ giúp thực hiện điều này khá dễ dàng, nhưng không quan tâm, có thể thực hiện một dòng bằng cách sử dụng map
không?
Đây là những gì tôi có cho đến nay, nhưng rõ ràng là đối số đầu tiên luôn luôn là "thử nghiệm":
mapM_ (runParseTest "test") libs
Tôi xin lỗi nếu điều này là không rõ ràng. Tôi có thể cung cấp thêm thông tin nếu cần.
Đây là những gì tôi đang tìm kiếm. Tôi đã thực sự viết một chức năng mới gọi là 'map2M_' mà tôi sẽ đăng nhưng đây là cách" đúng "để làm điều đó tôi chắc chắn. –