Während die Haskell Wikibook Lesen über MonadPlus, fand ich die Funktion nach, die im Grunde eine Char
und String
nimmt und Just (char,tail)
wenn solche Zeichen der Zeichenfolge Kopf gleich oder Nothing
anders:Haskell - Strange tun Verhalten blockieren
char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Just (c, s') else Nothing
und sie erklären, dass let (c':s') = s
keine Ausnahme erzeugen, weil es in einem do
Block ist, den Nothing
bewerten würde, wenn das Muster nicht, aber das ist nicht der Fall, denn wenn ich es versucht:
*Main> char 'a' ""
*** Exception: exercice2.hs:5:7-17: Irrefutable pattern failed for pattern (c' : s')
Also musste ich es neu zu schreiben:
char' :: Char -> String -> Maybe (Char, String)
char' _ [] = Nothing
char' c (c':s')
| c == c' = Just (c,s')
| otherwise = Nothing
und es funktionierte wie erwartet ... Warum ist es mir passiert?
Off Thema: [1] Erbsenzählerei: Haskell Wiki/= Haskell Wikibook (es ist ein gemeinsames Mix-up). [2] Wenn es tatsächlich einen Bug im Buch gibt, war es ein sehr geeigneter Moment, dies zu melden, da das MonadPlus-Kapitel für den AMP in Kürze aktualisiert wird. Vielen Dank! – duplode
@duplode Ok, ich werde es in Haskell Wikibook ändern, wie du gesagt hast – FtheBuilder
@duplode Entschuldigung für meine Ignoranz, aber was bedeutet AMP? – FtheBuilder