From: Walter Cazzola <cazzola@dico.unimi.it>
To: OCaML Mailing List <caml-list@inria.fr>
Subject: [Caml-list] separate compilation
Date: Thu, 8 Sep 2011 16:26:40 +0200 (CEST) [thread overview]
Message-ID: <alpine.LFD.2.00.1109081552080.2830@surtur.dico.unimi.it> (raw)
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1142 bytes --]
Dear Experts,
I'm a sort of newbe so be patient with if I ask something too silly
(I've googled around but I didn't find anything really usefull).
At the moment I'm investigating on how the OCaML module system and the
separate compilation works.
Nothing original I took the priority queue example from the user manual
and split it into three files (attached): one with the structure (A.ml)
one with the signature (A.mli) and one with a silly main (main.ml).
Following the instructions in the manual I have tried to compile each
file without linking but the only that compiles with success is the file
with the signature since it doesn't refer to any other file.
When I compile the structure or the main I get this error:
>ocamlc -c A.ml
File "A.ml", line 17, characters 39-52:
Error: Unbound module type CharPQueueAbs
I have tried to put #use or #load in the A.ml and main.ml file but the
only result is to get a syntax error (e.g., with #use "A.mli" at the
beggining of A.ml)
>ocamlc -c A.ml
File "A.ml", line 1, characters 0-1:
Error: Syntax error
What am I doing wrong? Any help is appreciate, thanks.
Walter
--
[-- Attachment #2: Type: TEXT/PLAIN, Size: 271 bytes --]
module type CharPQueueAbs =
sig
type priority = int (* still concrete *)
type char_queue (* now abstract *)
val empty : char_queue
val insert : char_queue -> int -> char -> char_queue
exception QueueIsEmpty
end;;
[-- Attachment #3: Type: TEXT/PLAIN, Size: 572 bytes --]
#use "A.mli"
module PrioQueue =
struct
type priority = int
type char_queue = Empty | Node of priority * char * char_queue * char_queue
exception QueueIsEmpty
let empty = Empty
let rec insert queue prio elt =
match queue with
Empty -> Node(prio, elt, Empty, Empty)
| Node(p, e, left, right) ->
if prio <= p
then Node(prio, elt, insert right p e, left)
else Node(p, e, insert right prio elt, left)
end;;
module AbstractPrioQueue = (PrioQueue: CharPQueueAbs);;
[-- Attachment #4: Type: TEXT/PLAIN, Size: 59 bytes --]
open AbstractPrioQueue;;
let x = insert empty 1 'a' ;;
next reply other threads:[~2011-09-08 14:26 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-08 14:26 Walter Cazzola [this message]
2011-09-08 14:33 ` Philippe Wang
2011-09-08 14:40 ` Walter Cazzola
2011-09-08 14:33 ` Esther Baruk
2011-09-08 14:42 ` Walter Cazzola
2011-09-08 15:55 ` AUGER Cedric
2011-09-09 6:50 ` Walter Cazzola
2011-09-09 7:06 ` David Allsopp
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=alpine.LFD.2.00.1109081552080.2830@surtur.dico.unimi.it \
--to=cazzola@dico.unimi.it \
--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).