Comments on current TypeHoles implementation
Thijs Alkemade
thijsalkemade at gmail.com
Fri Oct 5 00:13:35 CEST 2012
On 4 okt. 2012, at 23:33, Roman Cheplyaka <roma at ro-che.info> wrote:
> Sounds cool. I would also expect that if you have several occurences of
> the same unbound identifier, then it gets a unified type.
>
We have actually tried to do it this way for a pretty long time. But it's not as
easy as it sounds. We were hoping to make all holes inside one module
to be shared and get a unified type, but that turned out to not fit with our
implementation of holes. Holes are treated as constraints, which apply to
the type of one function, there's no such thing as a constraint for a whole
module.
You can also not treat the holes as "fake" top level declarations:
> I guess this is something you can get currently by creating a top-level
> declaration
>
> foo = _
>
> and then using foo in several places.
This example will just result in one hole with type "t". The call locations for
`foo' have no influence on its type.
If we'd want holes to just be shared within one function, then that is pretty
easy to do right now. We could turn the definition of a hole in HsExpr into
`HsHole (Maybe RdrName)' (or whatever String-like type is most
appropriate), in the renamer, change rnExpr for HsVars to return a hole
when it can't find it, storing the original name. Then ensure holes with the
same name interact properly (in canHole), and update the way they are
printed.
Best regards,
Thijs
More information about the Glasgow-haskell-users
mailing list