2012-06-07 35 views
9

Có một số hàm stdlib ném lỗi trên đầu vào không hợp lệ. Ví dụ:Phát hiện lỗi được ghi bằng `lỗi`?

Prelude> read "1o2" :: Int 
*** Exception: Prelude.read: no parse 

Thay vào đó, tôi muốn quấn nó để trả lại Either e a. Làm thế nào tôi có thể làm điều đó?

Trả lời

14

There is no spoon. Bạn không nghe thấy gì từ tôi.

Ví dụ cụ thể này, tuy nhiên, bạn nên sử dụng reads để thay thế.

+0

Tôi thích cách bạn phrased nó. :) Cảm ơn bạn đã trả lời! – missingfaktor

+6

+1 không đề cập đến thìa! – is7s

2

tôi thích để biến lỗi vào giá trị:

maybeRead :: Read a => String -> Maybe a 
maybeRead s = case reads s of 
     [(x, "")] -> Just x 
     _   -> Nothing 
+0

Tôi cũng thích điều đó, nhưng câu hỏi là về làm nó _generally_. 'read' chỉ được sử dụng làm ví dụ. – missingfaktor

+0

Tôi nghĩ rằng đó là sự thật rằng, đối với bất kỳ chức năng mà ném một lỗi, sẽ có một "an toàn" phiên bản của nó. – MatrixFrog

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