
Before replying, my example should have of course been: type MyPar a = ParsecT String () Identity a On Tue, Mar 24, 2020 at 06:08:42PM +0100, Max Gautier wrote:
If I understand correctly the parsec interface, leaving the stream type s as a type variable allows me to specify the concrete stream type at the time of use without changing the parser, as long as that stream gives Char tokens, is that correct ? And using a concrete stream type forfeit that, does'nt it ?
Yes you do forfeit polymorphism using a concrete type. With your current synonym: type Parser s = ParsecT s () Identity you already missing polymorphism on state (`()`) and a monadic transformers (`Identity`). Parsec itself [1] uses a very similar shorthand type Parser = Parsec String () [1] https://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec-String.... I do not think there is a sensible way not to have the constraint part (`... =>`) written out in full.