caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Brian Hurt <bhurt@spnz.org>
To: Yoann Padioleau <padator@wanadoo.fr>
Cc: Jon Harrop <jon@ffconsultancy.com>, caml-list@yquem.inria.fr
Subject: Re: [Caml-list] stl?
Date: Tue, 3 Mar 2009 23:56:26 -0500 (EST)	[thread overview]
Message-ID: <alpine.DEB.2.00.0903032345110.7859@beast> (raw)
In-Reply-To: <87r61eyu5c.fsf@aryx.cs.uiuc.edu>



On Tue, 3 Mar 2009, Yoann Padioleau wrote:

> Brian Hurt <bhurt@spnz.org> writes:
>
>> On Tue, 3 Mar 2009, Jon Harrop wrote:
>>
>>> Functors give
>>> you the same capability in OCaml but they are rarely used precisely because
>>> the functionality is not very useful.
>>
>> I think I disagree with this.  I think functors aren't used very much
>> in Ocaml because:
>
>  0) they are intrusive! putting code inside a functor may entail the
> need to modify also lots of related code. That's one of the worst
> thing for a programming feature. Your modification can not be local. I
> hate monad for the same reason, and I like ocaml exception mechanism,
> and using sometimes global refs for the same reason.

No.

Here's what you can do.  Say you had an old function:
 	let foo x = ...
and you want to functorize it for whatever reason.  But you have lots of 
code depending upon the old type signature that you don't want to change. 
First, you functorize foo:

 	module Make(X: Whatever) = struct let foo x = ... end;;

Then you include the "classic foo", like:

 	module T = Make(struct ... old defns ... end);;
 	include T;;

Where ... old defns ... is all the original types and functions that foo 
used that are now provided by the functor.  So you now have a module that 
exports both a "functorized" foo and a "classic" foo, and all the old code 
continues to just work (after a recompile, natch).

This is much the same trick you use in Haskell when adding a typeclass 
dependency to the signature of a function- so long as you provide a 
typeclass instance for the old type, the old code continues to work with a 
recompile.

I also comment, this is also a problem C++ templates have- templatizing a 
class in C++ is also an "intrusive" change.

Brian


  reply	other threads:[~2009-03-04  4:57 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-03 21:40 stl? Raoul Duke
2009-03-03 22:31 ` [Caml-list] stl? Yoann Padioleau
2009-03-03 22:42   ` Till Varoquaux
2009-03-03 23:36   ` Jon Harrop
2009-03-04  0:13     ` Peng Zang
2009-03-04  0:58     ` Yoann Padioleau
2009-03-04  1:10       ` Raoul Duke
2009-03-04  1:19         ` Pal-Kristian Engstad
2009-03-04  1:21         ` Yoann Padioleau
2009-03-04  1:29       ` Jon Harrop
2009-03-04 14:26     ` Kuba Ober
2009-03-04 14:24   ` Kuba Ober
2009-03-03 23:42 ` Jon Harrop
2009-03-04  0:11   ` Brian Hurt
2009-03-04  1:05     ` Yoann Padioleau
2009-03-04  4:56       ` Brian Hurt [this message]
2009-03-04 20:11         ` Yoann Padioleau
2009-03-04 21:59           ` Brian Hurt
2009-03-04 22:42             ` Yoann Padioleau
2009-03-04 23:19               ` Jon Harrop
2009-03-04 23:03             ` Jon Harrop
2009-03-11  3:16               ` Brian Hurt
2009-03-11  5:57                 ` David Rajchenbach-Teller
2009-03-11  6:11                   ` David Rajchenbach-Teller
2009-03-04  1:59     ` Jon Harrop
2009-03-04  6:11       ` Brian Hurt
2009-03-04 14:08         ` Christophe TROESTLER
2009-03-04 14:19         ` Peng Zang
2009-03-04 16:14           ` Brian Hurt
2009-03-04 16:35             ` Andreas Rossberg
2009-03-04 16:40             ` Peng Zang
2009-03-04 21:43             ` Nicolas Pouillard
2009-03-05 11:24             ` Wolfgang Lux
2009-03-04 19:45         ` Jon Harrop
2009-03-04 21:23           ` Brian Hurt
2009-03-04 23:17             ` Jon Harrop
2009-03-05  2:26             ` stl? Stefan Monnier
2009-03-04  3:10     ` [Caml-list] stl? Martin Jambon
2009-03-04  6:18       ` Brian Hurt
2009-03-04 16:35 ` Mikkel Fahnøe Jørgensen
2009-03-04 16:48   ` Yoann Padioleau
2009-03-04 20:07     ` Jon Harrop
2009-03-04 20:31       ` Richard Jones
2009-03-04 20:49       ` Yoann Padioleau
2009-03-04 21:20         ` Andreas Rossberg
2009-03-04 21:51         ` Pal-Kristian Engstad
2009-03-04 22:50           ` Jon Harrop
2009-03-04 23:18             ` Pal-Kristian Engstad
2009-03-05  1:31               ` Jon Harrop
2009-03-05  2:15                 ` Pal-Kristian Engstad
2009-03-05  3:26                   ` Jon Harrop
2009-03-05  6:22                     ` yoann padioleau
2009-03-05  7:02                       ` Raoul Duke
2009-03-05  8:07                         ` Erick Tryzelaar
2009-03-05  9:06                       ` Richard Jones
2009-03-05  9:34                         ` malc
2009-03-05  9:56                           ` Richard Jones
2009-03-05 10:49                             ` malc
2009-03-05 11:16                               ` Richard Jones
2009-03-05 12:39                                 ` malc
2009-03-05 19:39                       ` Jon Harrop
2009-03-05 21:10                       ` Pal-Kristian Engstad
2009-03-05 22:41                         ` Richard Jones
2009-03-05 22:53                         ` malc
2009-03-05  8:59                   ` Richard Jones
2009-03-05 17:50                     ` Raoul Duke
2009-03-05  8:17             ` Kuba Ober
2009-03-05  1:06         ` Jon Harrop
2009-03-05  9:09           ` Richard Jones
2009-03-05 20:44             ` Jon Harrop
2009-03-05 20:50               ` Jake Donham
2009-03-05 21:28                 ` [Caml-list] OCaml's intermediate representations Jon Harrop

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=alpine.DEB.2.00.0903032345110.7859@beast \
    --to=bhurt@spnz.org \
    --cc=caml-list@yquem.inria.fr \
    --cc=jon@ffconsultancy.com \
    --cc=padator@wanadoo.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;
as well as URLs for NNTP newsgroup(s).