- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
breakPar :: (Token -> Bool) -> [Token] -> Either String ([Token], [Token])
breakPar _ [] = Right ([], [])
breakPar p xs@(x:xs')
| x == TLPar = let t = takePar xs'
in case t of
Left err -> t
Right r -> let tt = breakPar p b
(a,b) = r
in case tt of
Left err -> t
Right rr -> let (y, z) = rr
in Right ([x] ++ a ++ y, z)
| p x = Right ([],xs)
| otherwise = checkEither (breakPar p xs') (first ((:) x))
Можно заменить на
мне что-то показалось, что они не просто Left возвращают в случае ошибки