Rather than having a special FunctionCall type that deduces the return type, change the FunctionType to include the return type. This return type is inferred as part of unification.