def RndVar(gen, *args): return mk_class_with_interface(type(gen()), evalapp_bind, Fmap, promote)(App(gen, *args))
def call(*args): other_exprs = map(lambda e: e.expr, map(promote, args)) app_node = Bind(f, *other_exprs) result = interp(app_node) return mk_class_with_interface(type(result), interp, Fmap, promote)(app_node)