>>27
I once read a Haskell ebook that made an assertion that lazy evaluation is fucking awesome. Then it showed a program that consisted of a 'main' function being a 'do' expression, with lots of a '<-' sprinkled here and there.
You're somehow confusing lazy evaluation with functional purity. The IO monad gives you side effects, not strictness. Also, it's the only monad that does this.
Then i learned that functions can't be defined from M-x run-haskell (ghci) prompt, only by loading a whole file.
You heard wrong. It's true that you can't define new types, typeclasses, or modules at the prompt, but you can use
let to bind any variable (including functions) and have it shadow previous uses of the same variable name (just put
let before your function definition, and replace any significant newlines with semicolons.)
And apparently i can't query the "VM" for function's type, because it's a "black box" and "that's the way it's supposed to be". In the fucking interpreter.
Yeah you can.
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Like you care anyway.
Oh, and all the other problems you had with Haskell are completely true, and actual showstoppers, and all of the reasons that Haskell will never be used for writing anything but fibs functions, and even there it's useless because imperative languages are better at it.