Long story short, ``.field`` is a postfix projection operator that binds
tighter than function application.
Lexical structure
-----------------
*``.foo`` is a valid name, which stands for record fields (new ``Name``
constructor ``RF "foo"``)
*``Foo.bar.baz`` starting with uppercase ``F`` is one lexeme, a namespaced
identifier: ``DotSepIdent ["baz", "bar", "Foo"]``
*``foo.bar.baz`` starting with lowercase ``f`` is three lexemes: ``foo``,
``.bar``, ``.baz``
*``.foo.bar.baz`` is three lexemes: ``.foo``, ``.bar``, ``.baz``
* If you want ``Constructor.field``, you have to write ``(Constructor).field``.
* All module names must start with an uppercase letter.
New syntax of ``simpleExpr``
----------------------------
Expressions binding tighter than application (``simpleExpr``), such as variables or parenthesised expressions, have been renamed to ``simplerExpr``, and an extra layer of syntax has been inserted.
..code-block:: idris
simpleExpr ::= (.field)+ -- parses as PRecordProjection
| simplerExpr (.field)+ -- parses as PRecordFieldAccess
| simplerExpr -- (parses as whatever it used to)
*``(.foo)`` is a name, so you can use it to e.g. define a function called
``.foo`` (see ``.squared`` below)
*``(.foo.bar)`` is a parenthesised expression
Desugaring rules
----------------
*``(.field1 .field2 .field3)`` desugars to ``(\x => .field3 (.field2 (.field1
x)))``
*``(simpleExpr .field1 .field2 .field3)`` desugars to ``((.field .field2