How about a stack-oriented programming language? Cat hits your high points. It is:
- Statically typed with type inference.
- Makes you re-think common imperative languages concepts like looping. Conditional execution and looping are handled with combinators.
- Rewarding - forces you to understand yet another model of computation. Gives you another way to think about and decompose problems.
Dr. Dobbs published a short article about Cat in 2008 though the language has changed slightly.