[
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: | 1999-10-02 (17:51) |
From: | Peter Bruhn <bruhn@i...> |
Subject: | Newbies question |
The following function does not compile, since the compiler thinks it has the wrong return type: let read_res file : ('a * 'b) list = let final_result = ref [] in let fd = open_in file in try let lexbuf = Lexing.from_channel fd in while true do let result = Parseres.main Lexres.token lexbuf in final_result := result :: !final_result done (* <---- nothing returned here, but we cannot get here anyway the loop is exited by an exception only *) with Lexres.Eof -> close_in fd; !final_result (* !final_result is of type ('a * 'b) list *) | Parsing.Parse_error -> close_in fd; printf "ERROR: Ressourcen Datei fehlerhaft\n"; exit (-1); But when I use an empty list after the endless-loop, it works alright. Do I really have to fake the compiler? Or am I doing something wrong? This works: let read_res file : ('a * 'b) list = let final_result = ref [] in let fd = open_in file in try let lexbuf = Lexing.from_channel fd in while true do let result = Parseres.main Lexres.token lexbuf in final_result := result :: !final_result done; [] (* <---------- EMPTY LIST INSERTED HERE *) with Lexres.Eof -> close_in fd; !final_result | Parsing.Parse_error -> close_in fd; printf "ERROR: Ressourcen Datei fehlerhaft\n"; exit (-1); Thanks for any comments, hints, flames, ... Peter ------------------- bruhn@wu-wien.ac.at