caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Guillaume Yziquel <guillaume.yziquel@citycable.ch>
To: Gerd Stolpmann <gerd@gerd-stolpmann.de>
Cc: saptarshi.guha@gmail.com, caml-list@yquem.inria.fr
Subject: Re: [Caml-list] The need to specify 'rec' in a recursive function defintion
Date: Wed, 10 Feb 2010 01:07:31 +0100	[thread overview]
Message-ID: <4B71F8C3.5080306@citycable.ch> (raw)
In-Reply-To: <1265754854.5482.44.camel@flake.lan.gerd-stolpmann.de>

Gerd Stolpmann a écrit :
> Am Dienstag, den 09.02.2010, 22:58 +0100 schrieb Guillaume Yziquel:
>> Gerd Stolpmann a écrit :
>>> Am Dienstag, den 09.02.2010, 15:50 -0500 schrieb Saptarshi Guha:
>>>
>>> Besides the different way of defining "let" and "let rec" there are also
>>> differences in typing.
> 
> Well, at least you can have new effects. Look for "polymorphic
> recursion".

You mean something like this?

http://alaska-kamtchatka.blogspot.com/2009/05/polymorphic-recursion.html

With the following code

> type length = { length : 'a . int -> 'a vec -> int }
> 
> let length v =
>   let rec f = { length = fun n l -> match l with
>     Nil         -> n
>   | Zero    ps  -> f.length (    2 * n) ps
>   | One (_, ps) -> f.length (1 + 2 * n) ps
>   } in f.length 0 v

you get to use a function, here f.length, in two different contexts for 
type inference, allowing it to be used with multiple types? 'a * 'a 
instead of 'a? Am I getting this post right?

But then, this seems to go into rather elaborate constructions 
(existential types with OCaml records), which are quite remote from the 
simple 'let rec' issue we were talking about.

Is it possible to have polymorphic recursion with vanilla 'let rec' 
invocations? Or am I getting you wrong?

All the best,

-- 
      Guillaume Yziquel
http://yziquel.homelinux.org/


  reply	other threads:[~2010-02-10  0:07 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-09 20:50 Saptarshi Guha
2010-02-09 21:55 ` [Caml-list] " Guillaume Yziquel
2010-02-09 22:14   ` Saptarshi Guha
2010-02-09 22:01 ` Gerd Stolpmann
2010-02-09 21:58   ` Guillaume Yziquel
2010-02-09 22:34     ` Gerd Stolpmann
2010-02-10  0:07       ` Guillaume Yziquel [this message]
2010-02-10  3:10         ` Alain Frisch
2010-02-09 22:16   ` Saptarshi Guha
2010-02-09 23:29   ` Jon Harrop
2010-02-10 10:15     ` rossberg
2010-02-10  7:19   ` Andrej Bauer
2010-02-10  9:36     ` Francois Maurel
2010-02-10 10:12     ` rossberg
2010-02-09 23:33 ` Jon Harrop
2010-02-09 22:31   ` Saptarshi Guha
2010-02-10  0:12     ` Jon Harrop
2010-02-10 22:01 ` Stefan Monnier
2010-02-10 22:25   ` [Caml-list] " Till Varoquaux
2010-02-11  1:48     ` Jon Harrop
2010-02-15 15:46     ` Stefan Monnier
2010-02-15 17:33       ` [Caml-list] " Jon Harrop
2010-02-15 20:36         ` Stefan Monnier
2010-02-16 14:42           ` Stefan Monnier
2010-02-16 16:21             ` [Caml-list] " Ashish Agarwal

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=4B71F8C3.5080306@citycable.ch \
    --to=guillaume.yziquel@citycable.ch \
    --cc=caml-list@yquem.inria.fr \
    --cc=gerd@gerd-stolpmann.de \
    --cc=saptarshi.guha@gmail.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;
as well as URLs for NNTP newsgroup(s).