Re: let ... in layout

From: Benoit Deboursetty (debourse@email.enst.fr)
Date: Wed Mar 15 2000 - 09:56:35 MET

  • Next message: Pierre Weis: "Re: Syntax for label, NEW PROPOSAL"

    > seems such a common construct in caml that it could do with some
    > syntatic sugar. I often see let..in run to 5-20 clauses. This appears
    > incredibly ugly compared to the equivalent haskell code, is harder to
    > read and takes longer to write due to the clutter of the surrounding
    > token magic. Has anyone thought about applying layout in general to
    > ocaml, or otherwise sugaring let...in? Is there any reason why the BNF
    >
    > let {name = expr}+ in
    >
    > would be ambiguous?

    Plenty...

    1. Because the equal sign is also the structural equality operator, there
    is no way you could know that you begin another binding. With O'CaML now,
    you can write
      let a x = f x = 3
    which means
      let a x = ((f x) = 3)
    where you would like
      let a x = f in
      let x = 3 in

    So perhaps you would better want a reserved keyword such as "be" or "is"
    to declare bindings.

    2. But even there, there is another ambiguity between
    multiple applications and function definition : think about the following
    code...
      let a = f x y z in
      let g x y z = b in

    With your proposition this would turn into
      let a is f x y z
          g x y z is b in

    Let us read this as a line :
      let a is f x y z g x y z is b in
               \_____________/
                where do you separate the two bindings?

    So, anyway, we must separate two successive bindings with a keyword.
    Perhaps you want a keyword that is an alias for "in let"...

    Something you can do sometimes to reduce your number of "let ... in" is to
    use
      let a, b, c = ..., ..., ... in (* 3 bindings at a time *)
    which I believe is optimized by the compilers and finally completely
    equivalent to
      let a = ... in let b = ... in ...
    (except perhaps order of evaluation?)

    If you do not like O'CaML grammar, I can only encourage you to use the
    excellent "caml preprocessor and pretty-printer" (camlp4) to modify it.
    http://caml.inria.fr/pub/old_caml_site/camlp4
    It is much easier to use camlp4 than to write your own parser!!

    When you can write both a parser and a pretty-printer for O'CaML and when
    you can translate automatically from the original syntax to the other and
    vice-versa, you know you have done something which is not ambiguous.

    Best regards,
    BdB.



    This archive was generated by hypermail 2b29 : Wed Mar 15 2000 - 15:11:29 MET