It is crazy how much work comes out of Bruno Oliveira’s research groups.
Another cool online thing that exists is CP, a language with disjoint intersection and union types:
TypeScript has this functionality.
Additionally, Scala 3 does as well, including support for these generic "Type-Lambda" expressions I saw in one of the examples on the playground:
https://beta.plground.org/jnclma/CP_tutorial
In Scala 3, this would be roughly:printNum = trait implements ExpSig<Eval => Print> {
https://docs.scala-lang.org/scala3/reference/new-types/type-...trait ExpSig[F[_]] object printNum extends ExpSig[[A] =>> Eval[A] => Print]