chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] Module unresolved error


From: Michael Silver
Subject: Re: [Chicken-users] Module unresolved error
Date: Wed, 15 Jun 2016 12:13:45 -0400

Hi Mario,

Thank you! I really love how kind and helpful the CHICKEN community is — definitely one of the huge draws to using CHICKEN!

Usually you should see some warnings that may lead to "module
unresolved" errors.

Turns out I hadn’t updated my modules.db, so I wasn’t seeing the suggested imports. Since they were warnings, I was ignoring them. I’m used to messages that explain compilation errors as being marked as “error” instead of “warning”. But now that I can see the suggested imports, it’s much more obvious how to fix the issue :) Your patch fixed the issue.

Why would compiling into a module cause an error when my functions
work fine in the REPL? Any help would be appreciated.

That's because the interpreter implicitly loads some modules, and the
compiler doesn't do that.

That’s odd; I would expect both to implicitly load those modules because the documentation for both data-structures and ports say 
both modules are "used by default, unless the program is compiled with the --explicit-use option”, which I was not using (at least intentionally).

But at least now I know! Thank you so much,

Michael


On Jun 14, 2016, at 3:12 PM, Mario Domenech Goulart <address@hidden> wrote:

Hi Michael,

On Tue, 14 Jun 2016 11:09:09 -0400 Michael Silver <address@hidden> wrote:

I’m new to CHICKEN and I’m working on converting a large Guile
codebase to CHICKEN.

Welcome!

The codebase is a collection of shared libraries (each library in a
separate .scm file), collectively known as “lab-core”. So, I’ve
packaged it all as an egg called “lab-core” with each individual .scm
file as it’s own module (under different names).  Does this seem like
a reasonable way to package such a project?

Sounds good to me.

As I go file by file converting to CHICKEN modules, I keep running
into “module unresolved” errors when attempting to install my egg via
chicken-install.

Usually you should see some warnings that may lead to "module
unresolved" errors.

When I try to compile your example, I get:

 Warning: reference to possibly unbound identifier `string-chomp' in:
 Warning:    port-puts
 Warning:    suggesting: `(import data-structures)'

 Warning: reference to possibly unbound identifier `with-output-to-string' in:
 Warning:    port-puts
 Warning:    suggesting: `(import ports)'

 Error: module unresolved: loglevel

That means:

* in `port-puts' you are using `string-chomp', which is exported by the
 data-structures module, but you are not importing it.

* in `port-puts' you are using `with-output-to-string', which is
 exported by the ports module, but you are not importing it.

So, all you need to do is:

$ diff -u loglevel.scm.orig loglevel.scm
--- loglevel.scm.orig   2016-06-14 21:08:03.547764310 +0200
+++ loglevel.scm        2016-06-14 21:08:13.711763790 +0200
@@ -1,6 +1,6 @@
(module loglevel *
 (import chicken scheme)
 -(use srfi-1)
 +(use data-structures ports srfi-1)


;; Expected behavior:


Unfortunately, the output gives no indication of which function is
causing the error or why, and the only way I’ve been able to figure
this out is by commenting out chunks of code and narrowing down until
I find the offending function. If I delete that function, the module
compiles perfectly and I can use the rest of the functions just as you
would expect. What does "module unresolved” mean and is there a better
way to figure out what is causing it?

Do you see the warnings in the compiler output?

I’ve attached a MWE where loglevel is a stripped-down version of one
such library causing the “module unresolved” error. Here are the steps
to reproduce:
$ cd lab-core
lab-core$ chicken-install -debug
(see attached output.txt for the debug output)

Compare this to:
$ csi
(load “loglevel-no-module.scm”)
(err-puts "foo" 42 "!”)
foo42!
“!"
which shows my functions working perfectly as long as I’m not using
module syntax.

Why would compiling into a module cause an error when my functions
work fine in the REPL? Any help would be appreciated.

That's because the interpreter implicitly loads some modules, and the
compiler doesn't do that.

All the best.
Mario
--
http://parenteses.org/mario

Attachment: smime.p7s
Description: S/MIME cryptographic signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]