Due to a complete working example request from Daniel Wagner, I found the answer.
At the end of the example:
{-
The problem here is in PolyKinds pragma. It works well without him. I probably need this to write
bar :: Proxy (a :: *) -> Proxy a
and everything is going well.
Now the reason is clear. The type family ( == ) does not have poly-like instances (the details explain why such instances are not provided here ), so we cannot reduce all the equalities. Therefore, we need to specify the view.
Dmitry Olshansky
source share