The haskell notation has only one special syntax, i.e. <- , which maps to the bind function, everything else inside do is just a normal function application, for which the result is a monad type, for example: return , putStr , etc.
Similarly in F # you have let! to represent the bind and return operation, the syntactic sugar of the keyword (not an ordinary function call, as in haskell, but this keyword is mapped to the return function you define). Now there are many other keywords that can support your calculation expressions (you can easily omit them if not required), all of them are documented here . These extra operations give you syntactic sugar for using the F # keywords instead of the usual functions that return a monadic value. You can see that all keywords that you can overload in F # evaluation expressions have a monodic return value.
So, basically, you donβt have to worry about all these keywords, just think of them as a normal monad return function (with a specific signature of the type that you can find in the documentation) that you can call using the F # keywords inside syntax for expressing calculations.
Ankur source share