Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
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




      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