Tôi đã xác định rất nhiều hàm (ví dụ: 100+), mỗi hàm thực hiện một công việc cụ thể nhưng có cùng chữ ký. Đó là một cái gì đó như:Cách tự động gọi hàm được xác định trong nhiều mô-đun trong cùng một chữ số
module R001 (run) where run = <do-...>
module R002 (run) where run = <do-...>
Những gì tôi muốn làm là cung cấp cho thực tế 'chạy' như người dùng nhập vào, ví dụ rằng:
main = do
runWith $ read $ getLine
where
runWith :: Int -> IO()
runWith n = R<n-padded-with-0>.run
Hiện nay, tôi nhập khẩu tất cả các module đủ điều kiện, và đặt tất cả các run
's vào một danh sách các [Maybe (IO())]
, vì vậy công trình này:
runWith n = case Rs !! (read $ getLine) of
Just run -> run
Nothing -> undefined
Nhưng khi n
phát triển, tôi phải liên tục duy trì một danh sách lớn.
Có cách nào tôi có thể xác định danh sách lớn bằng cách sử dụng TemplateHaskell hay chỉ tải mô-đun tương ứng khi cần trong thời gian chạy mà không phải tách từng mô-đun thành các thư viện được chia sẻ khác nhau.
Dựa trên câu trả lời epsilonhalbe 's, tôi đã làm một số nghiên cứu:
import R1 (run1)
import R2 (run2)
test = $(functionExtractor "^run")
main :: IO()
main = do
putStrLn $ show $ length $ test
run1 -- remove on second attempt
run2 -- remove on second attempt
này khối mã in 2 sau khi kết quả của run1
và run2
. Nếu tôi xóa hai dòng cuối cùng, nó chỉ in 0. Có vẻ như các hàm được nhập nhưng không được tham chiếu sẽ không được trích xuất ...
Cảm ơn! điều này rất hữu ích, ít nhất 'functionExtractor' là mới đối với tôi. Tôi đã thực hiện một số nghiên cứu và cập nhật bài đăng gốc. – claude
Điều này khá giống với 'prop_ *' của QuickChekc. Khung kiểm tra Haskell 'HTF' thu thập tất cả các bộ test HUnit/QuickCheck trong một tệp sử dụng một bộ tiền xử lý tùy chỉnh' {- # OPTIONS_GHC -F -pgmF htfpp # -} '. Đây là giải pháp cuối cùng tôi muốn sử dụng, nhưng tôi sợ đây là giải pháp duy nhất? – claude
i am chắc chắn nhất chắc chắn rằng đây không phải là giải pháp duy nhất - nhưng tốt nhất tôi có thể đến với. – epsilonhalbe