[Hugs-users] Hugging to bits (cont)

Anthony Clayden anthony_clayden at clear.net.nz
Fri Sep 28 11:20:27 UTC 2018


On Sat, 28 Jul 2018 at 12:35 PM, Anthony Clayden <
anthony_clayden at clear.net.nz> wrote:

> ...
> So I have a modified version of the FD consistency rules, that supports
> expressing a type-level type equality test, but avoids the bogusness in GHC
> Trac #10675. With the equality test I can now express all the examples in
> the HList paper [2004] -- those guys abandoned Hugs.
>
> I have a better version of the instance overlap rules, determined
> statically from examining instance heads. IMO GHC's deferred checking is
> far too shonky: you think your instances are OK then many moons later you
> (or more likely somebody using your library) gets puzzling rejections to do
> with overlaps.
>

Specifically, I've implemented the suggestion here
https://ghc.haskell.org/trac/ghc/ticket/15632#comment:2

(Suggested/implemented after experimenting with some exotic variations;
also after ditching the FunDep consistency rule altogether, as an
experiment -- which behaved sensibly if you kept your instances sensible,
but triggered some truly weird stuff too.)

It seems to be going OK with 'ordinary code'. But overlapping TRex
instances with FunDeps are giving indigestion. The trouble seems to be that
internally TRex uses polykinds (row variables are Kind row, not `*`; labels
seem to be something else again). I'm not sure whether type improvement
through FunDeps is able to poke inside row Kinds.



> A quick q in case anybody's listening: Hugs used to have something called
> 'Multi-instance' overlap resolution. There's references to it in the code
> and older documentation. But it's broken and was withdrawn. Anybody know
> what it was trying to do or where I can find docos? It seems it was trying
> to defer checking much like GHC, in which case I won't pursue it.
>

Some detail in an old version of the Higs manual, section 7.1.3 Overlapping
instances, option +m
https://www.haskell.org/hugs/pages/hugsman/exts.html#sect7.1.3

"a lazier form of overlapping instances", but no it's not GHC's deferred
checking: it's looking at constraints to see if it can disambiguate
instance selection by finding an instance for which constraints hold/reject
instances whose head matches the wanted but whose constraints don't hold.
There's an example. Wow! sounds hairy, although that behaviour is what
newbies always think they're getting with constraints. Makes instance
selection undecidable, in general. I'm not surprised it's broken, and I'm
certainly not going to wade into that swamp.

Note Hugs works hard at instance-processing/validation time (i.e. before it
considers wanteds) to join up instances to constraints to instances of the
constraint class. It builds a data structure around each instance decl, so
the info is at its fingertips for doing "multi-instance resolution".

AntC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/hugs-users/attachments/20180928/4d756f64/attachment.html>


More information about the Hugs-Users mailing list