Ceylon intersection type and union type

27/02/2014 - 20:31 von Heiner Kücker | Report spam
Lukas Eder schreibt auf

http://java.dzone.com/articles/top-...n-language

über Ceylon union types sowie Ceylon intersection types
(Punkt 5 und Punkt 6).

Ceylon ist eine alternative Sprache auf der JVM.

Kann man so was in Java gebrauchen?
Wie ist Eure Meinung?

In Scala gibt es (sealed) case classes.
Sind diese gleichwertig zu den union types?

Weiterhin gibt es in Scala structural types.
Sind diese gleichwertig zu den intersection types?
Wahrscheinlich nicht ganz, weil dort nicht Typen, sondern Methoden festgelegt werden.

Danke
Heiner
 

Lesen sie die antworten

#1 Patrick Roemer
28/02/2014 - 16:45 | Warnen spam
Responding to Heiner Kücker:
Lukas Eder schreibt auf

http://java.dzone.com/articles/top-...n-language

über Ceylon union types sowie Ceylon intersection types
(Punkt 5 und Punkt 6).

Ceylon ist eine alternative Sprache auf der JVM.

Kann man so was in Java gebrauchen?



Was heisst "so was"? Lukas weist ja z.B. darauf hin, dass es eine Art
limitierte intersection types auf Generics-Ebene gibt, alles weitere
waere ohne Typinferenz und Type Aliases wahrscheinlich eh nicht so doll
nutzbar. Union Types ohne Pattern Matching scheinen mir auch nicht
besonders sinnvoll. Diese Dinge mit Generics und den Varianzregeln zu
vereinbaren wuerde sicher auch lustig. Da haengt also jeweils noch ein
ziemlicher Rattenschwanz dran.

Bei flow-sensitive typing bin ich mir noch nicht sicher, ob man das
ueberhaupt gebrauchen kann. ;)

Wie ist Eure Meinung?



Sowas kann man nicht mal eben auftackern. Wenn Du Java so aenderst, dass
sich das halbwegs homogen einfuegt, hast Du wahrscheinlich bereits eine
komplett andere Sprache.

In Scala gibt es (sealed) case classes.
Sind diese gleichwertig zu den union types?



Nein, das hat eher wenig miteinander zu tun. So etwas gibt es in Scala
derzeit nicht, auch wenn man mit erweiterter Metagymnastik nah dran
kommen kann:

http://www.chuusai.com/2011/06/09/s...ry-howard/

Es war wohl mal angedacht, union types in die Sprache einzubauen. Keine
Ahnung, was da der Stand ist (und ob das auch so Esoterika wie
enumerated types einschloesse).

Weiterhin gibt es in Scala structural types.
Sind diese gleichwertig zu den intersection types?



Auch hier: Noch nicht einmal aehnlich.

Am naechsten dran waere wohl noch sowas:

<snip>
scala> trait A
defined trait A

scala> trait B
defined trait B

scala> class AA extends A
defined class AA

scala> class AB extends A with B
defined class AB

scala> def foo(ab: A with B) = println(ab)
foo: (ab: A with B)Unit

scala> foo(new AB)
$line6.$read$$iw$$iw$

scala> foo(new AA)
<console>:12: error: type mismatch;
found : AA
required: A with B
foo(new AA)
^

scala> foo(new AA with B)
$line10.$read$$iw$$iw$$anon$
</snip>

...und der Typinferenzer denkt sich sowas gegebenenfalls auch:

<snip>
scala> class BA extends B with A
defined class BA

scala> def bar(b: Boolean) = if(b) new AB else new BA
bar: (b: Boolean)A with B
</snip>

Viele Gruesse,
Patrick

Ähnliche fragen