I agree with you. This example puts a nail on the coffin of the backtracking approach.
I will have to think of something else, and at this point a full rewrite to parser combinators does not seem as appealing. Thanks! On Tue, Oct 9, 2018 at 4:45 PM Richard Eisenberg <r...@cs.brynmawr.edu> wrote: > > I think one problem is that we don't even have bounded levels of > backtracking, because (with view patterns) you can put expressions into > patterns. > > Consider > > > f = do K x (z -> ... > > Do we have a constructor pattern with a view pattern inside it? Or do we have > an expression with a required visible type application and a function type? > (This last bit will be possible only with visible dependent quantification in > terms, but I'm confident that Vlad will appreciate the example.) We'll need > nested backtracking to sort this disaster out -- especially if we have > another `do` in the ... > > What I'm trying to say here is that tracking the backtracking level in types > doesn't seem like it will fly (tempting though it may be). > > Richard > > > On Oct 9, 2018, at 7:08 AM, Vladislav Zavialov <vlad.z.4...@gmail.com> > > wrote: > > > > It's a nice way to look at the problem, and we're facing the same > > issues as with insufficiently powerful type systems. LALR is the Go of > > parsing in this case :) > > > > I'd rather write Python and have a larger test suite than deal with > > lack of generics in Go, if you allow me to take the analogy that far. > > > > In fact, we do have a fair share of boilerplate in our current grammar > > due to lack of parametrisation. That's another issue that would be > > solved by parser combinators (or by a fancier parser generator, but > > I'm not aware of such one). > > > > On Tue, Oct 9, 2018 at 1:52 PM Simon Peyton Jones <simo...@microsoft.com> > > wrote: > >> > >> We all love strong guarantees offered by type checking, but somehow most > >> people shy away from "syntactic type checking" offered by parser > >> generators. Parser combinators are the Python of parsing: Easy to use > >> initially, but a maintenance hell in the long run for larger projects... > >> > >> I’d never thought of it that way before – interesting. > >> > >> > >> > >> Simon > >> > >> > >> > >> From: ghc-devs <ghc-devs-boun...@haskell.org> On Behalf Of Sven Panne > >> Sent: 09 October 2018 08:23 > >> To: vlad.z.4...@gmail.com > >> Cc: GHC developers <ghc-devs@haskell.org> > >> Subject: Re: Parser.y rewrite with parser combinators > >> > >> > >> > >> Am Di., 9. Okt. 2018 um 00:25 Uhr schrieb Vladislav Zavialov > >> <vlad.z.4...@gmail.com>: > >> > >> [...] That's true regardless of implementation technique, parsers are > >> rather > >> delicate. > >> > >> > >> > >> I think it's not the parsers themselves which are delicate, it is the > >> language that they should recognize. > >> > >> > >> > >> A LALR-based parser generator does provide more information > >> when it detects shift/reduce and reduce/reduce conflicts, but I never > >> found this information useful. It was always quite the opposite of > >> being helpful - an indication that a LALR parser could not handle my > >> change and I had to look for workarounds. [...] > >> > >> > >> > >> Not that this would help at this point, but: The conflicts reported by > >> parser generators like Happy are *extremely* valuable, they hint at > >> tricky/ambiguous points in the grammar, which in turn is a strong hint > >> that the language you're trying to parse has dark corners. IMHO every > >> language designer and e.g. everybody proposing a syntactic extension to > >> GHC should try to fit this into a grammar for Happy *before* proposing > >> that extension. If you get conflicts, it is a very strong hint that the > >> language is hard to parse by *humans*, too, which is the most important > >> thing to consider. Haskell already has tons of syntactic warts which can > >> only be parsed by infinite lookahead, which is only a minor technical > >> problem, but a major usablity problem. "Programs are meant to be read by > >> humans and only incidentally for computers to execute." (D.E.K.) </rant> > >> ;-) > >> > >> > >> > >> The situation is a bit strange: We all love strong guarantees offered by > >> type checking, but somehow most people shy away from "syntactic type > >> checking" offered by parser generators. Parser combinators are the Python > >> of parsing: Easy to use initially, but a maintenance hell in the long run > >> for larger projects... > >> > >> > >> > >> Cheers, > >> > >> S. > > _______________________________________________ > > ghc-devs mailing list > > ghc-devs@haskell.org > > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs > _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs