Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] labels and optional arguments in 3.06
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Chris Hecker <checker@d...>
Subject: [Caml-list] labels and optional arguments in 3.06

The new optional label semantics seem to work pretty well for my
normal usage, however I've run across one thing I'd like to do that
doesn't seem to work (and a warning I don't understand):

> # let f ?(a = 1.0) ~b ~c = a *. b *. c;;
> Characters 12-15:
> Warning: This optional argument cannot be erased
>   let f ?(a = 1.0) ~b ~c = a *. b *. c;;
>               ^^^
> val f : ?a:float -> b:float -> c:float -> float = <fun>

First question:  what is this warning?

Second question:  I'd like to be able to call f with or without
specifying the optional argument, without labels:

> # f;;
> - : ?a:float -> b:float -> c:float -> float = <fun>
> # f 2.0 4.0;;
> - : float = 8.

works fine,

> # f ~a:2.0 2.0 4.0;;
> Characters 9-12:
>   f ~a:2.0 2.0 4.0;;
>            ^^^
> Expecting function has type b:float -> c:float -> float
> This argument cannot be applied without label

doesn't work.  I'd like to be able to use ~b and ~c for interface
documentation, but not be forced to use them, and have ?a be an
optional parameter.  This

> # f ~a:2.0 ~b:2.0 ~c:4.0;;
> - : float = 16.

works, of course, but it's really verbose.

Is there any way to make this work?

Chris



-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners