2012-03-11 25 views
14

Tôi đã xem qua các trang trình bày tại http://www.algorithm.com.au/downloads/talks/monads-are-not-scary/monads-are-not-scary-chak.pdfXác định lại IO để đơn giản hóa gỡ lỗi?

và xấp xỉ. 75% của con đường thông qua các boong có điểm bullet "Xác định lại IO để đơn giản hóa gỡ lỗi!"

Điều này có vẻ như là một ý tưởng rất hấp dẫn! Ai đó có thể đưa ra một ví dụ thực tế về những gì người nói đang nói về?

Trả lời

10

Vâng, nếu thay vì IO, bạn đã sử dụng một đơn nguyên mô phỏng I/O với môi trường được kiểm soát và được điều chỉnh hoàn hảo? Bạn có thể dễ dàng kiểm tra những hành động "IO" như chúng là các hàm thuần túy. Đây là ý tưởng đằng sau ví dụ IOSpec, mà thậm chí còn đi xa hơn bằng cách cho phép bạn xác định một cách chính xác những gì loại có hiệu lực bạn muốn cho phép trong mô phỏng IO của bạn, bạn có thể viết:

myFunction :: a -> b -> IOSpec (Teletype :+: IORefS) 
myFunction x y = do 
    ... 
    putStr (...) 
    ref <- newIORef ... 
    ... 

(teletype phép cho các chức năng thiết bị đầu cuối, IOREFS để tham khảo) Và sau đó kiểm tra hàm của bạn trong một thuộc tính quickcheck (ví dụ xem mô-đun VM và runIOSpec) với toàn quyền kiểm soát đầu vào và đầu ra hoặc thậm chí từng bước trong GHCI. Và nếu nó hoạt động chính xác, chỉ cần thay đổi nhập để giới thiệu Test.IOSpec.Surrogate xác định lại IOSpec f làm từ đồng nghĩa cho IO.

Các vấn đề liên quan