[Haskell-cafe] Re: Cost of Overloading vs. HOFs

Conal Elliott conal at conal.net
Fri May 4 22:20:03 EDT 2007


[switching to haskell-cafe]

thanks for the explanation, John.  doesn't the list cases mentioned in the
definition of (+) below assume whole program, in order to know all Num
instances?

On 5/4/07, John Meacham <john at repetae.net> wrote:
>
> On Fri, May 04, 2007 at 05:06:10PM -0700, Conal Elliott wrote:
> > Cool.  You know which types to consider because jhc is a whole-program
> > compiler?
>
> Yes. though, i have since redone the back end so there is no technical
> reason for it to be whole program any more, you can just benefit from
> more optimizations that way. The old backend required global knowledge
> to compile at all.
>
>
> > Given the whole program, why not monomorphize, and inline away all of
> the
> > dictionaries?
>
> Well that is the thing, there are no dictionaries at all, the only extra
> arguments passed in are the types so,
>
> f :: forall a . (Foo a, Baz a, Bar a Int, Bred a) => a -> a
>
> still is only passed the single hidden argument of 'a' since a case on
> it will determine what method to use.
>
> (+) a x y = case a of
>         Int -> plusInt x y
>         Float -> plusFloat x y
>
> and so forth. a here is a type, of kind '*'.
>
>
> since the method lookup is done explicitly via the case statement, it
> can be optimized via standard transformations in nice ways.
>
>         John
>
>
>
>
>
>
> >
> > - Conal
> >
> > On 5/4/07, John Meacham <john at repetae.net> wrote:
> > >
> > >On Fri, May 04, 2007 at 03:07:41PM -0700, Conal Elliott wrote:
> > >> Does anyone know what became of Dictionary-free Overloading by
> Partial
> > >> Evaluation <http://web.cecs.pdx.edu/%7Empj/pubs/pepm94.html>?  Is it
> > >> impractical for some reason?
> > >
> > >jhc also uses a dictionary free approach, doing a case directly on the
> > >type parameter.
> > >
> > >The nice thing about this is that _all_ methods can be determined by a
> > >single case evaluation, because finding out the right instance for any
> > >method will determine the right instance for all other methods too for
> a
> > >given type. The standard case-of-known-value optimization takes care of
> > >later scrutinizations (method lookups) on the same type.
> > >
> > >        John
> > >
> > >
> > >--
> > >John Meacham - ⑆repetae.net⑆john⑈
> > >_______________________________________________
> > >Glasgow-haskell-users mailing list
> > >Glasgow-haskell-users at haskell.org
> > >http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> > >
>
> > --
> > Glasgow-haskell-users mailing list
> > Glasgow-haskell-users at haskell.org
> > http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
>
> --
> John Meacham - ⑆repetae.net⑆john⑈
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070504/d6531cf0/attachment-0001.htm


More information about the Haskell-Cafe mailing list