Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] subtyping, polymorphism, higher order types.....
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-07-03 (16:55)
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

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 

> 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

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 Archives:
Bug reports: FAQ:
Beginner's list: