* [Caml-list] strange behaviour of ocamldoc
@ 2004-09-14 17:47 Eugene Ossintsev
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
0 siblings, 1 reply; 11+ messages in thread
From: Eugene Ossintsev @ 2004-09-14 17:47 UTC (permalink / raw)
To: caml-list
Hello,
In OCaml 3.08.0 and 3.08.1 (not tested with the other versions) it seems
that ocamldoc behaves strangely in the following case:
foo.mli:
--------
(** Supported URL schemes. *)
type url_scheme =
| Http (** Hypertext Transfer Protocol *)
| Ftp (** File Transfer protocol *)
| File (** Local file access *)
ocamldoc foo.mli writes the error message:
foo.mli : lexing: empty token.
That error occurs if in the (** *)-comment of an enumerated type there
exists a word (or, more exactly, a combination of letters) matching the
name of the following enumerated type or a part of the name of that
type. In the above example it is "File".
In other words, any of those combinations gives the error:
(** Comments *)
type my_type =
| Aaa (** foo Bbb bar *)
| Bbb (** blah-blah *)
(** Comments *)
type my_type =
| Aaa (** foo Bbb bar *)
| Bb (** blah-blah *)
(** Comments *)
type my_type =
| Aaa (** foo Bbb bar *)
| B (** blah-blah *)
Could you help me solve the problem? What am I doing wrong?
--
Eugene Ossintsev
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Caml-list] Confused
2004-09-14 17:47 [Caml-list] strange behaviour of ocamldoc Eugene Ossintsev
@ 2004-09-15 13:28 ` Jon Harrop
2004-09-15 13:46 ` Michael
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Jon Harrop @ 2004-09-15 13:28 UTC (permalink / raw)
To: caml-list
How come this works:
# let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1);;
val build : int -> float list = <fun>
# let test = 1. :: build 1000;;
val test : float list = ...
But this does not:
# let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
let test = 1. :: build 1000;;
Syntax error
Am I being stupid?
Cheers,
Jon.
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
@ 2004-09-15 13:46 ` Michael
2004-09-15 13:51 ` Radu Grigore
` (3 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Michael @ 2004-09-15 13:46 UTC (permalink / raw)
To: Jon Harrop; +Cc: caml-list
Hi,
On Mittwoch, 15. September 2004 15:28, you wrote:
>But this does not:
># let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
> let test = 1. :: build 1000;;
>Syntax error
it works with
let test =
let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
1. :: build 1000
;;
Michael
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
2004-09-15 13:46 ` Michael
@ 2004-09-15 13:51 ` Radu Grigore
2004-09-15 14:01 ` Brian Hurt
` (2 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Radu Grigore @ 2004-09-15 13:51 UTC (permalink / raw)
To: Jon Harrop, caml-list
On Wed, 15 Sep 2004 14:28:53 +0100, Jon Harrop <jon@jdh30.plus.com> wrote:
> How come this works: [...]
> But this does not:
>
> # let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
> let test = 1. :: build 1000;;
> Syntax error
Look at this. I'm even more confused:
----------------
[rgrig@radugrigore temp]$ ocaml
Objective Caml version 3.07+2
# #load "camlp4r.cma";;
Camlp4 Parsing version 3.07+2
# let rec b = function 0 -> [] | n -> 2. :: b (n - 1) in let t = 1. :: b 2;;
Toplevel input:
# let rec b = function 0 -> [] | n -> 2. :: b (n - 1) in let t = 1. :: b 2;;
^^
Parse error: 'and' or 'in' expected (in [expr])
# exit 0;;
Toplevel input:
# exit 0;;
^^
Parse error: ';' expected after [str_item] (in [phrase])
#
------------------
regards,
radu
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
2004-09-15 13:46 ` Michael
2004-09-15 13:51 ` Radu Grigore
@ 2004-09-15 14:01 ` Brian Hurt
2004-09-15 14:13 ` Jon Harrop
2004-09-15 14:52 ` skaller
4 siblings, 0 replies; 11+ messages in thread
From: Brian Hurt @ 2004-09-15 14:01 UTC (permalink / raw)
To: Jon Harrop; +Cc: caml-list
On Wed, 15 Sep 2004, Jon Harrop wrote:
>
> How come this works:
>
> # let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1);;
> val build : int -> float list = <fun>
> # let test = 1. :: build 1000;;
> val test : float list = ...
>
> But this does not:
>
> # let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
> let test = 1. :: build 1000;;
> Syntax error
What you want to do is:
let test =
let rec build = funcion 0 -> [] | n -> 1e-6 :: build (n-1) in
1. :: build 1000
;;
"let var = expression" is not, itself, and expression. It's a statement.
Ocaml does, in fact, have statements and not just expressions. The let/in
construct is: "let var = expression in expression" is an expression- but
it requires the stuff to the right of the 'in' keyword to also be an
expression. This means that it can be another let/in expression, but not
statements like "let var = expression".
The solution, then, is to move the let/in definition down into the
expression part of the statement- i.e., after the equals sign. Thus my
counter-example.
> Am I being stupid?
No- just confused on a subtle point of Ocaml syntax.
--
"Usenet is like a herd of performing elephants with diarrhea -- massive,
difficult to redirect, awe-inspiring, entertaining, and a source of
mind-boggling amounts of excrement when you least expect it."
- Gene Spafford
Brian
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
` (2 preceding siblings ...)
2004-09-15 14:01 ` Brian Hurt
@ 2004-09-15 14:13 ` Jon Harrop
[not found] ` <7f8e92aa04091507233d074f31@mail.gmail.com>
2004-09-15 14:52 ` skaller
4 siblings, 1 reply; 11+ messages in thread
From: Jon Harrop @ 2004-09-15 14:13 UTC (permalink / raw)
To: caml-list
On Wednesday 15 September 2004 14:28, Jon Harrop wrote:
> # let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
> let test = 1. :: build 1000;;
> Syntax error
>
> Am I being stupid?
Yes! The correct syntax is, of course:
let test =
let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
1. :: build 1000;;
So the "let" returned to the top-level has to be the outermost one. All inner
"let"s must be followed by "in" and an expression.
Thanks, John and Christoph and anyone else who replies before I get this
off. ;-)
Cheers,
Jon.
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Caml-list] Confused
[not found] ` <7f8e92aa04091507233d074f31@mail.gmail.com>
@ 2004-09-15 14:23 ` Radu Grigore
2004-09-15 14:50 ` Virgile Prevosto
0 siblings, 1 reply; 11+ messages in thread
From: Radu Grigore @ 2004-09-15 14:23 UTC (permalink / raw)
To: caml-list
Forgot to send it to the list too:
---------- Forwarded message ----------
From: Radu Grigore <radugrigore@gmail.com>
Date: Wed, 15 Sep 2004 17:23:11 +0300
Subject: Re: [Caml-list] Confused
To: Jon Harrop <jon@jdh30.plus.com>
On Wed, 15 Sep 2004 15:13:13 +0100, Jon Harrop <jon@jdh30.plus.com> wrote:
> Thanks, John and Christoph and anyone else who replies before I get this
> off. ;-)
Ok, I got it too.
But it still doesn't explain why I was unable to exit ocaml
interactive interpreter after loading camlp4r and typing your exact
example: exit doesn't work, #quit doesn't work, ctrl-C doesn't work,
etc. The only solution that worked was ctrl-Z followed by "kill".
regards,
radu
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 14:23 ` Radu Grigore
@ 2004-09-15 14:50 ` Virgile Prevosto
2004-09-15 14:57 ` Radu Grigore
0 siblings, 1 reply; 11+ messages in thread
From: Virgile Prevosto @ 2004-09-15 14:50 UTC (permalink / raw)
To: Radu Grigore; +Cc: caml-list
Le 15.09.2004, à 17:23:48, Radu Grigore a écrit:
> But it still doesn't explain why I was unable to exit ocaml
> interactive interpreter after loading camlp4r and typing your exact
> example: exit doesn't work, #quit doesn't work, ctrl-C doesn't work,
> etc. The only solution that worked was ctrl-Z followed by "kill".
>
because camlp4R loads the Revised syntax, in which toplevel sentences
are ended by a single semicolumn, not a double one:
~ [754]$ ocaml
Objective Caml version 3.08.1
# #load "camlp4r.cma";; (* normal syntax, use ';;' *)
Camlp4 Parsing version 3.08.1
# exit 0; (* revised syntax, use ';' *)
~ [755]$
To go back to the initial question, note that the revised syntax has two
different keywords for global declaration and local binding: the former
is introduced by 'value', while the latter is still 'let ... in'. Hence,
you'll have to write
# #load "camlp4r.cma";;
# value test =
let rec build =
fun [0 -> [] | n -> [1e-6 :: build (n-1)]]
in [1.::(build 1000)];
(* There are also differences in lists and pattern-matching syntax *)
value test : list float
= [1; 1e-06; 1e-06; 1e-06; 1e-06; 1e-06; 1e-06; 1e-06; 1e-06; 1e-06;
1e-06; <snip>
The revised syntax is described in the chapter 6 of the camlp4 manual.
--
E tutto per oggi, a la prossima volta
Virgile
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
` (3 preceding siblings ...)
2004-09-15 14:13 ` Jon Harrop
@ 2004-09-15 14:52 ` skaller
2004-09-15 18:42 ` William Lovas
4 siblings, 1 reply; 11+ messages in thread
From: skaller @ 2004-09-15 14:52 UTC (permalink / raw)
To: Jon Harrop; +Cc: caml-list
On Wed, 2004-09-15 at 23:28, Jon Harrop wrote:
> How come this works:
>
> # let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1);;
> val build : int -> float list = <fun>
> # let test = 1. :: build 1000;;
> val test : float list = ...
>
> But this does not:
>
> # let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
> let test = 1. :: build 1000;;
> Syntax error
>
> Am I being stupid?
The top level let is unrelated to the expression let/in.
It just happens to use the same keyword. I'll change the
keyword to demonstrate:
toplet x = y;;
let x = y in z;;
The first form is a toplet statement, the second is an entirely
unrelated expression statement. Note that toplet explicitly
has side-effects -- it enriches the global environment with
the symbol x. The expression statement has side-effects
if y and z do OR if you are using the command line 'ocaml'
program (it prints the type and value).
Now rewriting your example:
let rec build = function 0 -> [] | n -> 1e-6 :: build (n-1) in
toplet test = 1. :: build 1000;;
you can see you've used a 'toplet' in an inner location
where an expression is expected: let/in is an expression,
toplet isn't.
Basically this syntax is a 'hack' used by language
designers, overloading related syntactic forms to avoid
introducing new keywords and to make the language
'more intuitive' - which usually backfires on newbies
and even experts at times.
Such impurity is annoying, however a fully 'orthogonal'
syntax may well be worse. For example seeing:
int_match x with | 1 -> ..
float_match x wth | 1.2 -> ...
variant_match x with | True ->
you can probably agree some 'pattern matching' in the compiler
itself to discriminate these cases (and allow just plain 'match')
is probably justified.
--
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850,
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 14:50 ` Virgile Prevosto
@ 2004-09-15 14:57 ` Radu Grigore
0 siblings, 0 replies; 11+ messages in thread
From: Radu Grigore @ 2004-09-15 14:57 UTC (permalink / raw)
To: Virgile Prevosto; +Cc: caml-list
On Wed, 15 Sep 2004 16:50:46 +0200, Virgile Prevosto
<prevosto@mpi-sb.mpg.de> wrote:
> because camlp4R loads the Revised syntax, in which toplevel sentences
> are ended by a single semicolumn, not a double one:
Thanks. Now I feel really stupid. <going back to my corner>
regards,
radu
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Caml-list] Confused
2004-09-15 14:52 ` skaller
@ 2004-09-15 18:42 ` William Lovas
0 siblings, 0 replies; 11+ messages in thread
From: William Lovas @ 2004-09-15 18:42 UTC (permalink / raw)
To: caml-list
On Thu, Sep 16, 2004 at 12:52:26AM +1000, skaller wrote:
> Basically this syntax is a 'hack' used by language
> designers, overloading related syntactic forms to avoid
> introducing new keywords and to make the language
> 'more intuitive' - which usually backfires on newbies
> and even experts at times.
I suspect it was inherited from the original ML -- O'Caml could easily fix
this "problem" without introducing any new keywords, but i think the costs
outweigh the potential benefits.
cheers,
William
-------------------
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
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2004-09-15 18:42 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-09-14 17:47 [Caml-list] strange behaviour of ocamldoc Eugene Ossintsev
2004-09-15 13:28 ` [Caml-list] Confused Jon Harrop
2004-09-15 13:46 ` Michael
2004-09-15 13:51 ` Radu Grigore
2004-09-15 14:01 ` Brian Hurt
2004-09-15 14:13 ` Jon Harrop
[not found] ` <7f8e92aa04091507233d074f31@mail.gmail.com>
2004-09-15 14:23 ` Radu Grigore
2004-09-15 14:50 ` Virgile Prevosto
2004-09-15 14:57 ` Radu Grigore
2004-09-15 14:52 ` skaller
2004-09-15 18:42 ` William Lovas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox