parsing - In MegaParsec is there a way of anding 2 parsers? -


if have parser like:

notzeroorone :: parser char notzeroorone = noneof ['0' , '1']  

is there way can combine rules of parser digitchar can parser pass if both parsers pass?

something like

biggerthanone :: parser char biggerthanone  = digitchar && notzeroorone  

as user2407038 suggests in comments, it's achievable using lookahead function.

biggerthanone :: parser char biggerthanone =   lookahead digitchar *> notzeroorone 

however, parsers sequential nature, it's both more efficient , comprehendable apply sequential logic. e.g., using monad instance of parser:

biggerthanone :: parser char biggerthanone =       c <- digitchar     if c /= '0' && c /= '1'       return c       else unexpected "not bigger one" 

or monadplus:

biggerthanone :: parser char biggerthanone =   mfilter (\c -> c /= '0' && c /= '1') digitchar 

which can refactored use ord instance of char , pretty express intent:

biggerthanone :: parser char biggerthanone =   mfilter (> '1') digitchar 

Comments

Popular posts from this blog

java - Suppress Jboss version details from HTTP error response -

gridview - Yii2 DataPorivider $totalSum for a column -

Sass watch command compiles .scss files before full sftp upload -