From: Brian Rogoff <bpr@best.com>
To: Tom _ <tom7ca@yahoo.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] classes vs modules
Date: Sun, 27 May 2001 21:15:56 -0700 (PDT) [thread overview]
Message-ID: <Pine.BSF.4.21.0105272011250.5527-100000@shell5.ba.best.com> (raw)
In-Reply-To: <20010527235252.69384.qmail@web11906.mail.yahoo.com>
On Sun, 27 May 2001, Tom _ wrote:
> > You can do this now if you make a PolySet module by
> > copying the
> > "monomorphic" implementation from the stdlib,
> > changing elt and t to
> > 'a elt and 'a t and, using that instead of Set,
> > something like:
> >
> > let f (cmp : 'a -> 'a -> bool) =
> > let module SomeSet =
> > PolySet.Make
> > (struct type 'a t = 'a let compare =
> > Pervasives.compare end) in
> > ()
>
> Thanks; that's very useful to know, and it seems
> to be working. I think it might be useful to feature
> the ability to have polymorphic types in modules
> a little more prominently in the documentation.
Yes, or you have to make a habit of reading lots of the posts from
yesteryear in the mailing list archive. There is a lot of good information
there, unfortunately it isn't so easy to find.
> Maybe some of the standard modules could take
> advantage of this more (it would require some
> changes to their interfaces, I suppose).
Yes, the interfaces would have to change. I think it is better that the
interfaces don't have type variables; really the most compelling (IMO of
course!) reason for making them polymorphic is to use the parameterization
trick for recursive types, and I am hoping that a future OCaml (OCaml 4?)
handles this nicely by stealing Moscow ML features or by adopting the
mixin modules described briefly here by Tom Hirschowitz a few months ago.
> The type signatures I get out of my module after
> converting it are a little odd looking:
>
> type 'a t = 'a
> type 'a tree = Empty | Node of ...
> val insert :
> ('a t t t -> 'a t t -> bool) ->
> 'a t t t -> 'a t tree -> 'a tree
> ...
>
> Is there any useful information in the different
> number of t's? They should all be equivalent, right?
Something looks wrong to me here. Could you post more of your code, or
provide a pointer to the original SML code? I don't see why you have a
'a t t t. The OCaml code should look a lot like the SML code, and the
signatures should only differ a little.
> BTW, I opted for just passing the "lt" function
> as explicit arguments to all the functions in the
> module that need them.
Why not just parameterize the module by the comparison function?
> That seems like the most general approach, although it means some extra
> arguments and it doesn't guarantee consistency,
> as people might pass incompatible versions of "lt"
> to different calls;
Right, I think you should pull the comaprison out of the functions and
parameterize the module for this reason.
-- Brian
-------------------
To unsubscribe, mail caml-list-request@inria.fr. Archives: http://caml.inria.fr
next prev parent reply other threads:[~2001-05-28 4:16 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-27 13:31 Tom _
2001-05-27 16:14 ` Markus Mottl
2001-05-27 20:54 ` Brian Rogoff
2001-05-27 23:13 ` Markus Mottl
2001-05-27 23:52 ` Tom _
2001-05-28 4:15 ` Brian Rogoff [this message]
2001-05-28 8:34 ` Andreas Rossberg
2001-05-28 8:24 ` Andreas Rossberg
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=Pine.BSF.4.21.0105272011250.5527-100000@shell5.ba.best.com \
--to=bpr@best.com \
--cc=caml-list@inria.fr \
--cc=tom7ca@yahoo.com \
/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