haskell - “Illegal type synonym family application in instance” with functional dependency -
i have multi-parameter typeclass functional dependency:
class multi b | -> b
i have simple, non-injective type synonym family:
type family fam
i want write instance of multi
uses fam
in second parameter, this:
instance multi (maybe a) (fam a)
however, instance not accepted. ghc complains following error message:
error: • illegal type synonym family application in instance: fam • in instance declaration ‘multi (maybe a) (fam a)’
fortunately, there workaround. can perform usual trick moving type out of instance head , equality constraint:
instance (b ~ fam a) => multi (maybe a) b
this instance accepted! however, got thinking, , started wonder why transformation not applied all instances of multi
. after all, doesn’t functional dependency imply there can 1 b
per a
, anyway? in situation, seems there no reason ghc should reject first instance.
i found ghc trac ticket #3485, describes similar situation, typeclass did not involve functional dependency, ticket (rightfully) closed invalid. in situation, however, think functional dependency avoids problem described in ticket. there i’m overlooking, or oversight/missing feature in ghc?
Comments
Post a Comment