Indicate missing associated type instances
If there is no matching instance for a typeclass that defines an associated type, GHC cannot further reduce an application of that associated type. For nested type family applications, this produces rather large error messages, eg:
<interactive>:98:20: Couldn't match type ‘units-2.3:Data.Metrology.Factor.Normalize (Data.Metrology.Suspicious.Poly.SurfaceUnitFactorsOf (Data.Singletons.Prelude.Tuple.Snd (Data.Metrology.Suspicious.Poly.SplitPrefix (PrefixExp Deci) Deci Core)) units-2.3:Data.Metrology.Factor.@- '['units-2.3:Data.Metrology.Factor.F Core ('Data.Metrology.Z.S 'Data.Metrology.Z.Zero)])’ with ‘'’ In the expression: (25 %> centi Core) `ceilToUnit` deci Core In an equation for ‘it’: it = (25 %> centi Core) `ceilToUnit` deci Core
The cause of the above error message is that
Deci is not a member of the typeclass
ExpUnitPrefix that defines the associated type
PrefixExp. Unfortunately this is not clear at all from the error message, and adding additional class constraints to the appropriate functions doesn't improve things.
It would be nice if GHC pointed out that there is no
ExpUnitPrefix Deci instance, or at least that
PrefixExp Deci cannot be further reduced. I imagine this would be useful for open type families as well, but I can't comment personally.
|Component||Compiler (Type checker)|