/* Can we make the return type more specific with an HList? (I assume not) */
def create
(b
: Int
=> Boolean, x
: Int
=> Option
[X
], y
: Int
=> Option
[Y
]) : List[T] = {
x(i).map{ts ::= _}
y(i).map{ts ::= _}
i += 1
}
ts
}
def main
(args
: Array
[String
]) { val b
= (n
: Int
) => n
< 5 val x
= (n
: Int
) => if (n
% 2 == 0) Some
(X
(n
)) else None
val y
= (n
: Int
) => if (n
% 3 == 0) Some
(Y
(n
)) else None
println(ts) /* List(X(4), Y(3), X(2), Y(0), X(0)) */
/* Can we reconstruct static type information at runtime?
* (I am still not sure what that actually means ...)
*/
}
}
b2JqZWN0IE1haW4gewogIHRyYWl0IFQgeyBkZWYgZjogSW50IH0KICBjYXNlIGNsYXNzIFgodmFsIGY6IEludCkgZXh0ZW5kcyBUCiAgY2FzZSBjbGFzcyBZKHZhbCBmOiBJbnQpIGV4dGVuZHMgVAogIAogIC8qIENhbiB3ZSBtYWtlIHRoZSByZXR1cm4gdHlwZSBtb3JlIHNwZWNpZmljIHdpdGggYW4gSExpc3Q/IChJIGFzc3VtZSBub3QpICovCiAgZGVmIGNyZWF0ZShiOiBJbnQgPT4gQm9vbGVhbiwgeDogSW50ID0+IE9wdGlvbltYXSwgeTogSW50ID0+IE9wdGlvbltZXSkKICAgICAgICAgICA6IExpc3RbVF0gPSB7CgogICAgdmFyIGkgPSAwCiAgICB2YXIgdHMgPSBMaXN0W1RdKCkKCiAgICB3aGlsZSAoYihpKSkgewogICAgICB4KGkpLm1hcHt0cyA6Oj0gX30KICAgICAgeShpKS5tYXB7dHMgOjo9IF99CgogICAgICBpICs9IDEKICAgIH0KICAgIAogICAgdHMKICB9CgogIGRlZiBtYWluKGFyZ3M6IEFycmF5W1N0cmluZ10pIHsKICAgIHZhbCBiID0gKG46IEludCkgPT4gbiA8IDUKICAgIHZhbCB4ID0gKG46IEludCkgPT4gaWYgKG4gJSAyID09IDApIFNvbWUoWChuKSkgZWxzZSBOb25lCiAgICB2YWwgeSA9IChuOiBJbnQpID0+IGlmIChuICUgMyA9PSAwKSBTb21lKFkobikpIGVsc2UgTm9uZQoKICAgIHZhbCB0cyA9IGNyZWF0ZShiLCB4LCB5KQogICAgcHJpbnRsbih0cykgLyogTGlzdChYKDQpLCBZKDMpLCBYKDIpLCBZKDApLCBYKDApKSAqLwogICAgCiAgICAvKiBDYW4gd2UgcmVjb25zdHJ1Y3Qgc3RhdGljIHR5cGUgaW5mb3JtYXRpb24gYXQgcnVudGltZT8KICAgICAqIChJIGFtIHN0aWxsIG5vdCBzdXJlIHdoYXQgdGhhdCBhY3R1YWxseSBtZWFucyAuLi4pCiAgICAgKi8KICB9Cn0=