To be honest, I'd kill for a Lisp that had the same type system as OCaml, but I suspect the closes we'll get is basically Rust (whose macro system is quite good).
There's also the plait language which says its type system is similar to ML: https://docs.racket-lang.org/plait/index.html
And Hackett, inspired by Haskell: https://lexi-lambda.github.io/hackett/
And Common Lisp has coalton: https://coalton-lang.github.io/
type Divisor Number
def divide(Number, Divisor) = Number / Divisor
As compared to: def divide(number: Number, divisor: Number) = number / Divisor
I have implemented a compiler for a language that does this with different (less familiar) syntax. It's a bit more complicated than described above to handle local variables but it works very well for me.This doesn't remove them, it just moves them.
Rust is categorically different from all of these other things. Lisps (and OCaml) all have interactivity as a core language feature - Rust is as non-interactive as it gets.
> whose macro system is quite good
Compared to C, perhaps.
Shen homepage: https://shenlanguage.org/
The language is mostly inspired by the following 3 languages:
Clojure (syntax)
Haskell (functional programming)
Standard ML (polymorphism)