From: William Harold Newman <william.newman@airmail.net>
To: caml-list@inria.fr
Subject: [Caml-list] functors with style?
Date: Mon, 19 Nov 2001 10:32:34 -0600 [thread overview]
Message-ID: <20011119103234.A2147@rootless> (raw)
I have some questions about functorial programming style.
First, a general question. I've used the ocaml-3.02 source as an
example when I couldn't guess something about normal style, but it
doesn't seem to use functors much. Since it looks like a great deal of
work has been done on functors, I expect that there are applications
which depend on them. Is there any publicly available Ocaml code which
someone could recommend as an example of good functorial style?
Then, some specific questions about this toy confidence_interval.mli:
module type ORDERING =
sig
type t
val are_ordered: t -> t -> bool
end
module F:
functor (Ordering: ORDERING) ->
sig
type t
val new_t: Ordering.t -> Ordering.t -> t
val lo: t -> Ordering.t
val hi: t -> Ordering.t
end
module Int:
sig
type t
val new_t: int -> int -> t
val lo: t -> int
val hi: t -> int
end
module Float:
sig
type t
val new_t: float -> float -> t
val lo: t -> float
end
As you can see from this example, my impulse is to give names to
modules like $Confidence_interval.Int$ and $Confidence_interval.Float$
(which are defined in confidence_interval.ml as $F(Int_ordering)$ and
$F(Float_ordering)$), but that leads to annoyances:
* It's annoying to have to specify the redundant signatures for
$Int_confidence_interval$ and $Float_confidence_interval$.
They're exactly parallel by intent, so I'd like to
construct the signatures with a functor-like thing, but from the
syntax in section 6.10 of the manual, I'm pretty sure that I can't.
* I can't find a way to use the $F$ to define anything
in the top level namespace, e.g. $Int_confidence_interval$
or $My_custom_type_confidence_interval$, so I end up
with $Confidence_interval.Int$ here and then, when I use $F$
later for other things, $My_custom_type.Confidence_interval$,
and the slightly-baroque and not-at-all-parallel names are annoying.
It occurs to me that these annoyances could be avoided by keeping the
functor-constructed modules anonymous, using explicit functor
expressions (e.g. $Confidence_interval.F(Int_order)$ and
$Confidence_interval.F(My_custom_type)$) in any code which uses the
modules. Would that be a good way to do it? Or is there some other
good way?
If I did use explicit functor expressions everywhere, it'd be readable
enough: if my intent is make the things exactly parallel, then using
the explicit functor expressions everywhere would make that obvious,
so I'd be happy. But because my previous closest approach to functors
was using templates in g++, I'm predisposed to worry about the
compiler emitting multiple copies of the functor expansion if I don't
give the functor expansion a home in a particular file. Is that an
issue in Ocaml?
--
William Harold Newman <william.newman@airmail.net>
"Furious activity is no substitute for understanding." -- H. H. Williams
PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
next reply other threads:[~2001-11-19 16:58 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-11-19 16:32 William Harold Newman [this message]
2001-11-19 19:31 ` Francisco Valverde Albacete
2001-11-19 18:32 Krishnaswami, Neel
2001-11-19 22:10 ` Shivkumar Chandrasekaran
2001-11-20 16:48 ` Brian Rogoff
[not found] <9td4tb$csv$1@qrnik.zagroda>
2001-11-20 12:26 ` Marcin 'Qrczak' Kowalczyk
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=20011119103234.A2147@rootless \
--to=william.newman@airmail.net \
--cc=caml-list@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