GHC typecheck API
Németh Boldizsár
nboldi at elte.hu
Fri Dec 1 02:49:16 UTC 2017
Thank you for the suggestions!
Setting the -fdefer-type-errors flag is indeed a good way to do it (with
also adding Opt_DeferTypedHoles and Opt_DeferOutOfScopeVariables for
other kind of errors).
Boldizsár
2017.12.01. 4:12 keltezéssel, Christopher Done írta:
> I suppose setting -fdefer-type-errors would also be handy in this
> scenario!
>
> On Thu, 30 Nov 2017 at 15:37, Simon Peyton Jones via ghc-devs
> <ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>> wrote:
>
> This sounds like a good project!
>
> For the most part things look good:
>
> * Most type checker errors arise from *type constraints*. The type
> checkder tries to solve these, but returns an elaborated syntax
> tree (i.e. typechecked, and annotated with types) even if
> constraint solving fails.
>
> * Some renamer errors are like this, notably out-of-scope
> variables. (They just show up as another constraint.)
>
> However there is historical baggage. Back in the beginning, most
> errors were treated by throwing an exception in the typechecker
> monad; such exceptions can be caught, so that we can get more than
> one error from the file, but no syntax tree is returned. Example
> let f = <expression> in <body>
> If there was an error in <expression> we'd throw an exception,
> catch it at the 'let', give 'f' the type
> f :: forall a. a
> and continue to typecheck <body>.
>
> The trouble with the exception stuff is that you don't get an
> elaborated syntax tree.
>
> So: I think you can get some of the way today, just by returning
> the tree anyway even if there is an error to report. But it'd
> take a bit more work to make more and more errors into things that
> don't throw an exception. (Look for failTc, failRn in thd code.)
>
> I'm not very familiar with the GHC API for this part, but others
> will be. I'm certain it can be improved, so rather than hacking
> around what is there already, do propose and implement improvements.
>
> Simon
>
> | -----Original Message-----
> | From: ghc-devs [mailto:ghc-devs-bounces at haskell.org
> <mailto:ghc-devs-bounces at haskell.org>] On Behalf Of Németh
> | Boldizsár
> | Sent: 30 November 2017 05:42
> | To: ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>
> | Subject: GHC typecheck API
> |
> | Dear GHC developers,
> |
> | I'm developing a framework for development tools for Haskell. I
> use the
> | GHC API to parse and typecheck the source files. I recently
> started to
> | work on a quick-fix (automatic program correction) for Haskell
> source
> | code (correcting parenthesis problems, like 'putStrLn "xxx" ++
> show a'
> | ==> 'putStrLn ("xxx" ++ show a)'). To do that I need to get the
> typed
> | syntax tree even if the program contains type or rename errors.
> I could
> | only do this by a nasty hack, adding a new TH module finalizer
> | (tcg_th_modfinalizers) to extract the type checker's state before it
> | fails. Is there a "correct" way to do this? I would not like this
> | refactorings to be unusable if the GHC API changes.
> |
> | By the way, if you know of any similar attempt please let me know.
> |
> | Sincerely,
> | Boldizsár Németh
> | haskelltools.org <http://haskelltools.org>
> |
> | _______________________________________________
> | ghc-devs mailing list
> | ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>
> |
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.hask
> | ell.org <http://ell.org>%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-
> | devs&data=02%7C01%7Csimonpj%40microsoft.com
> <http://40microsoft.com>%7C364b8db55e064415650d08d537b
> |
> 5323f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636476173738772433&sda
> | ta=Kf5rZYwht8ZGBtGNNH6Q44wLIeefxzHn2UfDIdrNNMU%3D&reserved=0
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org <mailto:ghc-devs at haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20171201/50ed5b84/attachment.html>
More information about the ghc-devs
mailing list