Có vẻ như bất kỳ trường hợp Bounded nào cũng nên thực hiện Enum. Cá nhân tôi không thể nghĩ ra một ví dụ, mặc dù nếu ai đó nghĩ ra một thứ không bệnh hoạn thì tôi sẽ hiểu tại sao không phải như vậy.
Từ việc thực hiện :i
trên hai kiểu chữ, có vẻ như ngoại lệ duy nhất hiện tại trong thư viện tiêu chuẩn là dành cho các bộ dữ liệu, đó là Bounded nhưng không phải là Enums. Tuy nhiên, bất kỳ bộ giới hạn nào cũng phải là Vô số theo cách lành mạnh, chỉ bằng cách tăng phần tử cuối cùng và sau đó gói xung quanh khi nó đạt đến maxBound.
Thay đổi này có thể cũng liên quan đến việc thêm predB
và nextB
hoặc một cái gì đó tương tự vào Bounded để có cách an toàn / lặp để đi qua các giá trị Enum. Trong trường hợp này toEnum 0 :: (...)
sẽ bằng(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
và tất cả các loại tương tự đều thực hiện bằng Enum
mọi cách, chúng chỉ thực hiện succ = (+ 1)
và fromEnum = truncate
. Cách của Haskell thực sự có ý nghĩa từ góc độ thực tiễn vì nếu không [0, 0,5 ..] và tương tự sẽ không hoạt động, vì vậy có vẻ như Haskell không lo lắng về tính có thể đếm được khi nói đến Enums.