Can't use `OverloadedRecordDot` in QuasiQuotes
Motivation
I'm trying to write a toy library with OverloadedRecordDot
to steal Rust's impl
syntax, which would allow us to write stuff like:
data User = User { name :: String }
impl ''User [d|
sayName :: IO ()
sayName = do
putStrLn self.name
greet :: String -> IO ()
greet message = do
putStrLn $ concat [ message, ", ", self.name ]
|]
This would generate something like:
instance HasField "sayName" User (IO ()) where
getField self = do
putStrLn self.name
instance HasField "greet" User (IO ()) where
getField self message = do
putStrLn $ concat [ message, ", ", self.name ]
Unfortunately, in the QQ, I can't write self.name
. I get this error:
src/Impl.hs:15:44: error:
Expression form not (yet) handled by Template Haskell self.name
|
15 | putStrLn $ concat [ message, ", ", self.name ]
| ^^^^^^^^^
Proposal
TemplateHaskell
should support this.
Version information:
λ ghc --version
The Glorious Glasgow Haskell Compilation System, version 9.2.0.20210422
GHC installed via ghcup
.
Thanks!