Browse thread
[Caml-list] labels and optional arguments in 3.06
[
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: | 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