Precedence of record dot
Thank you @shayne-fletcher-da and all involved for your work on record dot syntax! I'm a very happy user :) I'm not certain that the following behaviour of OverloadedRecordDot is intentional, i.e. meets the spec in the RDS proposal. If it is, sorry for the noise. ## Summary ``` {-# LANGUAGE OverloadedRecordDot #-} data Foo = Foo { val :: Int , fun :: Int -> Int } apply :: Foo -> Int apply foo = foo.fun foo.val ``` The RDS proposal says that "dot binds tighter than function application", so I was expecting the above program to be accepted, with `foo.fun foo.val` being parsed as `(foo.fun) (foo.val)`. However, GHC gives a type error suggesting that it has been parsed as `((foo.fun) foo).val`. In contrast, `Prelude.succ foo.val` does indeed parse as `(Prelude.succ) (foo.val)`. I also note the committee's [RDS Conclusion](https://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-608329102). The following bullet point is copied here for convenience: > The form `r.x` (with no spaces on either side of the dot) is not treated as a naked record selector; instead it is treated as an atomic expression, very like a qualified name `M.x`. So `f r.x` means `f (r.x)` ## Steps to reproduce I built GHC HEAD (commit 7a728ca6a52ff8c1a1ad43c81cf9289a61dca107) and applied it to the above program.
issue