caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Andreas Rossberg <rossberg@mpi-sws.org>
To: Gerd Stolpmann <info@gerd-stolpmann.de>
Cc: Dawid Toton <d0@wp.pl>, caml-list <caml-list@yquem.inria.fr>
Subject: Re: [Caml-list] What is an applicative functor?
Date: Fri, 8 Apr 2011 08:50:52 +0200	[thread overview]
Message-ID: <0F248A34-05CF-4640-B122-75C4CE7C2CD2@mpi-sws.org> (raw)
In-Reply-To: <1302212990.8429.1150.camel@thinkpad>

On Apr 7, 2011, at 23:49, Gerd Stolpmann wrote:
> module Make(X : sig end) = struct type t = Variant end
> module M1 = Make(struct end)
> module M2 = Make(struct end)
>
> Now, M1.t and M2.t are incompatible - for nominal types like variants
> the functors aren't applicative, and each instance is a thing of its
> own:

Nitpick: the Make functor is still applicative. All functors in OCaml  
are applicative. The fact that you get different results above is  
caused by the way you apply the functor, not by the way it is defined.

"Applicative" distinguishes functor semantics in OCaml from that in  
SML, where functors are "generative", i.e. you always get new types  
when you apply them.

Aside: In general, you really want to have both: functors with impure  
bodies better be generative, while functors with pure bodies should be  
applicative. The absence of generative functors in OCaml also is the  
reason that you cannot unpack a first-class module in a functor body  
(non-locally), because that is unsound with applicative semantics.

/Andreas


  parent reply	other threads:[~2011-04-08  6:51 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-07 21:12 Dawid Toton
2011-04-07 21:49 ` Gerd Stolpmann
2011-04-08  0:44   ` [Caml-list] " Dawid Toton
2011-04-08  1:34     ` Gerd Stolpmann
2011-04-08  6:50   ` Andreas Rossberg [this message]
2011-04-08  8:04     ` [Caml-list] " Alain Frisch
2011-04-08  8:20       ` Jacques Garrigue
2011-04-08  8:38         ` Jacques Garrigue
2011-04-08  8:44         ` Alain Frisch
2011-04-08 10:09           ` Jacques Garrigue
2011-04-08 11:25           ` Julien Signoles
2011-04-08 11:58             ` Alain Frisch
2011-04-11  7:10               ` Julien Signoles
2011-04-11  7:21                 ` Julien Signoles
2011-04-08 13:43           ` rossberg
2011-04-08 16:26             ` Julien Signoles
2011-04-13  2:36             ` Lucas Dixon
2011-04-13  7:23               ` Andreas Rossberg
2011-04-15  3:08                 ` Lucas Dixon
2011-04-19 14:04                   ` Andreas Rossberg
2011-04-08 16:43     ` Till Varoquaux
2011-04-08 17:35       ` Alain Frisch
2011-04-08 18:44       ` Andreas Rossberg
2011-04-08 21:23     ` Lauri Alanko
2011-04-08 21:34       ` Guillaume Yziquel
2011-04-09 11:41       ` Andreas Rossberg
2011-04-08  5:35 ` Stefan Holdermans

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=0F248A34-05CF-4640-B122-75C4CE7C2CD2@mpi-sws.org \
    --to=rossberg@mpi-sws.org \
    --cc=caml-list@yquem.inria.fr \
    --cc=d0@wp.pl \
    --cc=info@gerd-stolpmann.de \
    /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).