Type checker plugins
Iavor Diatchki
iavor.diatchki at gmail.com
Thu Oct 23 02:31:26 UTC 2014
Hi,
It shouldn't be hard to do the merge, but I am not sure that I'll have time
to do it before the weekend---I'll give it a go then.
-Iavor
On Tue, Oct 21, 2014 at 9:40 AM, Adam Gundry <adam at well-typed.com> wrote:
> Thanks Iavor, this is really helpful!
>
> If you have a moment to merge Simon's more recent changes on
> wip/new-flatten-skolems-Aug14, I'm keen to try out the new
> unflattening... or I can have a go at the merge if it would help?
>
> You may be right that flattened constraints are easier to work with in
> some cases, so it would be great if the plugin could choose which it
> sees. Unfortunately I'm not sure we can easily unflatten *some*
> constraints, given the way unflattening will work in the new
> getInertUnsolved. One option might be for tcPluginSolve to be called in
> both places, with a boolean parameter.
>
> Cheers,
>
> Adam
>
>
> On 18/10/14 23:33, Iavor Diatchki wrote:
> > Hello,
> >
> > Just a heads up, if anyone is playing around with this: I just updated
> > the plugin interface a bit.
> >
> > Here are the changes:
> > - A plugin now gets 3 sets of constraints: given, derived, and wanted
> > (in that order)
> > - Plugins are now also presented with dictionary constraints (i.e.,
> > you may see equalities, function equalities, and dictionaries)
> > - A plugin does not need to return all constraints that need to be
> > put back in the inert set. This is both simpler and more efficient, I
> > think. So, now a plugin can return one of these two results:
> > - All is good: plugin returns some solved constraints, and some
> > new constraints to be processed by the constraint solver. The solved
> > constraints are removed from the inert set, and their evidence variables
> > are defined. The new work is added to the work list.
> > - Found contradiction: plugin returns a list of the conflicting
> > constraint; these are removed from the inert set, and re-added as
> > insoluable.
> >
> > Happy hacking,
> > -Iavor
> >
> >
> >
> >
> >
> >
> > On Fri, Oct 17, 2014 at 3:36 PM, Iavor Diatchki
> > <iavor.diatchki at gmail.com <mailto:iavor.diatchki at gmail.com>> wrote:
> >
> > Hello,
> >
> > On Thu, Oct 16, 2014 at 3:58 AM, Adam Gundry <adam at well-typed.com
> > <mailto:adam at well-typed.com>> wrote:
> >
> >
> >
> > One problem I've run into is transforming the flattened
> > CFunEqCans into
> > unflattened form (so the flatten-skolems don't get in the way of
> > AG-unification). Do you know if there is an easy way to do this,
> > or do I
> > need to rebuild the tree manually in the plugin?
> >
> >
> > One thing that occurred to me about this: when constraints are
> > "flattened",
> > it is easy for a plugin to pick-out only the one that it cares
> > about. If things were fully
> > unflattened, this would not be the case... For example, if I have a
> > constraint:
> >
> > (2 + F a) ~ F a + F a
> >
> > In the flattened form, this will become:
> > (F a ~ f1, 2 + f1 ~ f2, f1 + f2 ~ f3, f2 ~ f3)
> >
> > So, the type-nats plugin would pick out: (2 + f1 ~ f2, f1 + f2 ~ f3,
> > f2 ~ f3),
> > and ignore (F a ~ f1), as it knows nothing about arbitrary type
> > functions.
> >
> > So, if we want to do un-flattening, I think we should do it only on
> > those constraints
> > that are of interest to the plugin.
> >
> >
> >
> >
> > Also, I notice that you are providing only equality constraints
> > to the
> > plugin. Is there any reason we can't make other types of
> constraint
> > available as well? For example, one might want to introduce a
> > typeclass
> > with a special solution strategy (cf. Coercible, or the Has
> class in
> > OverloadedRecordFields).
> >
> >
> > Yeah, we should probably pass-in all constraints, inlcluding derived
> > ones.
> > The reason it is not like that is pretty much historical now.
> > So I'll have a go at making this change.
> >
> > -Iavor
> >
> >
> >
> >
> >
> >
> >
> > > - As an example, I've extracted my work on using an SMT
> solver at the
> > > type level as a separate plugin:
> > >
> > > https://github.com/yav/type-nat-solver
> > >
> > > - To see how to invoke a module that uses a plugin, have a
> look in
> > > `examples/A.hs`.
> > > (Currently, the plugin assumes that you have `cvc4`
> installed and
> > > available in the path).
> > >
> > > - Besides this, we don't have much documentation yet. For
> hackers:
> > > we tried to use `tcPlugin` on
> > > `TcPlugin` in the names of all things plugin related, so
> you could
> > > grep for this. The basic API
> > > types and functions are defined in `TcRnTypes` and
> `TcRnMonad`.
> > >
> > > Happy hacking,
> > > -Iavor
>
> --
> Adam Gundry, Haskell Consultant
> Well-Typed LLP, http://www.well-typed.com/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20141022/3e8d7af0/attachment.html>
More information about the Glasgow-haskell-users
mailing list