diff --git a/lib/modules/manager/haskell-cabal/extract.spec.ts b/lib/modules/manager/haskell-cabal/extract.spec.ts
index 7625c210396a08fffcf20780f2c20766efcacda3..d4f680e75f74c0b6fc077fd69091460d655f47f6 100644
--- a/lib/modules/manager/haskell-cabal/extract.spec.ts
+++ b/lib/modules/manager/haskell-cabal/extract.spec.ts
@@ -2,10 +2,19 @@ import {
   countPackageNameLength,
   countPrecedingIndentation,
   extractNamesAndRanges,
+  findDepends,
   findExtents,
   splitSingleDependency,
 } from './extract';
 
+const commentCabalFile = `build-depends:
+  -- leading
+ base,
+-- middle
+ other,
+ -- trailing
+ other2`;
+
 describe('modules/manager/haskell-cabal/extract', () => {
   describe('countPackageNameLength', () => {
     it.each`
@@ -91,4 +100,14 @@ describe('modules/manager/haskell-cabal/extract', () => {
       ]);
     });
   });
+
+  describe('findDepends()', () => {
+    it('strips comments', () => {
+      const res = findDepends(commentCabalFile + '\na: b');
+      expect(res).toEqual({
+        buildDependsContent: '\n base,\n other,\n other2',
+        lengthProcessed: commentCabalFile.length,
+      });
+    });
+  });
 });
diff --git a/lib/modules/manager/haskell-cabal/extract.ts b/lib/modules/manager/haskell-cabal/extract.ts
index 80231c3e5c7a932908ff2e66733dcd9c833f7c1a..7abeee0c78e6dbbebf61821f122404ba1b8f1ee4 100644
--- a/lib/modules/manager/haskell-cabal/extract.ts
+++ b/lib/modules/manager/haskell-cabal/extract.ts
@@ -3,6 +3,7 @@ import { regEx } from '../../../util/regex';
 const buildDependsRegex = regEx(
   /(?<buildDependsFieldName>build-depends[ \t]*:)/i,
 );
+const commentRegex = regEx(/^[ \t]*--/);
 function isNonASCII(str: string): boolean {
   for (let i = 0; i < str.length; i++) {
     if (str.charCodeAt(i) > 127) {
@@ -86,6 +87,11 @@ export function findExtents(indent: number, content: string): number {
         break;
       }
       if (thisIndent < indent) {
+        if (content.slice(blockIdx - 1, blockIdx + 1) === '--') {
+          // not enough indention, but the line is a comment, so include it
+          mode = 'finding-newline';
+          continue;
+        }
         // go back to before the newline
         for (;;) {
           if (content[blockIdx--] === '\n') {
@@ -125,7 +131,8 @@ export function countPrecedingIndentation(
  *
  * @returns {{buildDependsContent: string, lengthProcessed: number}}
  *   buildDependsContent:
- *     the contents of the field, excluding the field name and the colon.
+ *     the contents of the field, excluding the field name and the colon,
+ *     and any comments within
  *
  *   lengthProcessed:
  *     points to after the end of the field. Note that the field does _not_
@@ -143,10 +150,19 @@ export function findDepends(
   const indent = countPrecedingIndentation(content, matchObj.index);
   const ourIdx: number =
     matchObj.index + matchObj.groups['buildDependsFieldName'].length;
-  const extent: number = findExtents(indent + 1, content.slice(ourIdx));
+  const extentLength: number = findExtents(indent + 1, content.slice(ourIdx));
+  const extent = content.slice(ourIdx, ourIdx + extentLength);
+  const lines = [];
+  // Windows-style line breaks are fine because
+  // carriage returns are before the line feed.
+  for (const maybeCommentLine of extent.split('\n')) {
+    if (!commentRegex.test(maybeCommentLine)) {
+      lines.push(maybeCommentLine);
+    }
+  }
   return {
-    buildDependsContent: content.slice(ourIdx, ourIdx + extent),
-    lengthProcessed: ourIdx + extent,
+    buildDependsContent: lines.join('\n'),
+    lengthProcessed: ourIdx + extentLength,
   };
 }