From: Jean-Baptiste Jeannin <jeannin@cs.cornell.edu>
To: "caml-list@inria.fr" <caml-list@inria.fr>
Subject: [Caml-list] Exception Typetexp.Error(_, _) when using Toploop
Date: Fri, 10 Aug 2012 17:30:26 -0400 [thread overview]
Message-ID: <50257D72.2090607@cs.cornell.edu> (raw)
Hi all,
I am getting a strange dynamic type error Typetexp.Error(_, _) when
trying to compile files using Toploop. It is strange to me because the
error appears or not depending on which directory I compile from (while
adapting all the paths, of course). I narrowed it down to two small
files but am now stuck. My understanding (from comments in
http://caml.inria.fr/svn/ocaml/branches/gadts/typing/typetexp.ml) is
that it is a type error that is happening when trying to dynamically
interpret (using Toploop) a dynamically generated piece of code, located
in a string.
Here is how to reproduce the error. In a directory, create a
subdirectory subdir, and in this subdirectory create a file tree.ml
containing the code:
type tree = Leaf | Node of tree * tree;;
in the main directory, create a file prog.ml containing the code:
let s = "let t = Tree.Leaf;;" in
let lexed = Lexing.from_string s in
let parsed = (!Toploop.parse_toplevel_phrase) lexed in
Toploop.execute_phrase true Format.err_formatter parsed;;
If trying to compile them inside subdir, it works fine:
$ cd subdir
$ ocamlc -o prog.exe -I .. toplevellib.cma tree.ml ../prog.ml
$ ./prog.exe
val t : Tree.tree = Tree.Leaf
However, if trying to compile them from the top directory (which is what
I would like to do), it does not work and raises a Typetexp.Error(_, _)
exception at runtime:
$ cd ..
$ ocamlc -o prog.exe -I subdir toplevellib.cma subdir/tree.ml prog.ml
$ ./prog.exe
Fatal error: exception Typetexp.Error(_, _)
If putting both files in the same directory and compiling them together
it works too (but I would prefer not to do that):
$ ocamlc -o prog.exe -I subdir toplevellib.cma tree.ml prog.ml
$ ./prog.exe
val t : Tree.tree = Tree.Leaf
I think what happens is that the Tree.Leaf is not recognized because the
module Tree is not in the directory from which we are compiling. Any
idea how to fix this, while keeping the directory structure and
compiling from the top directory, or any better understanding of what is
happening?
Thanks,
Jean-Baptiste Jeannin
Please note: the commands above were executed with OCaml 3.12.0. If you
are using 4.00.0 my understanding (although not tested) is that you
should replace "toplevellib.cma" by "+compiler-libs ocamlcommon.cma
ocamlbytecomp.cma ocamltoplevel.cma" everywhere
next reply other threads:[~2012-08-10 21:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-10 21:30 Jean-Baptiste Jeannin [this message]
2012-08-11 0:14 ` [Caml-list] " Hongbo Zhang
2012-08-11 20:03 ` [Caml-list] " Jean-Baptiste Jeannin
2012-08-11 8:34 ` [Caml-list] " Jérémie Dimino
2012-08-11 20:15 ` Jean-Baptiste Jeannin
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=50257D72.2090607@cs.cornell.edu \
--to=jeannin@cs.cornell.edu \
--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).