argument = ((Arrow) fnType).getArgument();
else if (fnType instanceof Intersection) {
List<Type> args = fnType.getChildren().values().stream()
.filter(tpe -> tpe instanceof Arrow).map(tpe->((Arrow)tpe).getArgument())
.collect(Collectors.toList());
argument = new Intersection(args);
}
if (this.argument != null)
this.argument.typecheck(env, Optional.ofNullable(argument));
if (!(fnType instanceof ApplyableType))