Local/inner types

This commit is contained in:
Andrey Breslav
2010-12-10 17:20:10 +03:00
parent 8c650f7f00
commit f9eb67c0a1
8 changed files with 53 additions and 4 deletions
+31
View File
@@ -0,0 +1,31 @@
virtual class Builder<E, R> {
[operator] fun plusAssign(item : E)
fun result() : R
}
virtual class Buildable {
fun newBuilder<E, R>() : Builder<E, R>
}
class List<T> {
class object Buildable {
override fun newBuilder<E, R>() : Builder<E, R>
}
}
extension Map<E> for T
where
T : Iterable<E>,
class object T : Buildable<E, T> {
fun map<R>(f : {(E) : R}) : T<R> = {
val builder = T.newBuilder()
for (e in this) {
builder += f(e)
}
builder.result()
}
}