2015-09-26 16 views
15

Wenn für die Art von [Int] und [] in Haskell zu fragen ich:Vorstellung für eine Art der Typ in Scala vs Haskell

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

was Sinn macht: Die erste ist eine richtige Art und die zweite ist eine höher gekleideter Typ.

Aber wenn ich das gleiche in Scala tun:

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. 

... es sagt, beide sind höher kinded Typen. Warum ist der erste nicht als richtiger Typ klassifiziert? Was ist der Grund für diesen Unterschied?

+2

es die erste scheint einfach nicht * sehen * die 'int' (it spricht auch nur über "scala.collection.immutable.List" – Carsten

Antwort

6

Es scheint, dass scala den sehr gut [Int] Teil in List[Int] sieht, aber, sie zu ignorieren und schaut immer auf dem „äußeren“ bewusst ein.

Wenn dies nicht so wäre, dann folgte type ListOfInt = List[Int] von :k -v ListOfInt* nicht * -> * ergeben würde, aber das ist nicht der Fall:

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.