I'm surprised the compiler goes straight to assembly, rather than targeting LLVM (most native programming languages) or C- (what GHC does/did)
Most native programming languages historically don't, and OCaml predates LLVM by a good 7 years.
> or C- (what GHC does/did)
Cmm is an intermediate language specific to GHC before the backend[1], GHC's default backend is a native generator.
[1] or more precisely "an other" intermediate language, since there's also Core.
Native languages targeting LLVM are the exception not the norm. The vast majority of native compilers do emit assembly.