<div dir="ltr"><div>Given<br><br>data GhcPass (c :: Pass)<br>deriving instance Eq (GhcPass c)<br>deriving instance Typeable c => Data (GhcPass c)<br><br>data Pass = Parsed | Renamed | Typechecked<br>         deriving (Data)<br><br></div>Is there any way to express that `pass` must be valid for each value of `Pass` in the following instance head?<br><div><br>instance (p ~ GhcPass pass, OutputableBndrId p)<br>       => Outputable (HsIPBinds p) where<br><br><br></div><div>This comes from a problem where setting each type family instance separately does not get picked up during instance resolution (and can't be, according to earlier questions by me on this)<br><br></div><div>i.e.<br><br>type instance XIPBinds       (GhcPass 'Parsed) = NoExt<br>type instance XIPBinds       (GhcPass 'Renamed) = NoExt<br>type instance XIPBinds       (GhcPass 'Typechecked) = TcEvBinds<br><br></div><div>it works fine for<br><br>type instance XIPBinds       (GhcPass _) = NoExt<br><br></div><div>Alan<br></div><div><br></div><div><br></div></div>