<?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/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....."
  prev="2003/07/66caba7829a123e6bb39d1d9c4b9bb00"
  next="2003/07/c8147b1a3fde487932256f4013f9c14f"
  next-in-thread="2003/07/0235d8bf220e9fe63e99b346ae379d7b"
  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>
In my experiences with ocaml, one of the major frustrations i constantly
run into is the lack of subtyping. Polymorphic variants partially fix
that problem, by allowing one to define types as immediate unions (i.e.
without constructors) of other types, hence allowing a value to belong
to both the subtype and the supertype, not to mention multiple unrelated
types.

However, there is still the issue of defining stuff such as "equality
types", "comparables", and such, allowing overloading of functions on
those. For example, when writing a large system with many datatypes, i
tend to find myself commenting each type definition with stuff like
"(*equality type*)",  to indicate to myself whether or not im allowed to
use the default = operator on that type(for example, a set type would
not get that annotation).  Haskell solves that problem through the use
of type classes.

Another problem i run into is the inability to define parametric higher
order polymorphic types (is this the correct terminology?).. for
example. lets say i want to define the following type:

type 'a identifier = I of 'a *int | S of 'a*int

but, what if i want to restrict 'a to a narrower class of types (as
opposed to ad hoc types)... i would wish to say something like:

type 'identifiable identifier = I of 'a*int | S of 'a*int

where 'identifiable is a type class of some sort. I am not sure if
Haskell solves this problem using type classes(seems like it could),
Someone experienced in Haskell would probably know.

I wonder if there are any plans to implement such a system in ocaml? if
so, what approach would be taken?

just a few thoughts.....



-------------------
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>

