When using the toplevel, declaration phrases fail (looks like a linking problem), but expressions work as intented :
$ llama
        Llama Light version 0.0828
# 1 + 1;;
- : int = 2
# let x = 1 + 1;;
Error: Reference to undefined global `Toploop'

I made my tests using "llamac -i foo.ml".


I found it startling that the most important difference to my eyes are buried, on the web page, under lines of relatively boring documentation :

In Llama Light (and in contrast to other Caml implementations):

- let does not generalize.
- Phrases are generalized immediately. In particular, "let foo = ref []" does not typecheck.
- The value restriction is not relaxed. (This is similar to Caml Light.)

These choices simplify the implementation while having relatively little impact on the user.

You cite the "Let Should Not Be Generalised" paper. There is however a difference in your application of the maxim : in the paper, local let that have polymorphic type annotations are generalised, while in your system it is not possible to force generalisation.

I had a look at the typer, and it's indeed rather simple; it seems it would be quite simple to implement generalized let (when encountering annotations or with a different syntaxic construct : "letg .. = .. in ..."), but the added complexity is equivalent to adding let generalization by default.

Is the presence of let-generalization a real issue in your work ?