haskell: tryOne should actually backtrack on failure

This commit is contained in:
Alain Zscheile 2023-10-25 22:36:35 +02:00
parent 9b6229f9fd
commit 87a72c019f

View file

@ -218,10 +218,14 @@ tryOne f = do
let (l, r) = U.splitAt 1 (peText env)
case U.uncons l of
Nothing -> return Nothing
Just (fi, r2) -> (
Just (fi, r2) ->
(if not ((slen r2) == 0) then error "tryOne : unable to iterator over characters" else ())
`seq`
(shiftEnv (slen l, r) >> return (f fi)))
case f fi of
Nothing -> return Nothing
Just x -> do
shiftEnv (slen l, r)
return . Just $ x
-- | A case tree for `eats`
data HandleTree x =