Sounds like you have a lot of experience with imperative and procedural languages.
If you want to try something pretty difficult, but familiar, try a super-strict language like Ada.
If you want to try something completely different, I would suggest a functional language.
Elixir is already on you shortlist. I would also suggest taking a look at OCaml, Erlang, F#, Clojure, etc... However, I would not suggest Haskell if you're just starting out in functional.
If you want to try something pretty difficult, but familiar, try a super-strict language like Ada.
If you want to try something completely different, I would suggest a functional language.
Elixir is already on you shortlist. I would also suggest taking a look at OCaml, Erlang, F#, Clojure, etc... However, I would not suggest Haskell if you're just starting out in functional.