Gepostet: |
Input überprüfen | ||||||||||
Hallo, ich bin noch ein Haskell-Neuling und habe eine Frage zu folgendem (schönen wie ich finde) Beitrag: http://stackoverflow.com/questions/127190/good-haskell-coding-style-of-if-else-control-block/2096144#2096144 Wenn man das in dem Beitrag vorgestellte Programm startet und einen String eingibt kommt \"Prelude.read: no parse\", ich denke, weil isCorrect ein Int erwartet, read aber \"s\" nicht zu Int \"konvertieren\" (?) / als Int auffassen kann. Wie kann ich verhindern, dass es zu dieser Fehlermeldung kommt? Ich dachte daran, dass man dies dieser Funktion machen könnte: untilM :: Monad m => (a -> m Bool) -> m a -> m () Nach dem \"x<-a\", überprüfen ob ein Int vorliegt (ich wüsste aber gerade nicht mit welcher Funktion man das machen könnte). Andererseits, wenn man das dort machen würde, fände ich das irgendwie nicht so schön... gibt es einen eleganteren Weg zu überprüfen was vorliegt und ggf mit einem Hinweis abzubrechen? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Da kann dir die Funktion reads weiterhelfen. Die nimmt einen String und gibt eine Liste möglicher Parse-Resultate (in der Praxis entweder null oder eins) als Wert-Reststring-Paare zurück:
Natürlich kann beim isolierten Aufruf hier der Typ nicht inferiert werden, so dass ich ihn explizit angeben muss, aber innerhalb eines Programms ist das meistens unnötig. |
|||||||||||
Zum Seitenanfang | |||||||||||