I believe the parentheses are needed to avoid a syntactical ambiguity. Without parentheses you’d have
let turnRight Robot(direction, position) = ...
and the parser could interpret what comes after the function name as either two parameters (Robot and the tuple) or a constructor applied to the tuple. The parser has to solve the ambiguity somehow and, in this case, it seems to decide it’s two arguments instead of a single argument that is a constructor. Hence the parentheses.
As for 2, I’m more used to OCaml than F# but I think F# follows OCaml and other ML languages in the custom of not usually including a return type annotation in functions.