caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Richard Jones <rich@annexia.org>
To: caml-list@inria.fr
Subject: Re: [Caml-list] OCaml wishlist
Date: Tue, 21 Oct 2003 18:50:06 +0100	[thread overview]
Message-ID: <20031021175006.GA9314@redhat.com> (raw)
In-Reply-To: <20031021172812.GA26066@force.stwing.upenn.edu>

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


  reply	other threads:[~2003-10-21 19:54 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-21 14:29 Richard Jones
2003-10-21 14:55 ` Michal Moskal
2003-10-21 16:02   ` Richard Jones
2003-10-21 17:28   ` William Lovas
2003-10-21 17:50     ` Richard Jones [this message]
2003-10-21 20:27       ` Yaron Minsky
2003-10-21 20:32       ` Yaron Minsky
2003-10-21 21:46         ` Alain.Frisch
2003-10-22  0:59       ` Jacques Garrigue
2003-10-22  2:52         ` Brian Hurt
2003-10-22 15:27           ` Michal Moskal
2003-10-21 19:46     ` Alain.Frisch
2003-10-21 15:26 ` Alain.Frisch
2003-10-21 17:38 ` David Brown
2003-10-21 22:34 Richard Jones
2003-10-22  1:14 ` Jacques Garrigue
2003-10-22 13:21   ` brogoff
2003-10-23  0:31   ` Eray Ozkural
2003-10-23 16:55   ` skaller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20031021175006.GA9314@redhat.com \
    --to=rich@annexia.org \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).