Most of my experience is with F#, but I&#x27;ve simply not found it to be a problem. At module boundaries, I&#x27;m free to annotate as much as I want. The point is that it&#x27;s up to me to decide what I need. I&#x27;d be surprised to find many cases where return types change around and the program still compiles but is now incorrect.<p>Ideally, items and expressions would have the same syntax and usability. I find in F#, I just start writing a long function with lots of nesting, then copy pieces out to refactor as needed.