Guile compiler drives out part of initialization for autoloaded
modules (typically, statements in `side-effects only' form).
Please find below an example. Interpreter produces expected
result; compiler works fine when `define-public’ form is used
in autoloaded module for `f’ definition.
amaya@t460s:~/tmp/guile-test$ cat main.scm f.scm
(define-module (guile-test main) #:autoload (guile-test f) (f))
(define (main) (f))
(main)
(define-module (guile-test f) #:export (f))
(format (current-error-port) "*** module f initialized\n")
(define (f) (format #t "hello from f\n"))
amaya@t460s:~/tmp/guile-test$ guile -L .. main.scm
hello from f
amaya@t460s:~/tmp/guile-test$ cat main.scm | guile -L ..
GNU Guile 3.0.8
Copyright (C) 1995-2021 Free Software Foundation, Inc.
[...]
*** module f initialized
$1 = #<directory (guile-test main) 7f83118763c0>
hello from f
$2 = #t