Tôi có quyền kết luận rằng không có cách nào để tính maxBound - minBound
trong Haskell cho một loại tùy ý Enum
và Bounded
? Hoặc tôi thiếu một số thủ thuật/hack? Đây là những gì tôi có, mà rõ ràng là không thể làm việc:Không thể tính toán sự khác biệt giữa maxBound và minBound của một kiểu Enum?
difference :: (Enum a, Bounded a) => Int
difference = fromEnum maxBound - fromEnum minBound
Lỗi:
Foo.hs:37:1:
Ambiguous constraint `Enum a'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the type signature for `difference': difference :: (Enum a, Bounded a) => Int
Foo.hs:37:1:
Ambiguous constraint `Bounded a'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the type signature for `difference': difference :: (Enum a, Bounded a) => Int
Tôi hiểu tại sao tôi nhận được rằng lỗi không có hạn thực tế trong đó có loại a
, vì vậy nó không thể tìm ra những gì a
là. Câu hỏi đặt ra là liệu có cách nào để giải quyết vấn đề này không.
Tôi hỏi sai lần đầu tiên xung quanh. Tôi đã chỉnh sửa câu hỏi. –
bạn sẽ sử dụng * giá trị như thế này như thế nào? – SingleNegationElimination
@SingleNegationElimination Tôi có kiểu Enum/Bounded, và muốn xây dựng một cây của tất cả các giá trị 'fromEnum' có thể cho loại đó. Rất thuận tiện để có thể có một hàm đệ quy như 'mkTree lower upper' (tuy nhiên nó không hoạt động như thế), nó phá vỡ vấn đề thành các phạm vi ints nhỏ hơn. Nhưng để bắt đầu, bạn cần có khả năng viết 'mkTree (fromEnum minBound) (fromEnum maxBound)' và nhận được giới hạn của kiểu đúng. – amalloy