As an alternative to Ada, you could try ML or OCaml as a Lisp-descended languages with serious type systems and modules, but with garbage collection, functional style, and less verbose syntax than Ada. Haskell is even further in functional purity and precision types, but it is hacky in some ways, and it doesn't have ML-style modules.