The following are notes I made as I tried to understand a GADT example. I think I finally found the correct BNF.

In the same example I presume that the text “eval : type a. a term -> a” in “let rec eval : type a. a term -> a = function …” is a pattern, but none of those alternatives match. I also do not see in Language extensions any suitable additions to the pattern syntactic category.

To answer my own question: no. That text is instead a let-binding of the let rec construct. “type a. a term -> a” is presumably a typexpr. But now I cannot get category typexpr to produce text that begins ‘type’. Behold the category poly-typexpr: it has a dot in it! Also see this form of let-binding in the annex of language extensions. It has taken me many hours to find this twisty passage thru the syntax. I found it once nearly a year ago and neglected to record the route, thus this page!

Oops: not so fast! There is no way for a poly-typexpr to begin with type! I suppose I will have to search for all the occurrences of type in the BNF. I will seek “<tt>type</tt>” in the raw html pages. There are several such terminal occurrences of type in 6.10 Module types. I will assume that neither modules nor classes are involved here. A curious construct, but always in parens. Bingo!! See production about 30 lines down.

In summary “let rec eval : type a. a term -> a = function … ” is an expr of alternative 31.
eval : type a. a term -> a = function … ” is a non-standard let-binding where
type a. a term -> a” is a poly-typexpr. Phew! No it is a different non standard let-binding:
let-binding ::= value-name : type { typeconstr } . typexpr = expr

Now I settle down to an evening reading the semantics given near the BNF productions.
------

types.html 700 toc84 poly-typexpr ::= [{ ' ident }+ .]  typexpr
types.html 700 toc84 method-type ::= method-name : poly-typexpr
016 079 field-decl
016 137 type-constraint
017 055 class-field-spec class-field-spec ::=  method [private] method-name :  poly-typexpr
017 099 sec-methspec prose
017 110 @manual.kwd76 prose
017 161 class-field class-field	::= method [private] virtual method-name : poly-typexpr
017 288 @manual.kwd105 prose
021 430 toc79 let-binding ::= value-name :  poly-typexpr =  expr
021 700 toc84 class-field ::= method! [private] method-name :  poly-typexpr =  expr