title: How do I promote a function that returns a String with singletons?
body: <p>Using stack with lts-9.2 (and singletons-2.1), I have this:</p>
  
  <pre><code>   $(singletons [d|
         data EventScans
          = PassThrough
          | SuiteProgress
  
         -- cn :: EventScans -&gt; [Char]
         cn PassThrough = "all-events"
         cn SuiteProgress = "suite-progress"
      |])
  </code></pre>
  
  <p>I can't give this function a type signature and the inferred type signature is<code>cn :: IsString t =&gt; EventScans -&gt; t</code>. AFAIK <code>IsString</code> doesn't singletonize.</p>
  
  <p>Without the type signature on <code>cn</code> I get the <code>Cn</code> type family as expected. If I try to add the type signature I get:</p>
  
  <pre><code>* Expected kind `[Char]', but `"all-events"' has kind `Symbol'
  * In the type `"all-events"'
    In the type family declaration for `Cn' (haskell-stack-ghc)
  </code></pre>
  
  <p>What's the right way to do this?</p>
  
  <p><strong>edit</strong> If I try to include the type signature <code>cn :: IsString t =&gt; EventScans  -&gt; t</code> I get the following error:</p>
  
  <pre><code>Variable `a_agPb' used as both a kind and a type
   Did you intend to use TypeInType? (haskell-stack-ghc)
  Not in scope: type constructor or class `SIsString'
    Perhaps you meant `IsString' (imported from Data.String) (haskell-stack-ghc)
  </code></pre>