caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [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;
as well as URLs for NNTP newsgroup(s).