000160348 001__ 160348
000160348 005__ 20181203022209.0
000160348 0247_ $$2doi$$a10.1145/1449955.1449798
000160348 02470 $$2ISI$$a000262035900025
000160348 037__ $$aARTICLE
000160348 245__ $$aGenerics of a Higher Kind
000160348 269__ $$a2008
000160348 260__ $$c2008
000160348 336__ $$aJournal Articles
000160348 520__ $$aWith Java 5 and C-# 2.0, first-order parametric polymorphism was introduced in mainstream object-oriented programming languages under the name of generics. Although the first- order variant of generics is very useful, it also imposes some restrictions: it is possible to abstract over a type, but the resulting type constructor cannot be abstracted over. This can lead to code duplication. We removed this restriction in Scala, by allowing type constructors as type parameters and abstract type members. This paper presents the design and implementation of the resulting type constructor polymorphism. Furthermore, we study how this feature interacts with existing object-oriented constructs, and show how it makes the language more expressive.
000160348 6531_ $$aDesign
000160348 6531_ $$aExperimentation
000160348 6531_ $$aLanguages
000160348 6531_ $$atype constructor polymorphism
000160348 6531_ $$ahigher-kinded types
000160348 6531_ $$ahigher-order genericity
000160348 6531_ $$aScala
000160348 6531_ $$aPrimitive Objects
000160348 6531_ $$aDependent Types
000160348 6531_ $$aLanguages
000160348 6531_ $$aCalculus
000160348 6531_ $$aSystems
000160348 6531_ $$aJava
000160348 700__ $$aMoors, Adriaan
000160348 700__ $$aPiessens, Frank
000160348 700__ $$g126003$$aOdersky, Martin$$0241835
000160348 773__ $$j43$$tAcm Sigplan Notices$$q423-438
000160348 909C0 $$xU10409$$0252187$$pLAMP
000160348 909CO $$pIC$$particle$$ooai:infoscience.tind.io:160348
000160348 917Z8 $$xWOS-2010-11-30
000160348 917Z8 $$x166927
000160348 937__ $$aEPFL-ARTICLE-160348
000160348 973__ $$rREVIEWED$$sPUBLISHED$$aEPFL
000160348 980__ $$aARTICLE