title: How to prevent type scoping in such situation?
body: <pre class="lang-hs prettyprint-override"><code>instance IsString Escaped where fromString a = Escaped a
  instance ConvertibleStrings URI.URI String where convertString = show
  
  data Escaped = forall a. ConvertibleStrings a String =&gt; Escaped a
  instance Show Escaped where show (Escaped a) = cs a
  class Escaping a where
      esc1 :: a -&gt; Escaped
      esc2 :: a -&gt; Escaped
  instance ConvertibleStrings a String =&gt; Escaping a where
      esc1 a = Escaped $ escape1 $ cs a
      esc2 a = Escaped $ escape2 $ cs a
  </code></pre>
  <p>Now, with the <code>OverloadedStrings</code> extension enabled, if I use <code>esc1</code>, <code>esc2</code> then I should use it with type &quot;tag&quot; like: <code>[sec1 (&quot;a&quot;::String), ...]</code>. How to prevent it, so to have just a <code>[sec1 &quot;a&quot;, ...]</code>? Is it possible? I tried DS extension but it does not help in this situation.</p>