Tôi đang đọc qua LYAH, và trong Chương 9, tôi đã tìm thấy một vấn đề tò mò. Tác giả cung cấp ví dụ về việc triển khai chức năng "randoms":Haskell: Thực hiện "randoms" (a.k.a., Biến loại mơ hồ)
randoms' :: (RandomGen g, Random a) => g -> [a]
randoms' gen = let (value, newGen) = random gen in value:randoms' newGen
Vâng, điều này chỉ tốt thôi. Nhưng nếu tôi thay đổi dòng thứ hai để:
randoms' gen = (fst (random gen)) : (randoms' (snd (random gen)))
Các lỗi này báo cáo tập tin trên tải:
IOlesson.hs:4:52:
Ambiguous type variable `a' in the constraint:
`Random a' arising from a use of `random' at IOlesson.hs:4:52-61
Probable fix: add a type signature that fixes these type variable(s)
Failed, modules loaded: none.
Nếu tôi thay đổi dòng này để:
randoms' gen = (fst (random gen)) : (randoms' gen)
Sau đó, điều này sẽ làm chỉ tốt, và như mong đợi, điều này sẽ trả về một danh sách của tất cả các yếu tố giống hệt nhau.
Tôi đang bối rối: Có gì khác biệt trong phiên bản của Miran và phiên bản của tôi?
Cảm ơn mọi ý tưởng!
Cảm ơn! Điều này là để truy cập trực quan, nhưng hoàn toàn dễ hiểu. –
Bạn được chào đón; lỗi mơ hồ về lỗi chính tả có thể khó khăn lúc đầu, nhưng bạn sẽ sớm nhận được lỗi đó :) – ehird