Thanks for the answer, exactly what I was looking for.
A few comments:
> Well, the Clojure repl is way better.
I've messed around with it, not enough to know, but wouldn't shock me. `ghci` is pretty decent, but it's not really world-class at anything. iPython is probably the best repl I've ever used for any language.
> Not being pervasively lazy makes it easier to reason about many things.
Agree. This is, indeed, problematic at times.
> Not strictly boxing IO in the IO monad makes it easier to debug (debug by println is still useful!).
Well, Debug.Trace gets you most of what you want there (using unsafePerformIO under the covers), so there is an "escape hatch" for doing printf-style debugging. But it's not quite as smooth as printf in languages that don't sandbox purity so much. On balance, I'd still take the purity (because I do a lot less debugging!), but point granted.
> Macros are much easier to understand than Template Haskell
No experience with macros, but since lisp-like things are so big into macros, sounds plausible.
> and since you don't have real typing you can have heterogeneous collections, or values where the type of one part depends on the value of another part, easily.
I'm not sure I view this as a /virtue/, to be honest. I'd rather have the type checking, and use typeclasses or ADTs to put mixed types into a sequence.
> Also I think it really is easier to get started with Clojure than with Haskell,
Yeah, I think this is undoubtedly true. Haskell veterans often say "whats' the big deal?", but the deal is big. And it's not so much because of "math", in the classical sense, as much as it's about very high, very new, abstractions. Many of them without analogies to things you've done before or things in the "real world". I did ocaml for awhile before I did Haskell, and Haskell was still a pretty big leap.
Anyway, thanks again for the constructive feedback.
A few comments:
> Well, the Clojure repl is way better.
I've messed around with it, not enough to know, but wouldn't shock me. `ghci` is pretty decent, but it's not really world-class at anything. iPython is probably the best repl I've ever used for any language.
> Not being pervasively lazy makes it easier to reason about many things.
Agree. This is, indeed, problematic at times.
> Not strictly boxing IO in the IO monad makes it easier to debug (debug by println is still useful!).
Well, Debug.Trace gets you most of what you want there (using unsafePerformIO under the covers), so there is an "escape hatch" for doing printf-style debugging. But it's not quite as smooth as printf in languages that don't sandbox purity so much. On balance, I'd still take the purity (because I do a lot less debugging!), but point granted.
> Macros are much easier to understand than Template Haskell
No experience with macros, but since lisp-like things are so big into macros, sounds plausible.
> and since you don't have real typing you can have heterogeneous collections, or values where the type of one part depends on the value of another part, easily.
I'm not sure I view this as a /virtue/, to be honest. I'd rather have the type checking, and use typeclasses or ADTs to put mixed types into a sequence.
> Also I think it really is easier to get started with Clojure than with Haskell,
Yeah, I think this is undoubtedly true. Haskell veterans often say "whats' the big deal?", but the deal is big. And it's not so much because of "math", in the classical sense, as much as it's about very high, very new, abstractions. Many of them without analogies to things you've done before or things in the "real world". I did ocaml for awhile before I did Haskell, and Haskell was still a pretty big leap.
Anyway, thanks again for the constructive feedback.