Запрос типа типа в Scala vs Haskell

При запросе типа [Int] и [] в Haskell я получаю:

Prelude> :k [Int]
[Int] :: *
Prelude> :k []
[] :: * -> *

что имеет смысл: первый - это правильный тип, а второй - более высокий тип.

Но когда я делаю то же самое в Scala:

scala> :k -v List[Int]
scala.collection.immutable.List kind is F[+A]
* -(+)-> *
This is a type constructor: a 1st-order-kinded type.

scala> :k -v List
scala.collection.immutable.List kind is F[+A]
* -(+)-> *
This is a type constructor: a 1st-order-kinded type.

... он говорит, что оба типа более высокого типа. Почему первый не классифицируется как подходящий тип? В чем причина этой разницы?

Ответы

Ответ 1

Кажется, что scala отлично разбирается в [Int] в List[Int], но предпочитает игнорировать его и всегда смотреть на "внешний" тип намеренно.

Если это не так, то type ListOfInt = List[Int], за которым следует :k -v ListOfInt, будет * not * -> *, но это не так:

scala> :k -v List
scala.collection.immutable.List kind is F[+A]
* -(+)-> *
This is a type constructor: a 1st-order-kinded type.

scala> :k -v List[Int]
scala.collection.immutable.List kind is F[+A]
* -(+)-> *
This is a type constructor: a 1st-order-kinded type.

scala> type ListOfInt = List[Int]
defined type alias ListOfInt

scala> :k -v ListOfInt
scala.collection.immutable.List kind is F[+A]
* -(+)-> *
This is a type constructor: a 1st-order-kinded type.