`<dd><ul>${fi.fiTyVars.map(v =>
`<li>${escape(v.tvName)}<span style="color:#888"> :: ${escape(v.tvKind)}</span></li>`).join('')}</ul></dd>`;
const src = renderDefinedAt(fi.fiSrc, fi.fiDefinedIn || fi.fiFamily.qnPackage);
- // For data fam-instances we *don't* show a "Right-hand side" row.
- // GHC's representation is the synthetic R: TyCon (`R:CrateInt`),
- // and after our R: rewrite it's the abstract @FamilyApp Family
- // [args]@ form — structurally equal to the LHS, so labelling it
- // "Right-hand side" was actively misleading. Show a brief
- // explanatory note instead.
+ // Data fam-instances: omit the "Right-hand side" row entirely.
+ // What GHC stores as the rhs is the synthetic R: TyCon, and our
+ // R: rewrite turns it into a copy of the LHS — neither is the
+ // user's actual data-constructor declaration. We don't extract
+ // the data constructors themselves into the schema, so we have
+ // nothing useful to show.
const rhsEntry = fi.fiIsData
- ? `<dt>Kind</dt><dd><em>Data instance — the right-hand side is a synthetic GHC-internal data constructor and isn't shown.</em></dd>`
+ ? ''
: `<dt>Right-hand side</dt><dd>${escape(renderArg(fi.fiRhs, fi.fiTyVars))}</dd>`;
return `
<h2>${head}</h2>