This compiler is a place where our code is parsed and ast traversed, we can do lots of things with that data that can be the role of the compiler. If you have it as a separate tool, youre repeating a lot of the same work. The compiler includes code formatting for example which is the same purpose but lower value even, IMO.
my example:
module X = {
let y = ....
let z = ...
}
module Y = {
// Naturally belongs in X
let q = (a, b) => X.y(a) + X.z(b)
}
``