I am reading in the F# specification - the most recent one that I could find, found here - in an effort to learn the language in what is arguably the hard way. In section "3.6 Symbolic Keywords," the specification states that:
The following symbolic or partially symbolic character sequences are treated as keywords:
token symbolic-keyword = let! use! do! yield! return! | -> <- . : ( ) [ ] [< >] [| |] { } ' # :?> :? :> .. :: := ;; ; = _ ? ?? (*) <@ @> <@@ @@>
In the next section, "3.7 Symbolic Operators," it states that:
User-defined and library-defined symbolic operators are sequences of characters as shown below, except where the sequence of characters is a symbolic keyword (§3.6).
regexp first-op-char = !%&*+-./<=>@^|~ regexp op-char = first-op-char | ? token quote-op-left = | <@ <@@ token quote-op-right = | @> @@> token symbolic-op = | ? | ?<- | first-op-char op-char* | quote-op-left | quote-op-right
I might be missing something obvious, but it seems to me that the specification is stating that the operators/keywords ?
, @>
, @@>
, <@
, and <@@
are both symbolic keywords and symbolic operators. So... which one are they? How do I know weather to use a symbolic keyword token, or a symbolic operator token?
Thanks in advance, Brandon
EDIT To be clear, I want to know why the specification states that symbolic operators can be these symbols immediately after stating that they can't be.