Quasi-approved HKTs for TypeScript:

In approximated Rust-esque:

```
trait Monad<T<*>> {
fn map<A, B>(f: &Fn(A) -> B) -> Box<Fn(T<A>) -> T<B>>;
fn lift<A>(a: A) -> T<A>;
fn join<A>(tta: T<T<A>>) -> T<A>;
}
trait Cartesian<T<*>> {
fn all<A>(a: Vec<T<A>>) -> T<Vec<A>>;
}
trait Foo<T<*, *>> {
fn bar<A, B>(f: Fn(A) -> B) -> T<A, B>;
}
```

Add lifetimes and the different Rust closures, and things get more “interesting”