Ignored parsers should not skip `map_with()`
From the migration guide:
The behaviour of parsers has changed subtly. Now, parsers that have their output go unused will not even attempt to generate output in the first place (thanks to the new internal optimiser, which accounts for the lion's share of the 0.10 performance improvements). For example, the closure in a.map(|_| ...).ignore_then(b) will never even get called. This should only matter if your mapping closures are impure, which I suspect is not the case for 95% of users. More information is available in the guide.
However, I discovered that map_with() is skipped just like map() is when a parser is ignored. This means that an ignored parser can't update state - which seems to me to be a hole in the API for state and to contradict your point about mapping closures usually being impure - the state feature should be the replacement for impure mappings.
This should be solvable simply by using the output. Regardless, parser state doesn't generally exist for the purpose of performing arbitrary mutation - parsers are supposed to be pure-in-principle, so state is only there for managing things like string interners. What are you looking to use state for that makes this a problem, out of interest?