title: Can I make haskell GADT data constructor infix in derived Show?
body: <p>Consider two <code>data</code> declarations:</p>
  
  <pre><code>{-# LANGUAGE GADTs #-}
  
  data X = Int `Y` Int deriving Show
  
  data Z where
          W :: Int -&gt; Int -&gt; Z  deriving Show
  
  main = do
           print (1 `Y` 2)
           print (3 `W` 4)
  </code></pre>
  
  <p>Running the above program produces:</p>
  
  <pre><code>1 `Y` 2
  W 3 4
  </code></pre>
  
  <p>so the derived <code>show</code> knows that <code>Y</code> is infix and prints it accordingly. The <code>::</code> syntax doesn't seem to allow infixness.</p>
  
  <p>Is there any way to make the compiler derive show for <code>W</code> as infix, (other than explicitly providing a <code>show</code> instance for <code>Z</code>)?
  The desired output is</p>
  
  <pre><code>1 `Y` 2
  3 `W` 4
  </code></pre>