rawSatisfy :: (Char -> Bool) -> Parser Char
rawSatisfy p = Parser $ \s -> case s^.parserInput of
  c:cs 
    | p c -> Commit c (s & parserInput .~ cs & parserLocation %~ bump c cs) mempty
    -- fall through
  _ -> Fail mempty
rawSatisfy :: (Char -> Bool) -> Parser Char
rawSatisfy p = Parser $ \s -> case s^.parserInput of
  c:cs 
    | p c -> Commit c (s & parserInput .~ cs & parserLocation %~ bump c cs) mempty
    -- fall through
  _ -> Fail mempty
rawSatisfy p = Parser $ \s -> case s^.parserInput of
  c:cs 
    | p c -> Commit c (s & parserInput .~ cs & parserLocation %~ bump c cs) mempty
    -- fall through
  _ -> Fail mempty