Bonjour tout le monde,
Je suis depuis quelques jours sur cette erreur, et j'aimerais avoir de l'aide pour comprendre d'ou vient le probleme de type dans mon programme OCaml.
Voici la structure ainsi qu'un peu de mon code :
J'ai un fichier Monitor, qui contient une fonction timer :
Code :
- (*
- * @file monitor.ml
- * @brief Timer function that measure the time of the execution of the code.
- * @param flag The associated name of the measuring time.
- * @param f The code to measure.
- *)
- let timer (flag, f) =
- Printf.printf "In timer\n";
- let timeBef = Unix.gettimeofday() in
- let result = f() in
- let timeAft = Unix.gettimeofday() in
- let channel = open_out_gen [Open_append] 700 "time.txt" in
- Printf.fprintf channel "%s: %.8f\n" flag (timeAft -. timeBef);
- close_out channel;
- result
|
Dont voici le fichier .mli associe :
Code :
- (* @file monitor.mli *)
- val timer : string * (unit -> 'a) -> 'a
|
Ainsi, quand j'appelle cette fonction dans mon code de base de la facon suivante, il n'y a aucun probleme... :
Code :
- let return = Monitor.timer ("Elaborate", fun () -> toto tata)
|
Cependant, si j'ai quelque chose de la forme suivante :
Code :
- let return = Monitor.timer ("Elaborate", fun () -> (toto tata;
- toto titi )
|
Il me met le message d'erreur suivant :
Code :
- File "reconstruct.ml", line 3193, characters 79-83:
- Warning S: this expression should have type unit.
|
Et ce warning devient alors problematique car des que j'utilise return, il n'a pas le bon type, et j'ai le droit a un vrai message d'erreur tel que :
Code :
- This expression has type unit * "whatever" but is here used with type "whatever" * "whatever"
|
Est ce qu'il y aurait un moyen de forcer un type a unit ?
Je debute quelque peu l'OCaml, veuillez me pardonner si c'est une question debile, mais je ne vois vraiment pas comment faire...
Merci pour votre aide...
Tibap.
Message édité par Tibap le 13-05-2009 à 17:13:21