As discussed on slack, there seems to be an issue with how kinds are unified, here's a minimal, self-contained example:
data TProxy (t :: Type) = TProxy
data SProxy (s :: Symbol) = SProxy
put :: forall proxy a. proxy a -> TProxy a
put _ = TProxy
--wrong :: TProxy "apple"
wrong = put (SProxy :: SProxy "apple")
This typechecks (on both HEAD and 0.11.6), and we managed to force a Symbol into TProxy.
As discussed on slack, there seems to be an issue with how kinds are unified, here's a minimal, self-contained example:
This typechecks (on both HEAD and 0.11.6), and we managed to force a
SymbolintoTProxy.