caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Eliot Handelman <eliot@generation.net>
To: caml <caml-list@inria.fr>
Cc: Chung-chieh Shan <ccshan@post.harvard.edu>
Subject: Re: [Caml-list] Re: Which syntax to teach ?
Date: Tue, 30 Oct 2007 16:45:53 -0500	[thread overview]
Message-ID: <4727A611.3050507@generation.net> (raw)
In-Reply-To: <47276500.3050501@gmail.com>


>
>>> Chung-chieh Shan wrote:
>>>
>>>       
>>>> Any tips on how (and perhaps how not) to teach functors? 
>>>>         
>
>   
Here's a way of motivating functors that I found useful when trying to 
understand them.


In some languages, eg scheme, we can write something like:

(define (solve) (oracle))
(define (oracle) (display "this is the oracle speaking.") (newline))

where solve in defined before its component, oracle. We only get an 
error if we try to call solve before
oracle has been defined; otherwise the compiler is happy. But in ocaml 
we can't even get that far, because the compiler
needs to know what oracle is before it can compile solve.

This leads to the problem of having to know all of the components of a 
thing before we can define it.
But this can lead to inflexibility, because we may wish to describe some 
top-level behavior
before getting into the particulars. What we can do is to describe the 
parts we need as a signature.
The signature is input to a functor. We can then refer to the missing 
parts through the signature. A further
benefit is that the definition of oracle is left to an awaited moment of 
inspiration

-- eliot


  parent reply	other threads:[~2007-10-30 20:44 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-24 11:36 David Teller
2007-10-24 13:18 ` [Caml-list] " Loup Vaillant
2007-10-24 13:24 ` Peng Zang
2007-10-24 13:54   ` Julien Moutinho
2007-10-24 17:23 ` Andrej Bauer
2007-10-24 19:05   ` Adrien
2007-10-25  5:14     ` Aleks Bromfield
2007-10-30 16:26     ` Chung-chieh Shan
2007-10-30 16:38       ` [Caml-list] " Brian Hurt
2007-10-30 16:59         ` Chung-chieh Shan
2007-10-30 17:08         ` [Caml-list] " Edgar Friendly
2007-10-30 17:56           ` skaller
2007-10-30 19:02             ` Vincent Aravantinos
2007-10-30 18:50           ` William D. Neumann
2007-10-30 21:45           ` Eliot Handelman [this message]
2007-10-30 18:56       ` Daniel Bünzli
2007-10-25  9:43   ` [Caml-list] " Richard Jones
2007-10-24 22:52 ` Nathaniel Gray
2007-10-24 23:10   ` Jon Harrop
2007-10-25  1:48     ` skaller
2007-10-25  2:02       ` Jon Harrop
2007-10-25  9:49       ` Richard Jones
2007-10-25 11:32         ` Stefano Zacchiroli
2007-10-25 11:52           ` Daniel Bünzli
2007-10-25 12:39           ` Richard Jones
2007-10-25 12:59         ` Michael Ekstrand
2007-10-25 13:39           ` Loup Vaillant
2007-10-25 20:32             ` Andrej Bauer
2007-10-25 22:11               ` Loup Vaillant
2007-10-25 15:14           ` Richard Jones
2007-10-25 18:47             ` Re : " Adrien
2007-11-02 16:08       ` Nathaniel Gray
2007-10-26 11:11     ` David Teller
2007-10-24 23:02 ` Jon Harrop
2007-10-26 11:09   ` David Teller

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=4727A611.3050507@generation.net \
    --to=eliot@generation.net \
    --cc=caml-list@inria.fr \
    --cc=ccshan@post.harvard.edu \
    /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).