over implementation details, without imposing performance overhead.” • Das klingt gut, aber Was heißt das? • Im Grunde: wie Type-Aliase, nur besser • statt: type Email = String • nehmen wir: opaque type Email = String
COMPILIEREN! val d = e.domain // -> AUTSCH! val e = Email.from(null) // besser (-> None) Achtung! Das bedeutet, daß es keine(!) ¨ Uberpr¨ ufung der Typerzeugung zur Compilierzeit gibt wie bei Refined Types!
Initialisierung trotzdem zur Compilierzeit • erm¨ oglicht spezifische from oder validate Methoden analog zu Refined • Operationen auf diesen Typen (Eq, Semigroup, Monoid) k¨ onnen definiert werden • weitere Operationen einfach via Extension Methods • Es gibt noch kein Refined (zumindest nicht vollst¨ andig) f¨ ur Scala . :-(
zur Compilierzeit (das Killerfeature von Refined) • viel mehr Boilerplate • viel, viel mehr Boilerplate f¨ ur diverse Operationen, die mit Refined “frei Haus” kommen • Opaque Types sollten performanter sein, da Refined die Value Classes benutzt • keine “magische” Konvertierung mehr, die ggf. nur ¨ uber zus¨ atzliche Annotationen funktioniert