Haskell bothers me. I once got into a really in depth argument with another programmer who used Haskell about it. They were really trying to push a point saying that Haskell offers a syntax that is somehow so so much better than C-like syntax, and that everyone who used C-like languages were stabbing themselves in the leg.
Personally I can't make any sense of it. It's just a bit too different and I'm not willing to put the effort into trying to learn something that is different on so many different fundamental levels.
I'm not too knowledgeable on Haskell yet since I'm still learning the basics, although I definitely wouldn't say that using C-like languages over Haskell is shooting yourself in the foot. Honestly the whole reason I'm learning Haskell is
because it is so different from anything else I've done. Other than how interesting it is to me, I get to learn a whole new way of thinking about programs that I can apply to other code I write.
The problem I have with it is that I'm so used to computers not having an "arrow" looking syntax, where you do stuff like
var foo -> 40
instead of:
var foo = 40
if you get what I'm saying. I'm so used to working with really low leveled stuff - symbols like that don't make sense, as usually you won't want to waste time by making it read over a string of "this comes after this".
That's just my ideas - maybe I'm way off what you're saying, and I'm confusing Haskell with another language.
I kind of see what you're saying, although operators with multiple characters in them aren't really unique to Haskell (++, +=, ==, >=, etc in lots of languages, and even -> in C++). Arrows in Haskell aren't used like in your example (you would just type foo = 40), but when they are, it makes a whole lot of sense. For example, foo :: Int -> Int defines foo as a function that takes an Int and returns an Int.
The closest thing in Haskell to your example would be something like this, which just prompts for input then prints it out:
main = do
foo <- getLine
putStrLn foo
You use <- here because Haskell makes a clear distinction between pure code and code with side effects, like I/O. foo <- getLine runs the getLine IO action then binds the result to foo. If you typed foo = getLine, it would just make foo an alias for the getLine function.