читает MonadPlus глава Haskell вики книги: https://en.wikibooks.org/wiki/Haskell/MonadPlusHaskell wikibook MonadPlus потенциальная ошибка
digit :: Int -> String -> Maybe Int
digit i s | i > 9 || i < 0 = Nothing
| otherwise = do
let (c:_) = s
if [c] == show i then Just i else Nothing
«сделай блок гарантирует, что любой неудачный матч шаблон приведет не возвращая ничего.»
Однако, когда я попробовал digit 1 ""
, он производит неопровержимую ошибку времени выполнения, вместо «Nothing».
Я могу обойти его, используя (c:_) <- return s
. Было бы здорово, если бы кто-то более опытный в haskell смог подтвердить/разъяснить это.
Я думаю, что это просто плохой пример анализаторов и MonadPlus. – ErikR