2015-09-26 64 views
15

当询问在Haskell的那种[Int][]我得到:问计一类的实物斯卡拉VS哈斯克尔

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

这是有道理的:第一个是正确的类型,第二个是更高的亲属型。

但是,当我做同样的斯卡拉:

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

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

...它说都是高kinded类型。为什么第一个没有被归类为合适的类型?这种差异的原因是什么?

+2

似乎第一个少了点* *看到了'int'(它也谈到'scala.collection.immutable.List' – Carsten

回答

6

似乎scala看到了List[Int][Int]部分非常清楚,但选择忽略它,总是看“外部”型故意。

如果这是不正确的,那么type ListOfInt = List[Int]其次:k -v ListOfInt将产生** -> *但事实并非如此:

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

scala> :k -v List[Int] 
scala.collection.immutable.List's 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's kind is F[+A] 
* -(+)-> * 
This is a type constructor: a 1st-order-kinded type.