<div dir="ltr">It does seem unnecessary. The Data instance for Proxy is manually written in Data.Data:<br><br><pre><span class="">proxyConstr</span> <span class="">::</span> <span class="">Constr</span>
<a name="line-1335"></a><span class="">proxyConstr</span> <span class="">=</span> <span class="">mkConstr</span> <span class="">proxyDataType</span> <span class="">"Proxy"</span> <span class="">[]</span> <span class="">Prefix</span>
<a name="line-1336"></a>
<a name="line-1337"></a><a name="proxyDataType"></a><span class="">proxyDataType</span> <span class="">::</span> <span class="">DataType</span>
<a name="line-1338"></a><span class="">proxyDataType</span> <span class="">=</span> <span class="">mkDataType</span> <span class="">"Data.Proxy.Proxy"</span> <span class="">[</span><span class="">proxyConstr</span><span class="">]</span><a name="line-1339"></a></pre><br><pre><a name="line-1340"></a><a name="instance Data (Proxy t)"></a><span class="">instance</span> <span class="">(</span><span class="">Data</span> <span class="">t</span><span class="">)</span> <span class="">=></span> <span class="">Data</span> <span class="">(</span><span class="">Proxy</span> <span class="">t</span><span class="">)</span> <span class="">where</span>
<a name="line-1341"></a>  <span class="">gfoldl</span> <span class="">_</span> <span class="">z</span> <span class="">Proxy</span>  <span class="">=</span> <span class="">z</span> <span class="">Proxy</span>
<a name="line-1342"></a>  <span class="">toConstr</span> <span class="">Proxy</span>  <span class="">=</span> <span class="">proxyConstr</span>
<a name="line-1343"></a>  <span class="">gunfold</span> <span class="">_</span> <span class="">z</span> <span class="">c</span> <span class="">=</span> <span class="">case</span> <span class="">constrIndex</span> <span class="">c</span> <span class="">of</span>
<a name="line-1344"></a>                    <span class="">1</span> <span class="">-></span> <span class="">z</span> <span class="">Proxy</span>
<a name="line-1345"></a>                    <span class="">_</span> <span class="">-></span> <span class="">error</span> <span class="">"Data.Data.gunfold(Proxy)"</span>
<a name="line-1346"></a>  <span class="">dataTypeOf</span> <span class="">_</span> <span class="">=</span> <span class="">proxyDataType</span>
<a name="line-1347"></a>  <span class="">dataCast1</span> <span class="">f</span>  <span class="">=</span> <span class="">gcast1</span> <span class="">f</span>
<span style="font-family:arial,helvetica,sans-serif"><a name="line-1348"><br></a></span></pre><pre><span style="font-family:arial,helvetica,sans-serif">If dataCast1 weren't defined to be gcast1, then that instance would only require a Typeable t constraint, which would make it polykinded. To be honest, I'm not sure why gcast1 requires a Data t constraint (I don't use Data that often, so hopefully someone more knowledgeable than me can answer this).<br></span></pre></div>