In F# it is necessary to use the rec keyword. In Haskell  there is no need to explicitly tell if a given function is recursive or not. Given the role of recursion in functional programming, the F# design seems rather odd to me.  Is it a good language design decision or does it only exist for historical reason or because of an implementation constraint?
Why is the rec keyword needed in F#?
functional programming;language design;f#
There is inherent difference in haskell and f# semantics. In haskell function call does not perform any real calculation, but allocates heap object known as 'thunk'. It is perfectly ok for thunk to have link to itself or other thunk. However, in f# function call is an actual call, making expression like let x = 1 : 2 : x in x invalid - as it requires x to be constructed before 1 : 2 : x is constructed. However, it is still more or less reasonable definition for infinite list, some way to define it should exist. Here lies roots for rec. If you want more, search and read for operational semantics for SML and Haskell - it is different. 