Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] OCaml wishlist
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Richard Jones <rich@a...>
Subject: Re: [Caml-list] OCaml wishlist
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