Nếu tôi có chức năng chèn này:Haskell: foldr vs foldr1
insert x [] = [x]
insert x (h:t)
| x <= h = x:(h:t)
| otherwise = h:(insert x t)
này tạo ra một danh sách sắp xếp:
foldr insert [] [1,19,-2,7,43]
nhưng điều này:
foldr1 insert [1,19,-2,7,43]
sản xuất 'không thể xây dựng loại vô hạn: a0 = [a0] '
Tôi nhầm lẫn về lý do cuộc gọi thứ hai không thể hoạt động.
Tôi đã xem xét các định nghĩa cho cả hai foldr và foldr1 và đã truy tìm cả hai với các hàm số học đơn giản, nhưng tôi vẫn không thể đưa ra giải thích rõ ràng về lý do cuộc gọi thứ hai thất bại.