From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id VAA18462; Tue, 21 Oct 2003 21:54:09 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id VAA03472 for ; Tue, 21 Oct 2003 21:54:08 +0200 (MET DST) Received: from aomori.annexia.org (annexia.force9.co.uk [212.56.101.183]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h9LJs7117262 for ; Tue, 21 Oct 2003 21:54:07 +0200 (MET DST) Received: from rich by aomori.annexia.org with local (Exim 3.36 #1 (Debian)) id 1AC0dy-0002Qk-00 for ; Tue, 21 Oct 2003 18:50:06 +0100 Date: Tue, 21 Oct 2003 18:50:06 +0100 To: caml-list@inria.fr Subject: Re: [Caml-list] OCaml wishlist Message-ID: <20031021175006.GA9314@redhat.com> References: <20031021142921.GA6736@redhat.com> <20031021145531.GA14086@roke.freak> <20031021172812.GA26066@force.stwing.upenn.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20031021172812.GA26066@force.stwing.upenn.edu> User-Agent: Mutt/1.5.4i From: Richard Jones X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 wishlist:01 0400,:01 lovas:01 beast:01 incompatible:01 return':99 'return':99 gmain:01 gmisc:01 gmain:01 callback:01 callback:01 freshmeat:01 autoconf:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Tue, Oct 21, 2003 at 01:28:13PM -0400, William Lovas wrote: > What you want is a return *statement*, but such a beast is incompatible > with O'Caml, since O'Caml is an expression-oriented language. I don't see > an easy way of making a `return' expression that behaves the way you want > it to. Perhaps there's a misunderstanding here. I don't want to change the expression-oriented nature of the language. The 'return' would and must return the same type as the rest of the code. > Better, though, in my opinion, would be to adapt your > mental syntax to fit the functional style than to adapt the functional > language to cater to your imperative style. I'm really looking for help on this! My working theory at the moment though is that writing UIs involves writing essentially imperative code. One small example from some real code: let quit _ = if !test_id = 0 then ( GMain.Main.quit (); false ) else ( let icon = GMisc.image () in icon#set_stock `DIALOG_QUESTION; icon#set_icon_size `DIALOG; let buttons = [ "Quit"; "Cancel" ] in let ans = GToolbox.question_box ~title:"Quit" ~icon ~buttons ("Are you sure you want to quit? This may lose any\n" ^ "results from this assessment.") in if ans = 1 then ( GMain.Main.quit (); false (* User requested quit. *) ) else true (* Don't close the window. *) ) in window#connect#destroy ~callback:GMain.quit; window#event#connect#delete ~callback:quit; quit_item#connect#activate ~callback:(fun () -> quit (); ()); I think there's definitely a case for being able to write: if !test_id = 0 then ( (* Not in a test - can quit immediately. *) GMain.Main.quit (); return false ); (* .. rest of code ... *) But perhaps, as you say, I'm missing the functional solution to this. (I can dig around and find some more examples like this if it would help). Rich. -- Richard Jones. http://www.annexia.org/ http://freshmeat.net/users/rwmj Merjis Ltd. http://www.merjis.com/ - all your business data are belong to you. MAKE+ is a sane replacement for GNU autoconf/automake. One script compiles, RPMs, pkgs etc. Linux, BSD, Solaris. http://www.annexia.org/freeware/makeplus/ ------------------- 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