2012-06-07 7 views
9

Esistono alcune funzioni stdlib che generano errori su input non validi. Per esempio:Errori di cattura lanciati con `error`?

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

Vorrei avvolgere per restituire un Either e a invece. Come lo posso fare?

risposta

14

There is no spoon. Non l'hai sentito da me.

Per questo particolare esempio, tuttavia, è necessario utilizzare reads.

+0

Mi piace il modo in cui si espresse. :) Grazie per la risposta! – missingfaktor

+6

+1 per non menzionare il cucchiaio! – is7s

2

preferisco trasformare gli errori in valori:

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

Anche io lo preferisco, ma la domanda è di farlo _generalmente_. 'read' è usato solo come esempio. – missingfaktor

+0

Penso che sia generalmente vero che, per qualsiasi funzione che genera un errore, ci sarà una versione "sicura" di esso. – MatrixFrog

Problemi correlati