Tôi đã chỉ written a function (ví Data.Sequence
)Làm cách nào để kiểm tra các chức năng đa hình trên các ứng dụng?
traverseWithIndex :: Applicative f => (Int -> a -> f b) -> Seq a -> f (Seq b)
mà nên tuân theo
traverseWithIndex f = sequenceA . mapWithIndex f
Rất may, đây là một thay đổi cơ học đơn giản về nguồn gốc của mapWithIndex
, vì vậy tôi khá tự tin đó là chính xác . Tuy nhiên, trong các trường hợp phức tạp hơn, việc kiểm tra kỹ lưỡng sẽ được yêu cầu. Tôi đang cố gắng viết một thuộc tính QuickCheck để kiểm tra cái đơn giản này. Rõ ràng, tôi không thể thử nó với mỗi f2tor Applicative
! Khi thử nghiệm monoids, nó có ý nghĩa tốt để thử nghiệm với monoid miễn phí hơn (tức là, danh sách hữu hạn) một số loại. Vì vậy, nó có vẻ hợp lý ở đây để kiểm tra với free applicative functor trên một số functor. Có hai khó khăn:
Làm cách nào để chọn một hàm cơ sở thích hợp? Tôi có lẽ muốn một cái khó chịu mà không phải là ứng dụng hoặc đi qua hoặc bất cứ điều gì, nhưng một điều như vậy có vẻ khó làm việc với.
Làm cách nào để so sánh kết quả? Họ sẽ có chức năng trong họ, vì vậy họ không có trường hợp
Eq
.
Ooh, mọi thứ để đọc. Tôi sẽ phải thử vào ngày mai! Cách tiếp cận đại số này có vẻ đầy hứa hẹn. – dfeuer