@@ -1086,7 +1086,7 @@ defmodule Module.Types.Descr do
1086
1086
case :maps . take ( :dynamic , fun ) do
1087
1087
:error ->
1088
1088
if fun_only? ( fun ) do
1089
- fun_apply_with_strategy ( fun , fun , nil , arguments )
1089
+ fun_apply_with_strategy ( fun , nil , arguments )
1090
1090
else
1091
1091
:badfun
1092
1092
end
@@ -1100,7 +1100,7 @@ defmodule Module.Types.Descr do
1100
1100
1101
1101
{ fun_dynamic , fun_static } ->
1102
1102
if fun_only? ( fun_static ) do
1103
- fun_apply_with_strategy ( fun , fun_static , fun_dynamic , arguments )
1103
+ fun_apply_with_strategy ( fun_static , fun_dynamic , arguments )
1104
1104
else
1105
1105
:badfun
1106
1106
end
@@ -1109,7 +1109,7 @@ defmodule Module.Types.Descr do
1109
1109
1110
1110
defp fun_only? ( descr ) , do: empty? ( Map . delete ( descr , :fun ) )
1111
1111
1112
- defp fun_apply_with_strategy ( fun , fun_static , fun_dynamic , arguments ) do
1112
+ defp fun_apply_with_strategy ( fun_static , fun_dynamic , arguments ) do
1113
1113
args_dynamic? = any_dynamic? ( arguments )
1114
1114
args_domain = args_to_domain ( arguments )
1115
1115
static? = fun_dynamic == nil and not args_dynamic?
@@ -1122,8 +1122,7 @@ defmodule Module.Types.Descr do
1122
1122
{ :badarg , domain_to_flat_args ( domain , arity ) }
1123
1123
1124
1124
not subtype? ( args_domain , domain ) ->
1125
- # TODO: This compatibility check is not enough
1126
- if static? or not compatible? ( fun , fun ( arguments , term ( ) ) ) do
1125
+ if static? or not compatible? ( args_domain , domain ) do
1127
1126
{ :badarg , domain_to_flat_args ( domain , arity ) }
1128
1127
else
1129
1128
{ :ok , dynamic ( ) }
@@ -1174,7 +1173,7 @@ defmodule Module.Types.Descr do
1174
1173
:badfun ->
1175
1174
case fun_normalize ( fun_dynamic , arity , :dynamic ) do
1176
1175
{ :ok , dynamic_domain , dynamic_arrows } ->
1177
- { :ok , dynamic_domain , [ ] , dynamic_arrows }
1176
+ { :ok , union ( dynamic_domain , dynamic ( ) ) , [ ] , dynamic_arrows }
1178
1177
1179
1178
error ->
1180
1179
error
0 commit comments