diff --git a/src/main/java/com/tang/intellij/lua/ty/TySubstitutor.kt b/src/main/java/com/tang/intellij/lua/ty/TySubstitutor.kt
index 018949d8..51180340 100644
--- a/src/main/java/com/tang/intellij/lua/ty/TySubstitutor.kt
+++ b/src/main/java/com/tang/intellij/lua/ty/TySubstitutor.kt
@@ -285,6 +285,16 @@ class GenericAnalyzer(
}
private fun visitSig(arg: IFunSignature, par: IFunSignature) {
+ par.params?.let { parParams ->
+ arg.params?.asSequence()?.zip(parParams.asSequence())?.forEach { (argParam, parParam) ->
+ if (argParam.ty != null) {
+ warp(argParam.ty) {
+ accept(Ty.resolve(context, parParam.ty ?: Primitives.UNKNOWN))
+ }
+ }
+ }
+ }
+
arg.returnTy?.let {
warp(it) {
par.returnTy?.let {
diff --git a/src/test/resources/inspections/function_generics.lua b/src/test/resources/inspections/function_generics.lua
index 3c86435e..74091f65 100644
--- a/src/test/resources/inspections/function_generics.lua
+++ b/src/test/resources/inspections/function_generics.lua
@@ -808,3 +808,25 @@ numberArray = arrayWithUnionOfGenerics(stringArray, numberArray)
numberArray = arrayWithUnionOfGenerics(stringArray, numberArray)
+
+
+---@generic R
+---@param fn fun(resume: (fun(result: R): void)): void
+---@return R
+local function nestedFunctionParameterInference(fn)
+ ---@type R
+ local r
+
+ fn(function(userR)
+ r = userR
+ end)
+
+ return r
+end
+
+nestedFunctionParameterInference(
+ ---@param resume fun(result: number): void
+ function(resume)
+ resume(1)
+ end
+)