Skip to content

Support OverloadedRecordDot

Using the OverloadedRecordDot syntax inside the quasiquote will raise a compilation error, treating foo.bar as foo . bar:

newtype Foo = Foo { bar :: Int }

foo :: Foo
foo = Foo 0

message :: String
message = [i|I have #{foo.bar} problems.|]

gets the following error:

typecheck [-Wdeferred-type-errors]: • Couldn't match expected type ‘Int -> c0’ with actual type ‘Foo’
• In the first argument of ‘(.)’, namely ‘foo’
  In the second argument of ‘string-interpolate-0.3.3.0:Data.String.Interpolate.Conversion.Classes.interpolate’, namely
    ‘(foo . bar)’
  In the second argument of ‘string-interpolate-0.3.3.0:Data.String.Interpolate.Conversion.Classes.build’, namely
    ‘(string-interpolate-0.3.3.0:Data.String.Interpolate.Conversion.Classes.interpolate
        Data.Proxy.Proxy (foo . bar))’