Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Total application of function with labels
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jacques Garrigue <garrigue@k...>
Subject: Re: [Caml-list] Total application of function with labels
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