Gibt es einen guten Grund, warum der Typ von Prelude.read
read :: Read a => String -> a
statt der Rückgabe einer Maybe
Wert?
read :: Read a => String -> Maybe a
Da die Zeichenkette möglicherweise nicht in Haskell geparst werden kann, wäre dann nicht letzteres die natürlichere Lösung?
Oder sogar eine Either String a
donde Left
würde die ursprüngliche Zeichenkette enthalten, wenn sie nicht geparst wurde, und Right
das Ergebnis, wenn es so wäre?
Edita:
Ich versuche nicht, andere dazu zu bringen, einen entsprechenden Wrapper für mich zu schreiben. Ich suche nur die Gewissheit, dass es sicher ist, dies zu tun.
14 Stimmen
Warum ist die
take
akzeptieren jedeNum a => a
? Warum gibt es einen besonderen Fall vonfmap
für Listen? Warum istFunctor
nicht erforderlich fürMonad
Instanzen? Ich erwarte, dass die Antwort ähnlich ausfallen wird wie die Antworten auf diese und ähnliche Fragen.3 Stimmen
Nun, deshalb habe ich es so formuliert und die Möglichkeit offen gelassen, dass es keinen guten Grund gibt. Ich vermute zwar auch, dass es keinen gibt, wie bei den bekannten Beispielen, die Sie anführen, aber es ist eine Frage wert, um sicherzugehen, dass das Schreiben eines eigenen Wrappers keine unvorhergesehenen Probleme nach sich zieht.
0 Stimmen
Ich hoffe, ein
readMaybe
Funktion wird demnächst hinzugefügt werden.0 Stimmen
Gute Argumente @delnan, sollte aber nicht
take
seinIntegral n => n -> [a] -> [a]
?0 Stimmen
@DougMcClean: Ja, das sollte es eigentlich sein
Integral
, nichtNum
- Hirnfurz.0 Stimmen
Eine weitere coole Version von
maybeRead
aquí .0 Stimmen
@delnan Es gibt nicht ohne Grund eine spezielle Version von
fmap
für Listen; sie beschlossen, dass Anfänger durch die Allgemeinheit zu leicht verwirrt würden, und nannten daher die verallgemeinerte Functor-Versionfmap
anstelle vonmap
um hilfreichere Fehlermeldungen zu erhalten. In ähnlicher Weise entschieden sie sich für die Verwendung vondo
Notation anstelle von Monad comprehension (wie ursprünglich von Wadler vorgesehen), so dass die comprehension-Notation spezifisch für Listen war. (Es erlaubt Ihnen auch, mit etwas anderem zu enden alsreturn x
.)0 Stimmen
@AndrewC und in diesem Sinne, ein
read
die eine Ausnahme auslöst, ist für Anfänger einfacher als die Einbeziehung vonMaybe a
Ich gehe davon aus, dass sie von Anfang an dabei sind.0 Stimmen
@benutzer395760 Functor es heutzutage für Monad erforderlich: Functor ist eine Oberklasse von Applicative, die wiederum eine Oberklasse von Monad ist. Ich glaube, das hat sich vor ein paar Jahren geändert.