22 ms·
Could you point out a few features? Would be interested to know.
by stevecooperorg 13y ago
Could you point out a few features? Would be interested to know.
- runT1ME 13y agoHigher kinds are quite nice. 1. In scala you could write class MyClass[A[_]](a: A) and it can only take a 'container' (List/Future/Option). in C#/F# this is invalid: class MyClass<A<?>> { public MyClass(A a) { } } You could make a plain ol' generic that took a concrete type List<Int> but not just on the type. 2. Implicit Conversion: In C#/F# you get extension methods, but it doesn't help you take an existing class and ad-hoc make it implement an interface. So in scala I could do this: trait XMLSerializable { def toXML(): XMLNode } and then let's say I want to make existing classes in the standard library implement this interface: implicit def toXMLSerializable(li: List[_]): XMLSerializable = new XMLSerializable { def toXML = { transformListToXML(li) } } I can now do: val genericXmlSerializable: XMLSerializable = List[Int](1,2,3,4)