From: Seth Kurtzberg <seth@cql.com>
To: Max Kirillov <max630@mail.ru>
Cc: caml-list@pauillac.inria.fr
Subject: Re: [Caml-list] Re: Haskell-like syntax
Date: Fri, 14 Mar 2003 13:01:59 -0700 [thread overview]
Message-ID: <200303141301.59458.seth@cql.com> (raw)
In-Reply-To: <20030315013056.C5826@max.home>
I find this syntax (with WHERE) much more intuitive than the alternatives. I
strongly support the effort to integrate this into OCaml. While it seems
like a small thing in practice it makes it much easier to see what is
actually going on, which is of course very desirable.
On Friday 14 March 2003 12:30 pm, Max Kirillov wrote:
> On Fri, Mar 14, 2003 at 12:33:36AM +0600, Max Kirillov wrote:
> > Talking about the single thigs: at the beginning of my way into ocaml, I
> > did some camlp4 hacks. For example, that was "where" keyword support
> > (much more powerful than in revised syntax) and some support for "from
> > top to bottom" style of sources. If you interested, I could post them.
>
> I'm sending the changes. Note that, though they are quite stable, I
> picked them from an environment, so something may broke.
>
> A little comment what is it.
>
> file test_where.ml -- obvious. Very little, more to demonstrate, than to
> cover all possible (and really seen) dangers.
>
> file lazyX.ml -- misc functions to handle lazy values (see later)
> note that it is already uses the extension
>
> file where.ml -- the main thing
>
> There are several things:
>
> 1) 'where' notation:
>
> <expr> ::= <expr> where { [rec] <let-binding> }
>
> | <expr> where [begin] [rec] <let-binding> end
>
> the two version are the same (some like {..}, some begin..end).
> there are some unresolved quastions with prioriries, so, in practice, I
> often had to use brackets. However, I think that the level I choose is
> quite reasonable.
>
> 2) reorder srt_items
>
> there are keyword 'WHERE' (uppercase) in place of structure item. At the
> point, the structure (or the whole file if at toplevel) is cut, then
> pieces swapped and concated again. this allows writing:
>
> ------- file.ml
> main ();;
> WHERE
> let main () =
> do_this ();
> do_that ();;
> WHERE
> let do_this () =
> <.......>
> and do_that () =
> <........>
> ------
>
> 3) lazy values predeclaration
>
> <str-item> ::= [let] [lazy] [rec] <let-binding>
>
> this allows define lazy value, which is seen to the whole structure, and
> not only to the following items. Every value that is binded is lazy
> value, that, when forced, computes the definition. It uses the LazyX
> module: nondef () produces the value, set dest src replaces the
> unforced lazy value dest by the unforced lazy expression src, if any of
> then is already forced (it is at module initialization time, so it's
> easy to catch), the exception is raised.
>
> I used it in plays with "functional GUI", where needed to declare many
> inter-depended values and, for various reasons, didn't want to use "let
> rec <...> and <...>" chain.
>
> There is one trouble. When you define a type, and then a lazy value of
> the type, the compiler complains "the type xxx would escape its scope".
> this berore it comes to need to infer the type for the initial
> declaration "let x = LazyX.nondef ()", where it is not yet defined.
> To solve the problem, I added "HEADER" keyword. It explicitly says that
> the forward declataions must be placed here instead of beginning of the
> file. You place it after the type declaration. Of course the lazy values
> definitions must itself follow the type declarations.
>
> The lazy stuff is intended to work only in toplevel, it is not for
> "struct..end".
>
> I used the (1) very much, and would say it quite workable. The (2) is
> also quite stable, but, now, I would say the realization needs to be
> changed. The (3) are more a toy than real thing. There could be problems
> with that.
--
Seth Kurtzberg
M. I. S. Corp.
480-661-1849
seth@cql.com
-------------------
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
next prev parent reply other threads:[~2003-03-14 20:02 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-03-06 23:27 [Caml-list] OCaml popularity Graham Guttocks
2003-03-10 20:43 ` Paul Steckler
2003-03-10 23:48 ` Gerd Stolpmann
2003-03-11 0:18 ` Brian Hurt
2003-03-17 23:49 ` Graham Guttocks
2003-03-11 1:43 ` Nicolas Cannasse
2003-03-11 10:23 ` Pierre Weis
2003-03-11 14:27 ` Guillaume Marceau
2003-03-11 16:16 ` David Brown
2003-03-11 16:47 ` [Caml-list] about -rectypes Christophe Raffalli
2003-03-12 2:32 ` [Caml-list] OCaml popularity Nicolas Cannasse
2003-03-12 3:55 ` Cross-platform GUI (was Re: [Caml-list] OCaml popularity) mgushee
2003-03-12 10:51 ` [Caml-list] OCaml popularity Alex Romadinoff
2003-03-12 18:24 ` Max Kirillov
2003-03-11 19:02 ` Graham Guttocks
2003-03-12 17:12 ` Richard W.M. Jones
2003-03-12 18:08 ` Alwyn Goodloe
2003-03-12 22:34 ` Michael Schuerig
2003-03-12 23:13 ` Martin Weber
2003-03-12 23:35 ` Michael Schuerig
2003-03-13 8:02 ` Alessandro Baretta
2003-03-13 10:23 ` Michael Schuerig
2003-03-12 23:35 ` Brian Hurt
2003-03-12 23:18 ` Daniel Bünzli
2003-03-12 23:47 ` Brian Hurt
2003-03-13 2:15 ` William Lovas
2003-03-13 3:44 ` Graham Guttocks
2003-03-13 9:31 ` Richard W.M. Jones
[not found] ` <20030313095232.GC347@first.in-berlin.de>
2003-03-13 20:50 ` William Lovas
2003-03-13 21:17 ` Oliver Bandel
2003-03-13 22:01 ` Brian Hurt
2003-03-13 22:17 ` Oliver Bandel
2003-03-14 6:33 ` Michal Moskal
2003-03-14 11:50 ` Markus Mottl
2003-03-14 15:38 ` Oliver Bandel
2003-03-14 10:13 ` MikhailFedotov
2003-03-14 10:30 ` Johann Spies
2003-03-13 8:09 ` Pierre Weis
2003-03-15 1:43 ` Tushar Samant
2003-03-15 8:19 ` Andreas Eder
2003-03-11 16:26 ` Fred Yankowski
2003-03-11 19:47 ` [Caml-list] OCaml popularity (long!) mgushee
2003-03-12 11:23 ` Diego Olivier Fernandez Pons
2003-03-30 5:59 ` Belated thanks (was Re: [Caml-list] OCaml popularity) Matt Gushee
2003-03-31 15:27 ` [Caml-list] Re: Belated thanks cashin
2003-04-01 8:22 ` Belated thanks (was Re: [Caml-list] OCaml popularity) Johann Spies
2003-03-12 20:41 ` [Caml-list] OCaml popularity (long!) Max Kirillov
2003-03-13 2:36 ` Haskell-like syntax (was: [Caml-list] OCaml popularity (long!)) Oleg
2003-03-13 18:33 ` [Caml-list] Re: Haskell-like syntax Max Kirillov
2003-03-14 19:30 ` Max Kirillov
2003-03-14 19:47 ` Max Kirillov
2003-03-14 20:01 ` Seth Kurtzberg [this message]
2003-03-14 20:34 ` brogoff
2003-03-14 21:17 ` Sebastien Carlier
2003-03-14 21:51 ` brogoff
2003-03-15 2:27 ` Max Kirillov
2003-03-15 10:58 ` Markus Mottl
2003-03-15 15:52 ` [Caml-list] globally valid symbols (was: Haskell-like syntax) Max Kirillov
2003-03-15 20:16 ` [Caml-list] Re: Haskell-like syntax David Brown
2003-03-16 5:28 ` Module recursion (Was Re: [Caml-list] Re: Haskell-like syntax) brogoff
2003-03-16 11:10 ` Markus Mottl
2003-03-16 18:02 ` brogoff
2003-03-16 18:34 ` Markus Mottl
[not found] ` <Pine.LNX.4.44.0303152112560.27230-100000@grace.speakeasy.n et>
2003-03-16 5:38 ` Chris Hecker
2003-03-16 18:34 ` brogoff
2003-03-17 2:20 ` Jacques Garrigue
[not found] ` <Pine.LNX.4.44.0303161020480.11736-100000@grace.speakeasy.n et>
2003-03-17 5:08 ` Chris Hecker
2003-03-17 17:06 ` brogoff
2003-03-17 19:01 ` Ville-Pertti Keinonen
[not found] ` <Pine.LNX.4.44.0303170836240.29039-100000@grace.speakeasy.n et>
2003-03-17 19:33 ` Chris Hecker
2003-03-17 20:28 ` brogoff
[not found] ` <Pine.LNX.4.44.0303171145500.29039-100000@grace.speakeasy.n et>
2003-03-17 21:09 ` Chris Hecker
2003-03-19 2:34 ` [Caml-list] ocamlopt speed (was Re: Module recursion) Chris Hecker
2003-03-19 10:03 ` Michal Moskal
2003-03-19 10:38 ` Gerd Stolpmann
2003-03-19 20:36 ` Chris Hecker
2003-03-17 1:46 ` [Caml-list] Re: Haskell-like syntax Nicolas Cannasse
2003-03-14 22:50 ` Oleg
2003-03-20 15:01 ` Andreas Rossberg
2003-03-12 20:46 ` [Caml-list] Monads was OCaml popularity Christophe Raffalli
2003-03-13 0:03 ` [Caml-list] monads for dummies james woodyatt
2003-03-13 4:32 ` Christopher Quinn
2003-03-13 11:53 ` Christian Lindig
2003-03-12 18:59 ` [Caml-list] OCaml popularity Martin Weber
2003-03-12 20:24 ` Xavier Leroy
2003-03-13 8:57 ` [Caml-list] how to interface with integer Bigarrays using camlidl francois bereux
2003-03-13 9:36 ` Xavier Leroy
2003-03-13 0:42 ` [Caml-list] OCaml popularity Graham Guttocks
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=200303141301.59458.seth@cql.com \
--to=seth@cql.com \
--cc=caml-list@pauillac.inria.fr \
--cc=max630@mail.ru \
/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