%dw 2.0

type Node = {
    name: String,
    child?: Node
}

type SimpleType<T> = {
    name: T
}

fun f1(tree: SimpleType<String>) = ???

fun f2(tree: Node) = ???

fun f3<T>(t: T) = ???

fun f4 <K,V>(lhs: {(K)?: V}, rhs : (V, K, Number) -> Object): Object = ???

fun f5 <T,X>(lhs: Array<T> , rhs: Array<X>): Array<Array<T | X>> = ???
---
{}