<span class="hljs-comment">// Different definitions of strings and character literals,</span>
<span class="hljs-comment">// some with prefixes and suffixes (not all are currently highlighted)</span>
<span class="hljs-string">""</span>
<span class="hljs-string">"fo\"o"</span>
<span class="hljs-string">"foo\
bar"</span>
<span class="hljs-string">"foo"</span>B
<span class="hljs-string">@""</span>
<span class="hljs-string">@"foo"</span>
<span class="hljs-string">@"fo""o"</span>
<span class="hljs-string">@"foo"</span>B
<span class="hljs-string">""""""</span>
<span class="hljs-string">"""fo""o"
bar"""</span>
<span class="hljs-string">"""foo"""</span>B
<span class="hljs-string">'a'</span>
<span class="hljs-string">'a'</span>B
<span class="hljs-string">'\''</span>
<span class="hljs-string">'\\'</span>
<span class="hljs-string">'\231'</span>
<span class="hljs-string">'\x41'</span>
<span class="hljs-string">'\u0041'</span>
<span class="hljs-string">'\U0001F47D'</span>
<span class="hljs-string">$"<span class="hljs-subst">{<span class="hljs-number">1</span><span class="hljs-operator">+</span><span class="hljs-number">1</span>}</span>"</span>
<span class="hljs-string">""</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">"fo\"o"</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">"foo\ // part of the string
bar"</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">"foo"</span>B <span class="hljs-comment">// end</span>
<span class="hljs-string">@""</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">@"foo"</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">@"fo""o"</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">@"foo"</span>B <span class="hljs-comment">// end</span>
<span class="hljs-string">""""""</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">"""fo""o" // part of the string
bar"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">"""foo"""</span>B <span class="hljs-comment">// end</span>
<span class="hljs-string">'a'</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">'a'</span>B <span class="hljs-comment">// end</span>
<span class="hljs-string">'\''</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">'\\'</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">'\231'</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">'\x41'</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">'\u0041'</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">'\U0001F47D'</span> <span class="hljs-comment">// end</span>
<span class="hljs-string">$"<span class="hljs-subst">{<span class="hljs-number">1</span><span class="hljs-operator">+</span><span class="hljs-number">1</span>}</span>"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">0</span>
<span class="hljs-string">"string \'"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">1</span>
<span class="hljs-string">"this string contains a
new line"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">2</span>
<span class="hljs-string">"this string jumps a line\
but the result has no new line"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">3</span>
<span class="hljs-string">@"verbatim "" \' {
string"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">4</span>
<span class="hljs-string">"""triple quoted " \' {
string"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">5</span>
<span class="hljs-string">$"interpola\ {{
ted \' <span class="hljs-subst">{<span class="hljs-number">1</span> <span class="hljs-operator">+</span> <span class="hljs-number">1</span> <span class="hljs-comment">// can contain comments and " in placeholders</span>
}</span>string"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">6</span>
<span class="hljs-string">$@"interpolated "" \' {{
verbatim<span class="hljs-subst">{<span class="hljs-number">1</span> <span class="hljs-operator">+</span> <span class="hljs-number">1</span> <span class="hljs-comment">// can contain comments and " in placeholders</span>
}</span>string"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">7</span>
<span class="hljs-string">@$"interpolated "" \' {{
verbatim<span class="hljs-subst">{<span class="hljs-number">1</span> <span class="hljs-operator">+</span> <span class="hljs-number">1</span> <span class="hljs-comment">// can contain comments and " in placeholders</span>
}</span>string"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">8</span>
<span class="hljs-string">$"""interpolated triple quoted " \' {{ <span class="hljs-subst">{ (<span class="hljs-built_in">sprintf</span> <span class="hljs-string">"%d%s"</span> <span class="hljs-number">42</span>)
<span class="hljs-comment">// and " and comments...</span>
}</span>string"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">9</span>
<span class="hljs-string">$"""test <span class="hljs-subst">{ <span class="hljs-string">@"{it's not a placeholder!}"</span> }</span> asdf"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">10</span>
<span class="hljs-string">$"""test <span class="hljs-subst">{ <span class="hljs-string">$"but this is:<span class="hljs-subst">{<span class="hljs-number">1</span><span class="hljs-operator">+</span><span class="hljs-number">1</span>}</span>"</span> }</span> asdf"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">11</span>
<span class="hljs-string">$"interpola\ {{
ted \' <span class="hljs-subst">{<span class="hljs-number">1</span> <span class="hljs-operator">+</span> <span class="hljs-number">1</span> <span class="hljs-comment">// can contain comments in placeholders</span>
<span class="hljs-comment">// placeholders cannot contain "</span>
}</span>string"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">12</span>
<span class="hljs-string">$@"interpolated "" \' {{
verbatim<span class="hljs-subst">{<span class="hljs-number">1</span> <span class="hljs-operator">+</span> <span class="hljs-number">1</span> <span class="hljs-comment">// can contain comments in placeholders</span>
<span class="hljs-comment">// placeholders cannot contain "</span>
}</span>string"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">13</span>
<span class="hljs-string">$"""interpolated triple quoted " \' {{ <span class="hljs-subst">{ (<span class="hljs-built_in">sprintf</span> <span class="hljs-string">"%d%s"</span> <span class="hljs-number">42</span>) <span class="hljs-comment">// can contain "</span>
<span class="hljs-comment">// and comments...</span>
}</span>string"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">14</span>
<span class="hljs-keyword">let</span> list <span class="hljs-operator">=</span> [<span class="hljs-number">1</span>]
<span class="hljs-string">$"""test<span class="hljs-subst">{ list <span class="hljs-operator">|></span> List.map (<span class="hljs-keyword">fun</span> x <span class="hljs-operator">-></span> x <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) }</span>test"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">15</span>
<span class="hljs-string">$"test<span class="hljs-subst">{<span class="hljs-number">1</span> <span class="hljs-comment">(* " Does it break the string? " *)</span> }</span>test"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">16</span>
<span class="hljs-string">$"test\
<span class="hljs-subst">{
<span class="hljs-keyword">let</span> x <span class="hljs-operator">=</span> <span class="hljs-number">42</span> <span class="hljs-comment">// valid comment contains " quote " ...</span>
x <span class="hljs-comment">(* " Does it break the string? " *)</span>
}</span>test"</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">17</span>
<span class="hljs-string">$"""test
<span class="hljs-subst">{
<span class="hljs-meta">#if</span> DEBUG
<span class="hljs-meta">#endif</span>
<span class="hljs-keyword">let</span> asdf <span class="hljs-operator">=</span> <span class="hljs-string">"}"</span> <span class="hljs-comment">// """ does it break?</span>
<span class="hljs-keyword">let</span> x <span class="hljs-operator">=</span> <span class="hljs-string">$@"test<span class="hljs-subst">{<span class="hljs-number">2</span><span class="hljs-operator">+</span><span class="hljs-number">2</span> <span class="hljs-comment">(* " what about double nesting? " *)</span> }</span>test"</span>
<span class="hljs-keyword">let</span> lit <span class="hljs-operator">=</span> <span class="hljs-number">0</span>
<span class="hljs-keyword">let</span> x <span class="hljs-operator">=</span> <span class="hljs-keyword">unitTask</span> { <span class="hljs-keyword">return</span> () }</span>
asdf
}test"""</span>
<span class="hljs-number">18</span>
<span class="hljs-keyword">let</span> list <span class="hljs-operator">=</span> [<span class="hljs-number">1</span>]
<span class="hljs-string">$"""test
<span class="hljs-subst">{
<span class="hljs-keyword">let</span> asdf <span class="hljs-operator">=</span> <span class="hljs-string">"}"</span>
list <span class="hljs-operator">|></span> List.map (<span class="hljs-keyword">fun</span> x <span class="hljs-operator">-></span> x <span class="hljs-operator">+</span> <span class="hljs-number">1</span>)
}</span>test"""</span> <span class="hljs-comment">// end</span>
<span class="hljs-number">19</span>