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 WAA16321; Tue, 21 Oct 2003 22:27: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 WAA07374 for ; Tue, 21 Oct 2003 22:27:08 +0200 (MET DST) Received: from tisch.mail.mindspring.net (tisch.mail.mindspring.net [207.69.200.157]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h9LKR7118658 for ; Tue, 21 Oct 2003 22:27:07 +0200 (MET DST) Received: from user-0ccekej.cable.mindspring.com ([24.199.81.211] helo=minsky-primus.homeip.net) by tisch.mail.mindspring.net with smtp (Exim 3.33 #1) id 1AC35u-0007n2-00 for caml-list@inria.fr; Tue, 21 Oct 2003 16:27:06 -0400 Received: from 141.155.88.179 (SquirrelMail authenticated user yminsky) by minsky-primus.homeip.net with HTTP; Tue, 21 Oct 2003 16:27:06 -0400 (EDT) Message-ID: <47440.141.155.88.179.1066768026.squirrel@minsky-primus.homeip.net> In-Reply-To: <20031021175006.GA9314@redhat.com> References: <20031021142921.GA6736@redhat.com> <20031021145531.GA14086@roke.freak> <20031021172812.GA26066@force.stwing.upenn.edu> <20031021175006.GA9314@redhat.com> Date: Tue, 21 Oct 2003 16:27:06 -0400 (EDT) Subject: Re: [Caml-list] OCaml wishlist From: "Yaron Minsky" To: caml-list@inria.fr User-Agent: SquirrelMail/1.4.2-1 MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 Importance: Normal X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 wishlist:01 yaron:01 minsky:01 yminsky:01 cornell:01 camlp:01 0400,:01 lovas:01 beast:01 incompatible:01 return':99 'return':99 gmain:01 gmisc:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Here's a simple way of approximating what you want. It's ugly, but camlp4 could be used for providing the appropriate syntactic sugar, I imagine. exception Return let rval = ref None in try with Return -> match !rval with > 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 > ------------------- 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