Allow wildcards for parameters functionally determined (also type synonyms)
class F a b | a -> b where
foo :: a
-- ...
myFoo :: F a b => a
myFoo = foo
Since b is not used and fully determined by a could the restriction on wildcards in constraints be lifted?
myFoo :: F a _ => a
myFoo = foo
and eventually hiding it behind a type synonym:
type F' a = F a _
myFoo' :: F' a => a
myFoo' = foo
I raised this issue at ICFP 2014, I haven't looked into whether dominique's response to my comment applies.
I could achieve similar things with a type family but not quite.
Or CPP :)