* [Caml-list] Total application of function with labels
@ 2004-05-05 21:18 Manos Renieris
2004-05-05 23:15 ` Evan Martin
2004-05-11 5:12 ` Jacques Garrigue
0 siblings, 2 replies; 3+ messages in thread
From: Manos Renieris @ 2004-05-05 21:18 UTC (permalink / raw)
To: caml-list
Total applications of functions with labeled arguments will work,
even if the actual arguments have no labels. So if you call
let my_a = ... in
let my_b = ... in
f my_b my_a
it doesn't matter whether you declared
let f (a:int) (b:int) = a * (b + 1);;
or
let f ~(a:int) ~(b:int) = a * (b + 1);;
and none will save you from the bug of passing the arguments in the
wrong order. A bug like this cost me a few nights of sleep a while ago.
Is there a programming convention that would "enforce" labeling the
arguments in a total application of a certain function?
Thanks,
-- Manos
-------------------
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Caml-list] Total application of function with labels
2004-05-05 21:18 [Caml-list] Total application of function with labels Manos Renieris
@ 2004-05-05 23:15 ` Evan Martin
2004-05-11 5:12 ` Jacques Garrigue
1 sibling, 0 replies; 3+ messages in thread
From: Evan Martin @ 2004-05-05 23:15 UTC (permalink / raw)
To: caml-list
On Wed, May 05, 2004 at 05:18:22PM -0400, Manos Renieris wrote:
> Is there a programming convention that would "enforce" labeling the
> arguments in a total application of a certain function?
# type withlabels = WithLabels;;
type withlabels = WithLabels
# let withlabels = WithLabels;;
val withlabels : withlabels = WithLabels
# let f ~a ~b ?(withlabels : withlabels option) = a + b;;
Warning: This optional argument cannot be erased
val f : a:int -> b:int -> ?withlabels:withlabels -> int = <fun>
# f 2 3 ~withlabels;;
Expecting function has type a:int -> b:int -> int
This argument cannot be applied without label
This includes the ... includes the "optional argument cannot be erased
warning", which can be avoided at the cost of making the code even
weirder.
http://caml.inria.fr/archives/200211/msg00176.html
discusses this a bit, but I'm not quite sure I understand it. :\
--
Evan Martin
martine@danga.com
http://neugierig.org
-------------------
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Caml-list] Total application of function with labels
2004-05-05 21:18 [Caml-list] Total application of function with labels Manos Renieris
2004-05-05 23:15 ` Evan Martin
@ 2004-05-11 5:12 ` Jacques Garrigue
1 sibling, 0 replies; 3+ messages in thread
From: Jacques Garrigue @ 2004-05-11 5:12 UTC (permalink / raw)
To: er+caml, er; +Cc: caml-list
From: Manos Renieris <er@cs.brown.edu>
> Total applications of functions with labeled arguments will work,
> even if the actual arguments have no labels. So if you call
> let my_a = ... in
> let my_b = ... in
> f my_b my_a
> it doesn't matter whether you declared
> let f (a:int) (b:int) = a * (b + 1);;
> or
> let f ~(a:int) ~(b:int) = a * (b + 1);;
> and none will save you from the bug of passing the arguments in the
> wrong order. A bug like this cost me a few nights of sleep a while ago.
>
> Is there a programming convention that would "enforce" labeling the
> arguments in a total application of a certain function?
There is a warning, but it is turned off by default.
You just have to turn it on.
$ ocaml -w L
# let f ~(a:int) ~(b:int) = a * (b + 1);;
val f : a:int -> b:int -> int = <fun>
# f 2 3;;
^
Warning: labels were omitted in the application of this function.
- : int = 8
---------------------------------------------------------------------------
Jacques Garrigue Kyoto University garrigue at kurims.kyoto-u.ac.jp
<A HREF=http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/>JG</A>
-------------------
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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-05-11 5:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-05 21:18 [Caml-list] Total application of function with labels Manos Renieris
2004-05-05 23:15 ` Evan Martin
2004-05-11 5:12 ` Jacques Garrigue
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox