diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim
index 5f33df5c7d1a8..cc16fd3c0eb69 100644
--- a/compiler/semtypes.nim
+++ b/compiler/semtypes.nim
@@ -1671,6 +1671,11 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType =
       var err = "cannot instantiate "
       err.addTypeHeader(c.config, t)
       err.add "\ngot: <$1>\nbut expected: <$2>" % [describeArgs(c, n), describeArgs(c, t.n, 0)]
+      if m.firstMismatch.kind == kTypeMismatch and m.firstMismatch.arg < n.len:
+        let nArg = n[m.firstMismatch.arg]
+        if nArg.kind in nkSymChoices:
+          err.add "\n"
+          err.add ambiguousIdentifierMsg(nArg)
       localError(c.config, n.info, errGenerated, err)
       return newOrPrevType(tyError, prev, c)
 
diff --git a/tests/errmsgs/tambtypegeneric.nim b/tests/errmsgs/tambtypegeneric.nim
new file mode 100644
index 0000000000000..ed42ff6cf96b0
--- /dev/null
+++ b/tests/errmsgs/tambtypegeneric.nim
@@ -0,0 +1,11 @@
+import "."/[mambtype1, mambtype2]
+type H[K] = object
+proc b(_: int) =  # slightly different, still not useful, error message if `b` generic
+  proc r(): H[Y] = discard #[tt.Error
+             ^ cannot instantiate H [type declared in tambtypegeneric.nim(2, 6)]
+got: <typedesc[Y] | typedesc[Y]>
+but expected: <K>
+ambiguous identifier: 'Y' -- use one of the following:
+  mambtype1.Y: Y
+  mambtype2.Y: Y]#
+b(0)