[Python-3000] Fw: typeclasses, duck-typing
Ben.Young at risk.sungard.com
Ben.Young at risk.sungard.com
Thu May 11 11:12:57 CEST 2006
python-3000-bounces+python=theyoungfamily.co.uk at python.org wrote on
10/05/2006 17:39:57:
> At 11:21 AM 5/10/2006 +0100, Ben.Young at risk.sungard.com wrote:
> >Have you taken a look at ConceptGCC? (
> >http://www.osl.iu.edu/~dgregor/ConceptGCC/)
> >
> >It's basically a first cut at implementing the Concepts which will be
> >availiable in the next version of C++. They basically provide full
compile
> >time "duck typing" as well as adaptation for types that don't exactly
fit
> >the concept. (e.g if the type doesn't have a length method, here's how
you
> >provide it.
> >
> >It's a very powerfull idea, and probably well worth looking at for
> >inspiration.
>
> FWIW, I skimmed through the tutorial; it appears that a "Concept" is
> roughly equivalent to a typeclass in Haskell, and a "Model" is roughly
> equivalent to a typeclass instance
Hi Phillip,
I don't know much about Haskell, but this sounds roughly right. As I
understand it, a Concept describes what interface/capabilties a type
should have, while a Model describes a mapping of types onto Concepts for
types that don't fit automatically.
For instance, a Model can be used to give all raw pointer types a
value_type typedef member to allow them to fit the Iterator Concept.
>
> One of the papers on the site mentions something called "concept-based
> overloading", which if I'm reading it correctly, is the idea that's at
the
> heart of this thread; i.e., it should be possible to say that a
particular
> implementation of one operation is dependent upon the availability of an
> implementation of some other operation.
>
Yes, C++ previously had compilicated ways of "overloading" template
implementations based on things like boosts enable_if (you don't want to
know!), but Concepts allow this to be done in a clear and obvious way.
A dynamic version of concepts (I guess a combo of multi-methods and
adaptation) would be great for Python, but it's hard to see how it could
be done simply and efficiently.
Cheers,
Ben
> _______________________________________________
> Python-3000 mailing list
> Python-3000 at python.org
> http://mail.python.org/mailman/listinfo/python-3000
> Unsubscribe: http://mail.python.
> org/mailman/options/python-3000/python%40theyoungfamily.co.uk
>
More information about the Python-3000
mailing list