Tôi có một cá thể MonadIO trong chương trình của mình và tôi muốn ném/bắt ngoại lệ (từ mô-đun Control.Exception
trong gói cơ sở) từ khi sử dụng MonadIO đó.'bắt' từ bên trong MonadIO
Tìm kiếm nhanh chóng của Google trả lại rất nhiều cuộc thảo luận (hẹn hò 2003) và linh hồn phức tạp (như triển khai MonadControlIO, MonadBase v.v.), tôi đã tự hỏi liệu có một giải pháp dễ sử dụng/được chấp nhận/sử dụng rộng rãi cho điều đó không,
Nếu không có, giải pháp tốt nhất cho vấn đề này là gì? Theo như tôi có thể thấy có một số gói trong Hackage giải quyết vấn đề này, cái nào tôi nên sử dụng?
Cảm ơn,
EDIT (như là một sang một bên, bài đọc về việc tại sao chúng ta không có catch
trong MonadIO
cũng sẽ được đánh giá đề nghị): Vì vậy, câu trả lời của Thomas hoạt động tốt nhưng tôi cũng tự hỏi lựa chọn thay thế khác là gì, mục đích chính của tôi là sử dụng IO
ngoại lệ thay vì ErrorT
là hiệu suất và tôi đạt được hiệu suất sau Control.Monad.IO.Control
(443389 bọ ve và 318552 bọ), có bất kỳ giải pháp thay thế nào tốt hơn cho Control.Monad.IO.Control
không?
Một giải pháp là chỉ cần thêm một ràng buộc thêm lớp: [MonadCatchIO] (http://hackage.haskell.org/packages/archive/MonadCatchIO-transformers/0.3.0.0/doc/html/Control-Monad-CatchIO. html). Một giải pháp khác là sử dụng kiểm soát đơn nguyên. –
@ ThomasM.DuBuisson, làm cách nào tôi có thể triển khai 'catch' trong MonadCatchIO cho ngăn xếp đơn nguyên của mình? – sinan
@sinan: Bất kỳ mã mẫu nào thực sự sẽ giúp – Ankur