Tôi muốn viết một hàm saveStuff
để lưu nội dung nào đó vào một tệp, sau khi vượt qua một số thử nghiệm nhất định. Nếu kiểm tra thất bại, tôi cần phải báo lỗi. Loại kết quả của chức năng này là gì? Tôi đã nghĩ đến IO (Either String())
và IO (Maybe String)
, nhưng cả hai người trong số họ đều cảm thấy sai vì một số lý do. Tôi đã tra cứu các hàm tương tự từ thư viện chuẩn, nhưng chúng dường như chỉ trả lại IO()
. Họ ném ngoại lệ về thất bại. Tôi không thể thấy mình thích cách tiếp cận đó.Loại kết quả của chức năng này là gì?
Trả lời
Bạn có thể xem xét viết cái gì mà trả về một ErrorT String IO()
. Tài liệu cho máy biến áp đơn lẻ ErrorT
là on Hackage. Có nhiều đề xuất trong số tuyệt vời Eight Ways to Report Errors bởi Eric Kidd và follow up một số năm sau đó bởi Edward Yang.
'LỗiT' là những gì tôi nghĩ đến, quá. Bạn có bản chất là một 'IO()', và bạn muốn thêm tiềm năng cho một lỗi với một thông điệp, vì vậy chỉ cần tát biến 'ErrorT' ở trên nó. –
Nếu chỉ có một cách saveStuff
có thể thành công, một loại đẳng cấu là Maybe ErrorMessage
là loại chính xác. Maybe ErrorMessage
chính nó có nhược điểm thường là Nothing
biểu thị sự thất bại khi sử dụng Maybe
, vì vậy nó sẽ chạy ngược với mong đợi ở đây. Liên quan đến điều đó, Either ErrorMessage()
là tốt hơn, nhưng tham số ()
đến trường hợp Right
không mang bất kỳ thông tin nào, do đó tùy chọn đó cũng thiếu sự thanh lịch.
Nếu bạn không muốn chấp nhận những thiếu sót, xác định kết quả của bạn loại riêng
data Result = Success | Failure ErrorMessage
-- with type ErrorMessage = String, for example
- 1. Ngắt kết quả chức năng
- 2. Hậu quả của bit này là gì?
- 3. Chức năng gọi lại là gì và cách sử dụng chức năng này với OOP
- 4. Chức năng chung này làm gì?
- 5. Tham chiếu rvalue cho loại chức năng là gì?
- 6. Loại phân loại này là gì?
- 7. Mục đích của khối thử chức năng là gì?
- 8. Chức năng __proto__ là gì?
- 9. Haskell chức năng sàn trả về kết quả khác nhau
- 10. Loại JavaScript này là gì?
- 11. Kết hợp hai kết quả chức năng phạm vi
- 12. Kết quả của biểu thức năng suất trong Python là gì?
- 13. Chức năng chặn là gì?
- 14. Chức năng "Trang" là gì?
- 15. Kết hợp `/^.*$/` regex này là gì?
- 16. Chức năng của session_module_name chính xác của php là gì?
- 17. chức năng bên này
- 18. Kết quả của `git push origin` là gì?
- 19. là một phần chức năng này là một đóng cửa?
- 20. Kết quả không mong muốn từ chức năng giảm bớt
- 21. Tên của loại sơ đồ này là gì?
- 22. Các phần chức năng và không chức năng của ứng dụng là gì?
- 23. Cách ưa thích của chuỗi chức năng Underscore.js là gì?
- 24. Lỗi Loại:. $ Này E_0.getElementsByTagName không phải là một chức năng
- 25. Kết quả của việc chia cho số không là gì?
- 26. chức năng trong Javascript nghĩa là gì?
- 27. Làm mới Kết quả Chức năng Excel VBA
- 28. Chức năng eval thay thế là gì?
- 29. lợi thế của chức năng tĩnh là gì?
- 30. Chức năng hệ thống của C++ là gì?
Nếu nó có thể thành công chỉ bằng một cách, 'Có thể ErrorMessage' hoặc một cái gì đó isomorphic là loại chính xác. Nếu bạn không thích 'Có thể' bởi vì thường' Nothing' chỉ ra thất bại, hãy sử dụng 'data Result = Success | Chuỗi lỗi'. –
@DanielFischer: Đó có lẽ là một câu trả lời (chứ không phải là một bình luận). –