Tôi không hiểu tại sao các chức năng sau đây hoạt động:Lẫn lộn với Haskell suy luận kiểu
isLongerThanN :: Integral n => n -> [a] -> Bool
isLongerThanN n xs = length xs > fromIntegral n
nhưng sau không:
isLongerThanN' :: Integral n => n -> [a] -> Bool
isLongerThanN' n xs = length xs > n
mà ném lỗi
Could not deduce (n ~ Int)
from the context (Integral n)
bound by the type signature for
isLongerThanN' :: Integral n => n -> [a] -> Bool
at blah.hs:140:1-35
`n' is a rigid type variable bound by
the type signature for
isLongerThanN' :: Integral n => n -> [a] -> Bool
at blah.hs:140:1
In the second argument of `(>)', namely `n'
In the expression: length xs > n
In an equation for `isLongerThanN'':
isLongerThanN' n xs = length xs > n
(mà tôi có thể đã hiểu lầm)
Nếu có bất cứ điều gì, tôi mong đợi nó sẽ là một cách khác xung quanh, vì từIntegral đang mở rộng có hiệu quả loại biến n.
Đừng viết 'nếu foo sau đó Đúng khác false'. Nó giống như 'foo'. – hammar
bạn nói đúng, cảm ơn; Tôi đã sửa đổi nó, nhưng đó không phải là câu hỏi – Inept
Đó là lý do tại sao anh ấy không đăng câu trả lời ... – Jasper