Browse thread
[Caml-list] subtyping, polymorphism, higher order types.....
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | brogoff@s... |
| Subject: | Re: [Caml-list] subtyping, polymorphism, higher order types..... |
On Thu, 3 Jul 2003, Shaddin Doghmi wrote: > In my experiences with ocaml, one of the major frustrations i constantly > run into is the lack of subtyping. I don't find that a frustration, but you may have been doing OO for a long time. I tend to prefer non OO approaches now. > However, there is still the issue of defining stuff such as "equality > types", "comparables", and such, allowing overloading of functions on > those. You'll be interested in G'Caml http://cristal.inria.fr/~furuse/generics/index.html which will be updated after the release of 3.07. > 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). You're always allowed to use default equality (inequality, comparison, hashing) so you may want to adopt a coding style that by default uses a module specific comparison. > 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. The workaround for higher-order type constructors is described here http://caml.inria.fr/archives/200302/msg00021.html and a very simple modification of this idea (think module type Identifiable) gets pretty close to what I think you want. -- Brian ------------------- 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