En lisant le Haskell Wikibook à propos MonadPlus, j'ai trouvé la fonction suivante qui prend essentiellement un Char
et un String
et retourne Just (char,tail)
si un tel caractère est égale à la tête de chaîne, ou Nothing
autrement:Haskell - Étrange faire bloquer le comportement
char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Just (c, s') else Nothing
et ils expliquent que let (c':s') = s
ne produira pas une exception, car il est dans un bloc do
qui évaluerait à Nothing
lorsque le motif échoue, mais ce n'est pas le cas, parce que quand je l'ai essayé:
*Main> char 'a' ""
*** Exception: exercice2.hs:5:7-17: Irrefutable pattern failed for pattern (c' : s')
j'avais donc de réécrire à:
char' :: Char -> String -> Maybe (Char, String)
char' _ [] = Nothing
char' c (c':s')
| c == c' = Just (c,s')
| otherwise = Nothing
et cela a fonctionné comme prévu ... Pourquoi est-il me passe?
Hors sujet: [1] tatillonne: Haskell Wiki/= Haskell Wikibook (il est un méli-mélo commun). [2] S'il y avait effectivement un bug dans le livre, c'était un moment très approprié pour le signaler, car le chapitre MonadPlus sera mis à jour pour l'AMP dans un court laps de temps. Merci! – duplode
@duplode Ok, je vais le changer en Haskell Wikibook comme vous l'avez dit – FtheBuilder
@duplode Désolé pour mon ignorance, mais que signifie AMP? – FtheBuilder