[Yhc] Some more changes to core
Tom Shackell
shackell at cs.york.ac.uk
Sun Aug 5 05:00:09 EDT 2007
Neil Mitchell wrote:
> I agree its definitely necessary in the case of classes. I don't see
> treating classes like the other functions as being consistent. Classes
> are fundamentally different - most functions have one module name,
> classes have three - this is a built in inconsistency. I can see
> advantages to being able to "spot" class dictionaries and recover
> precisely their original context information, I've wanted it before
> and this desugaring scheme, applied only to classes, would give that.
Of course it's still very easy in the case that it's applied everywhere.
You split the string based on ';'. If you get two parts its a normal
name, if you get 3 or 4 parts its a class instance. Three is possible
because the instance dictionary is generated as
Foo.Bar;Prelude.Eq;Foo.Bar.Baz = (,) Foo.Bar;Prelude.Eq;Foo.Bar.Baz;==
Foo.Bar;Prelude.Eq;Foo.Bar.Baz;/=
> Don't you then pay to create a thunk, then evaluate it later? I
> thought that this was one of the main costs saved by strictness, which
> wouldn't be saved by a case transformation.
Conceptually, no
case f x of
_ -> ...
is a perfectly reasonable description to the backend that 'f x' should
be compiled strictly (i.e. without thunks).
> I would have thought the best encoding would be:
>
> Foo.Bar;Foo.Bar.Baz;Prelude.Eq.==
>
> OR
>
> Prelude.Eq;Foo.Bar.Baz;Foo.Bar.==
>
> In the first the rule for extracting module names is "up to the first
> ; or last .", in the second its "skip all bits before ;" - and I'm
> leaning towards the first. I read the first as "hey, I'm located in
> Foo.Bar, I operate over Foo.Bar.Baz and I'm really just a type
> specific version of Prelude.Eq.=="
Yeah that would be fine, don't forget that the class dictionary is
Foo.Bar;Foo.Bar.Baz;Prelude.Eq
if that has any bearings on trying to understand what things are.
> Whatever scheme we do go with, I suggest a coreFunModule function be
> added which obtains the module from a function name, and assuming
> dictionaries are unambiguous, coreFunDictionary to split up the
> pieces.
or even 'coreModule' which would also work for data types.
'coreFunInstance' is possibly a better name than 'coreFunDictionary'.
Cheers
Tom
More information about the Yhc
mailing list