# Type system for higher kinded types, with inference Follow

Is it possible to construct a type system that supports inference of higher kinded types in MPS? Has this been attempted before?

Haskell is a language which supports this.

For example:

Therefore, in

It must be the case that

In most languages with generics you can specify something such as:

But you cannot declare something such as:

Due to an error that is along the lines of "Cannot apply generic type 'F' to generic type 'A'; Cannot apply generic type 'F' to generic type 'B'" or "Generic types cannot be applied to generic types" or something like that.

From the tutorials I have seen, MPS appears closely related to the design of Java. I fear that down the road, after having invested a lot of time in learning MPS, that I will find deal breaking limitations in what kind of languages I am allowed to implement. Is this a good time to jump aboard with MPS?

Haskell is a language which supports this.

For example:

fmap has type (Functor f) => (a -> b) -> f a -> f b

(+1) has type Int -> Int

(Just 5) has type Maybe Int

Maybe is a Functor

Therefore, in

fmap (+1) (Just 5)

It must be the case that

fmap has type (Int -> Int) -> Maybe Int -> Maybe Int

In most languages with generics you can specify something such as:

class List<T> {

T value;

List<T> next;

}

But you cannot declare something such as:

interface Functor<F> {

function fmap<A,B>(f: A -> B, x: F<A>): F<B>;

}

Due to an error that is along the lines of "Cannot apply generic type 'F' to generic type 'A'; Cannot apply generic type 'F' to generic type 'B'" or "Generic types cannot be applied to generic types" or something like that.

From the tutorials I have seen, MPS appears closely related to the design of Java. I fear that down the road, after having invested a lot of time in learning MPS, that I will find deal breaking limitations in what kind of languages I am allowed to implement. Is this a good time to jump aboard with MPS?

Please sign in to leave a comment.