<div dir="ltr"><div>Hi All<br><br>I'm presuming (correct me if I'm wrong) that when I have an overloaded string literal in my program, let's say it's overloaded to Text, the conversion from [Char] -> Text happens at runtime, instead of what would be ideal being that the compiler somehow does that conversion at compile time and puts the raw bytes that represent the Text object in the executable?</div><div><br></div><div>If it does work like that, that's not a big deal. But let's say I have:</div><div><br></div><div>f :: Text -> Text -> Text</div><div>f x y = Text.concat ["Hello", x, "World", y]</div><div><br></div><div>This is desugared like so:<br><br><div>f :: Text -> Text -> Text</div><div>f x y = Text.concat [fromString "Hello", x, fromString "World", y]</div></div><div><br></div><div>Would there be a [Char] -> Text conversion from ['H', 'e', 'l', 'l', 'o'] -> Text "Hello" everytime 'f' is called, or is 'f' rewritten something like this:</div><div><br><div>f :: Text -> Text -> Text</div><div>f x y = Text.concat [hello, x, world, y]</div><div><br></div></div><div>hello :: Text</div><div>hello = fromString "Hello"</div><div><br></div><div>world :: Text</div><div>world = fromString "World"<br><br>So the [Char] -> Text conversion is only done once and memomised?<br><br>I guess this brings up the more general question, if I have this:</div><div><br></div><div>f x = h x (g (42 :: Int))</div><div><br></div><div>Can I rely on GHC rewriting it like this?</div><div><br></div><div>f x = h x y</div><div>y = g (42 :: Int)</div><div><br></div><div>Or is this a transformation I should do explicitly if I want to rely on it? <br><br><div>(I've added ":: Int" because I guess it can't do this when there's polymorphism sneaking in)</div><br>Thanks,<br>Clinton</div></div>