take :: Int -> [a] -> [a]
genericTake :: Integral i => i -> [a] -> [a]
Tôi đã đọc rằng loại bất tiện của take
là do lý do lịch sử và việc thay đổi nó có thể khiến một số mã bị hỏng.Tại sao không thể thay đổi loại hình để sử dụng bất kỳ Tích phân nào?
Nhưng tôi không thể thay thế take
bằng genericTake
ở mọi nơi mà không vi phạm bất cứ điều gì? Có chuyện gì vậy?
Tôi đoán có thể có một trường hợp bắt nguồn kiểu dựa trên kiểu 'take' - với' genericTake' một cái gì đó của loại "không thể lấy được" sẽ xảy ra. – leventov
Lưu ý rằng ngoài (và có lẽ thực tế có liên quan nhiều hơn) code breakage trong trường hợp tối nghĩa, thay thế 'take' bằng' genericTake' sẽ dẫn đến sự xuống cấp hiệu suất trong nhiều trường hợp (vì việc mặc định kiểu sẽ dẫn đến 'Integer' được sử dụng khi không chỉ định ':: Int'). – sepp2k