one thing that I find fascinating about Haskell is how functions and variables are the same. In most languages a variable holds a value while a function does something and then, eventually, returns a value. In Haskell you don't see this difference and after having used Haskell, falling back to more "traditional" programming where variables are different from functions or methods feels awkward. If I want to get a value, I shouldn't really worry about its origin, whether it is a constant value, a mutable variable or the result of a complex computation! In Haskell, variables are just 0-ary functions.
Many object-oriented languages have properties that feels a bit the gap.
Can anyone indicate any other language with a system similar to Haskell? I thought it was common to functional languages because of referential transparency, but I've seen it's not the case. In Lisp, for example, you have (defun)
to explicitly declare functions.
Don't forget Javascript.
is perfectly legitimate.