Example #1
0
def _compose_hook(context: FunctionContext) -> Type:
    compose = _get_compose_type(context)
    inferred = infer.infer_function_type_arguments(compose, [
        arg for args in context.arg_types for arg in args
    ], [kind for kinds in context.arg_kinds for kind in kinds], [[
        i, i
    ] for i in range(len([arg for args in context.arg_types
                          for arg in args]))])
    ret_type = context.api.expr_checker.apply_inferred_arguments(
        compose, inferred, context.context).ret_type
    ret_type.variables = []
    return ret_type
Example #2
0
def _effect_lift_call_hook(context: MethodContext) -> Type:
    try:
        f = context.type.args[0]
        if isinstance(f, AnyType):
            return context.default_return_type
        as_ = []
        rs = []
        es = []
        for effect_type in context.arg_types:
            r, e, a = get_proper_type(effect_type[0]).args
            as_.append(a)
            rs.append(r)
            es.append(e)
        inferred = infer.infer_function_type_arguments(
            f, as_, [kind for kinds in context.arg_kinds for kind in kinds],
            [[i, i] for i in range(len(as_))])
        a = context.api.expr_checker.apply_inferred_arguments(
            f, inferred, context.context).ret_type
        r = reduce(_combine_environments, rs)
        e = UnionType.make_union(sorted(set(es), key=str))
        return context.default_return_type.copy_modified(args=[r, e, a])
    except AttributeError:
        return context.default_return_type