Tuy mới để Haskell, tôi đã đánh một bức tường với những điều sau:Loại nghĩa lớp với các chức năng tùy thuộc vào một loại bổ sung
Tôi cố gắng để xác định một số các lớp học kiểu để khái quát một loạt các chức năng sử dụng phép khử Gauss để giải các hệ phương trình tuyến tính.
Cho một hệ thống tuyến tính
M x = k
loại a
trong những yếu tố m(i,j) \elem M
có thể khác nhau từ các loại b
của x
và k
. Để có thể giải quyết hệ thống, a
phải là một thể hiện của Num
và b
nên có nhà khai thác nhân/Ngoài ra với b
, giống như trong những điều sau đây:
class MixedRing b where
(.+.) :: b -> b -> b
(.*.) :: (Num a) => b -> a -> b
(./.) :: (Num a) => b -> a -> b
Bây giờ, ngay cả trong việc thực hiện tầm thường nhất của các nhà khai thác, tôi sẽ nhận được Could not deduce a ~ Int. a is a rigid type variable
lỗi (Hãy quên đi ./.
đòi hỏi Fractional
)
data Wrap = W { get :: Int }
instance MixedRing Wrap where
(.+.) w1 w2 = W $ (get w1) + (get w2)
(.*.) w s = W $ ((get w) * s)
tôi đã đọc nhiều hướng dẫn về các lớp học kiểu nhưng tôi có thể tìm thấy không có con trỏ đến những gì thực sự gặp khó khăn.
Đã có gói định nghĩa lớp này: http://hackage.haskell.org/packages/archive/vector-space/0.8.0/doc/html/Data-VectorSpace.html Bạn có thể xem nhanh ở đó. –
@SjoerdVisscher: Cảm ơn bạn! – bbtrb