Browse thread
Polymorphic recursion
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | skaller <skaller@u...> |
| Subject: | Re: [Caml-list] Polymorphic recursion |
On Tue, 2007-04-03 at 13:00 -0700, brogoff wrote:
> On Tue, 3 Apr 2007, Till Varoquaux wrote:
> > Therefor, if you wish to use polymorphic recursion (yep you can) you
> > might want to use something where you have to specify the type; this
> > includes records, objects and recursive modules. So this
> >
> > type 'a seq = Unit | Seq of ('a * ('a * 'a)seq)
> >
> > type szRec={f:'a.'a seq -> int};;
> >
> > let size=
> > let rec s =
> > {f=function
> > | Unit -> 0
> > | Seq(_, b) -> 1 + 2 * s.f b}
> > in
> > s.f
> >
> > might be what you where yearning for.
>
> What I'd be yearning for would be more like
>
> let rec size : 'a . 'a seq -> int =
> fun s ->
> match s with Unit -> 0 | Seq(_,b) -> 1 + 2 * (size b)
>
> rather than having to use recursive modules or higher rank polymorphism
> of record fields/polymorphic methods.
Why not:
let fun rec size : 'a . 'a seq -> int =
| Unit -> 0
| Seq(_,b) -> 1 + 2 * (size b)
with a nice camlp4 example for people by nicolas.pouillard@gmail.com ?
--
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net