<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE message PUBLIC
  "-//MLarc//DTD MLarc output files//EN"
  "../../mlarc.dtd"[
  <!ATTLIST message
    listname CDATA #REQUIRED
    title CDATA #REQUIRED
  >
]>

  <?xml-stylesheet href="../../mlarc.xsl" type="text/xsl"?>


<message 
  url="2003/07/6fb9d2897cba518cab99e18cea396c7a"
  from="Jacques Garrigue &lt;garrigue@k...&gt;"
  author="Jacques Garrigue"
  date="2003-07-05T02:21:17"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types....."
  prev="2003/07/21695e1546cd0d7c3589874712a38466"
  next="2003/07/0c7727744a42d1a2c9eeb08c4df40728"
  prev-in-thread="2003/07/9265629f02a5161f666b1798bc5cc5e1"
  next-in-thread="2003/07/0c7727744a42d1a2c9eeb08c4df40728"
  prev-thread="2003/07/9d5c44985ef4846fa1879e4f91dc551f"
  next-thread="2003/07/c8147b1a3fde487932256f4013f9c14f"
  root="../../"
  period="month"
  listname="caml-list"
  title="Archives of the Caml mailing list">

<thread subject="[Caml-list] subtyping, polymorphism, higher order types.....">
<msg 
  url="2003/07/49ed1832a167d71344f550f25717a45f"
  from="Shaddin Doghmi &lt;shaddin@m...&gt;"
  author="Shaddin Doghmi"
  date="2003-07-03T14:33:27"
  subject="[Caml-list] subtyping, polymorphism, higher order types.....">
<msg 
  url="2003/07/0235d8bf220e9fe63e99b346ae379d7b"
  from="brogoff@s..."
  author="brogoff@s..."
  date="2003-07-03T16:55:32"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types.....">
</msg>
<msg 
  url="2003/07/c6d81119241d5306bafb0f9bc21d61e9"
  from="Daniel Weil &lt;daniel.weil@a...&gt;"
  author="Daniel Weil"
  date="2003-07-04T06:43:23"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types.....">
</msg>
<msg 
  url="2003/07/9265629f02a5161f666b1798bc5cc5e1"
  from="Vasile Rotaru &lt;vrotaru@s...&gt;"
  author="Vasile Rotaru"
  date="2003-07-04T21:31:54"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types.....">
<msg 
  url="2003/07/6fb9d2897cba518cab99e18cea396c7a"
  from="Jacques Garrigue &lt;garrigue@k...&gt;"
  author="Jacques Garrigue"
  date="2003-07-05T02:21:17"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types.....">
<msg 
  url="2003/07/0c7727744a42d1a2c9eeb08c4df40728"
  from="Fernando Alegre &lt;fernando@c...&gt;"
  author="Fernando Alegre"
  date="2003-07-05T07:46:55"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types.....">
</msg>
<msg 
  url="2003/07/da08ccf0eadd794f5980a4f8a044d49e"
  from="Vasile Rotaru &lt;vrotaru@s...&gt;"
  author="Vasile Rotaru"
  date="2003-07-05T15:53:36"
  subject="Re: [Caml-list] subtyping, polymorphism, higher order types.....">
</msg>
</msg>
</msg>
</msg>
</thread>

<contents>
From: Vasile Rotaru &lt;vrotaru@seznam.cz&gt;
&gt; On Thu, 03 Jul 2003 10:33:15 -0400
&gt; Shaddin Doghmi &lt;shaddin@mitre.org&gt; wrote:
&gt; 
&gt; &gt; In my experiences with ocaml, one of the major frustrations i
&gt; &gt; constantly run into is the lack of subtyping. [..]

You should be a bit more precise: ocaml has both explicit subtyping
(for objects), and parametric polymorphism (which is also a form of
implicit subsumption). So what it does not have is only the form of
implicit subtyping you are used to, and which is incompatible with
most forms of type inference.

&gt;   The Shaddin message (and other influences -- the most notable being
&gt; the Oberon language) had induced me to an idea which I offer here for
&gt; discussion. Open (or extensible) product types. Something like this
&gt; 
&gt;     type point = int * int * _ ;;
&gt; 
&gt; where the underscore stands for any sequences of types. Colour, taste,
&gt; strangeness, etc.
&gt; 
&gt;   Now a function designed to work with with "point" will work with any
&gt; type which is a "point" extension. Just now I cannot think of a good
&gt; "ocamlish" syntax for extending types. Maybe?
&gt; 
&gt;     type color_point = &lt;point&gt; * int * _
&gt; 
&gt;   The big question is what this will do with the type system of Ocaml
&gt; and whether it worth the pain..

This looks very much like an ocaml object type to me...
Is the absence of labels for fields important?

Note that you can also encode the above with polymorphism:

  type 'a point = int * int * 'a
  type 'a color_point = (int * 'a) point

The only trouble here is that there is no way to create heterogeneous
collections, since you cannot coerce a [unit color_point] to a [unit
point]. Actually, this just comes from a missing relation in the ocaml
type algebra: the type Obj.t is not recognized as a supertype for all
types. If this were the case then you would be able to write:
  let l = [ (p :&gt; Obj.t point); (cp :&gt; Obj.t point) ]

That would be easy enough to add, but is it that useful?

     Jacques Garrigue

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners

</contents>

</message>

