From: Emmanuel Engel <Emmanuel.Engel@lri.fr>
To: Hugo Herbelin <herbelin@margaux.inria.fr>
Cc: caml-list@inria.fr
Subject: Re: Foncteurs polymorphes
Date: Thu, 28 Aug 1997 11:34:36 +0200 [thread overview]
Message-ID: <3405462C.243E@lri.fr> (raw)
In-Reply-To: <199708251652.SAA24264@margaux.inria.fr>
Pour ton probleme de foncteur polymorphe, tu peut trouver une
partie de la solution dans un de mes precedent messages a la
mailling liste. Je ne le trouve pas dans l'archive, voici une
copie de la partie interessante:
:
:
Question:
Existe-t-il un moyen simple et rapide a l'aide du foncteur
Set.Make de creer des ensembles polymorphes qui utilisent une
fonction de comparaison generique (Pervasives.compare par exemple) ??
eg
module GeneriqueSet = Set.Make(struct ?????? end)
Il me semble que non et, que cette impossibilite est plus due a la facon
dont est declare le foncteur qui permet de construire les ensembles qu'a
une vraie limite du systeme; voici une version legerement differente de
ce foncteur qui me permet une telle manip:
module Make(S:sig type 'a t val compare : 'a t -> 'a t -> int end)=
(struct
type 'a elt = 'a S.t
type 'a set = ('a elt) list
let empty = []
and mem = List.mem
and add e s = e::s
end:sig
type 'a elt = 'a S.t
and 'a set
val empty : 'a set
val mem : 'a elt -> 'a set -> bool
val add : 'a elt -> 'a set -> 'a set
end);;
module IntSet = Make(struct type 'a t = int let compare = (compare:int
-> int -> int) end);;
module GenericSet = Make(struct type 'a t = 'a let compare = compare
end);;
------- fin du message
Je suis bien d'accord que cette version, meme si elle permet un peut
plus
de liberte que le version actuelle n'est pas aussi generale que des
foncteurs
"polymorphes". Par exemple, je ne peut pas definir
module PSet = Make(struct type ('a,'b)t = 'a * 'b let compare (x,_)
(y,_) = compare x y end);;
alors qu'avec l'extension que tu propose cela serait a prioris possible.
Toutefois
il me semble que de serieux problemes se profillent a l'horizon avec une
telle extension; en ocaml les foncteurs sont d'ordre superieur et tu
veut pouvoir
lier les variables a n'importe quel niveaux. Cela ressemble furieusement
au systeme F.
Et la je ne suit meme pas sur que le sous typage sous decidable (ie
decider si F(X)
est valide implique de verifier F : S1 -> S2, X : S3 et S1 <: S3 ).
^^^^^^^^
--
- Emmanuel Engel
prev parent reply other threads:[~1997-08-28 9:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-08-25 16:52 Hugo Herbelin
1997-08-27 16:30 ` Jerome Vouillon
1997-08-28 9:34 ` Emmanuel Engel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3405462C.243E@lri.fr \
--to=emmanuel.engel@lri.fr \
--cc=caml-list@inria.fr \
--cc=herbelin@margaux.inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox