Lets parse the definition of eval.
textsyntactic category
let rec eval : type a. a term -> a = ... (eval x)is a definition
eval : type a. a term -> a = ... (eval x)is a let-binding
eval : type a. a term -> ais not a pattern
for there are no parens! We have a parsing dead end. Backtrack! I can find no rule for typexpr that begins “type”.
The shortest admissible top level construct with this construct is
let e :type a. int = 3; e;;
lack of parens