title: Why doesn't TypeSynonymInstances allow partially applied type synonyms to be used in instance heads?
body: <p>I know that <a href="http://hackage.haskell.org/trac/haskell-prime/wiki/TypeSynonymInstances" rel="noreferrer">TypeSynomymInstances only allows fully applied type synonyms to be used in instance heads</a>, but it seems like it would be handy if I could use paritally applied type synonyms to be used as well.</p>
  
  <p>For instance:</p>
  
  <pre><code>class Example e where
    thingy :: a -&gt; b -&gt; e a b
  
  -- legit, but awkward
  newtype FuncWrapper e a b = FuncWrapper { ap :: a -&gt; e a b }
  instance (Example e) =&gt; Example (FuncWrapper e) where
    thingy _ = FuncWrapper . flip thingy
  funcWrapperUse :: (Example e) =&gt; e Int String
  funcWrapperUse = thingy 1 "two" `ap` 3 `ap` 4 `ap` 5
  
  -- not legal, but a little easier to use
  type FuncSynonym e a b = a -&gt; e a b
  instance (Example e) =&gt; Example (FuncSynonym e) where
    thingy _ = flip thingy
  funcSynonymUse :: (Example e) =&gt; e Int String
  funcSynonymUse = thingy 1 "two" 3 4 5
  </code></pre>