Các Haskell 2010 Báo cáo Ngôn ngữ quốc gia trong phần 20.10.1.1 rằng:Có lý do chính đáng nào khiến `deleteBy` không có loại chung nhất?
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
Trong thực tế, việc thực hiện trong GHC library sẽ cho phép
deleteBy :: (b -> a -> Bool) -> b -> [a] -> [a]
nhưng thực sự hạn chế các loại với một cựu với chú thích.
Do đó, người ta không thể nói, ví dụ:
foo = deleteBy fsteq 42 [(43, "foo"), (44, "bar"), (42, "baz")] where
fsteq a (b,_) = a == b
vì Int
là không giống như (Int, String)
.
Có lý do chính đáng nào cho việc này không?
Lý do tôi yêu cầu là, nếu không có lý do chính đáng cho nó, tôi sẽ bao gồm deleteBy
với loại chung hơn trong cổng dữ liệu Frege. Hiện tại tôi đang thực hiện. Nhưng có lẽ tôi đang nhìn cái gì đó?
EDIT: Như @hammar đã chỉ ra, điều này cũng áp dụng cho các chức năng khác xxx.
Đó là loại nhận xét sâu sắc mà tôi đang tìm kiếm. Cung cấp cho tôi một cái gì đó để suy nghĩ về. – Ingo
Đây là một câu trả lời rất sâu sắc! – danr
Nhưng không nên 42 được giải quyết thành 'Số nguyên' theo quy tắc loại mặc định? – haskelline