Montag, 21. Juni 2010

Spass mit Scala Infixtypen

In Scala gibt es das interessante Konzept der Infix Typen, dabei handelt es sich um nichts weiter als Typen die zwei Parameter erwarten. Scala erlaubt hier Infix Notation.

object Main {
class FooBar[A, B]

def main(args: Array[String]): Unit = {
//zwei unterschiedliche Schreibweisen die das gleiche
//meinen
var x: FooBar[Int, BigInt] = null
var y: Int FooBar BigInt = null
}
}

Damit eröffnen sich interessante Möglichkeiten des Typsystems, z.B: "Operatoren" aus Typen erstellen die wiederum Typen erstellen. Verwirrt? In Scala gibt es bereits =:=, <:< und <%<, diese Konstrukte kann man sich unter anderem auch selbst zusammenbasteln, im folgenden Beispiel bauen wir uns einen <@@@< "Operator"

abstract class <@@@<[A, B] extends (A => B)

class Test[T <: (Int => Int)]

object Main {
def main(args: Array[String]) = {
val t = new Test[Int <@@@< Int]
}
}

Ziemlich cool, jetzt kann man sich Operatoren basteln die Typen erstellen und sich anfühlen wie native Features der Sprache :)

Keine Kommentare: