Racket or Haskell is the greatest language, depending on whether one prefers to be friends with the interpreter or not. I like Haskell because it's ultra-type-safe, has partial functions, and provides for fun challenges with advanced type class chicanery (implementing Space Invaders in Yampa...). I like Racket because a minor typo doesn't result in wrath of GOD (ghci obfuscated debugger) messages like: a -> Monad State T IO (a,b -> m [c]) is not monomorphic in its rank 2 sub-type with respect to type-constructor m of kind * -> *, please use flag -XFunctionalDependenciesWithGeneralizedNewtypeDerivingAndUndecidableInstancesWithFlexibleContextsAtTheTopOfEveryFileThat... ...NeedsAMonadTransformerSeriouslyWhatThe****
And sometimes it's just more convenient to "set!" something than figure out how to propagate the radically new type signature for the chain of 50 functions that use this inner function that needs to briefly mutate something. But, hating Haskell aside, it's the best language I know except perhaps Racket. I just wish it were strict by default, and would print type errors to std-nowhere.
|My Favorite Languages|