In singletons-2.6, Sigma is defined as
data Sigma (s :: Type) :: (s ~> Type) -> Type
and GHC 8.8.4 tells that its kind is
> :k Sigma
Sigma :: forall s -> (s ~> *) -> *
So what is this forall in this kind signature?
Apparently, it's different from
data Sigma :: forall s. Type -> (s ~> Type) -> Type
in which case its kind is, of course,
Sigma :: * -> (s ~> *) -> *
Also, it seems different from
data Sigma :: f s -> (s ~> *) -> *
It seems to me that the promoted kind of the type variable s in s :: Type is unified with the kind variable s in (s ~> Type) -> Type, but does it what happens? I have a feeling that I'm missing something very basic.
I tried finding any documents describing this, but I had no luck.