In pure functional languages, like Haskell, a function with no arguments is treated as its result.
foo : Int
1 + 1
// defining a function
const foo = () => 1 + 1
// calling a function
If you want to call a function right after defining it.
const foo = (() => 1 + 1)()
How come most languages make this distinction? The only thing I could think of is that it gives fine-grained control to programmer when something is executed. If it wasn't, then you'd have to rely on lazy evaluation.
Are there other reasons? Was it a historical accident?