I see now that Racket has types. At first glance it seems to be almost identical to Haskell typing. But is Lisp's CLOS covering some of the space Haskell types cover? Creating a very strict Haskell type and an object in any OO language seems vaguely similar. It's just that I've drunk some of the Haskell kool-aid and I'm totally paranoid that if I go down the Lisp road, I'll be screwed due to dynamic typing.
CL type system is more powerful than the Haskell one, e.g., you can have a type
However, the compiler does not force its understanding of type safety down your throat, so you can ignore its "notes" - at your own risk.
This means that you can write Haskell in Lisp (so to speak) by declaring all types and carefully making sure that all the necessary types are inferred, but then it is easier to use Haskell in the first place.
Basically, if you want strict static typing, use Haskell or OCaml, if you want dynamic typing, use Lisp. Each path has its advantages (and zealots) and disadvantages (and detractors), so you will benefit from learning both.
|show 2 more comments|