diff --git a/CHANGES.md b/CHANGES.md
index 6c2b5d327993b2e5480f082f96a80431c506bb54..95e1763adca626d982409770e4887d9bfb276ff3 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,7 @@
 ## Changes in version 2.18.0
 
+ * Support user defined signatures on pattern synonyms
+
  * Synopsis is working again (#599)
 
 ## Changes in version 2.17.4
diff --git a/haddock-api/src/Haddock/GhcUtils.hs b/haddock-api/src/Haddock/GhcUtils.hs
index dcc1d834cbabc08571a52a84ed9a9a5ac4c2adf9..4280cd80b7ed0623171cc32686795c2672a57ae6 100644
--- a/haddock-api/src/Haddock/GhcUtils.hs
+++ b/haddock-api/src/Haddock/GhcUtils.hs
@@ -88,6 +88,10 @@ filterSigNames p (ClassOpSig is_default ns ty) =
   case filter (p . unLoc) ns of
     []       -> Nothing
     filtered -> Just (ClassOpSig is_default filtered ty)
+filterSigNames p (PatSynSig ns ty) =
+  case filter (p . unLoc) ns of
+    []       -> Nothing
+    filtered -> Just (PatSynSig filtered ty)
 filterSigNames _ _                           = Nothing
 
 ifTrueJust :: Bool -> name -> Maybe name
@@ -110,6 +114,7 @@ sigNameNoLoc _                         = []
 isUserLSig :: LSig name -> Bool
 isUserLSig (L _(TypeSig {}))    = True
 isUserLSig (L _(ClassOpSig {})) = True
+isUserLSig (L _(PatSynSig {}))  = True
 isUserLSig _                    = False
 
 
diff --git a/haddock-api/src/Haddock/Interface/Create.hs b/haddock-api/src/Haddock/Interface/Create.hs
index 26ac0281341eed3dca6e42af3a85e57d45c1f0d7..98d4dbe89f54f62ebe7f8733d21d574acd3f0ef9 100644
--- a/haddock-api/src/Haddock/Interface/Create.hs
+++ b/haddock-api/src/Haddock/Interface/Create.hs
@@ -842,6 +842,7 @@ fullModuleContents dflags warnings gre (docMap, argMap, subMap, declMap, instMap
     expandSig :: Sig name -> [Sig name]
     expandSig (TypeSig names t)      = [ TypeSig [n] t      | n <- names ]
     expandSig (ClassOpSig b names t) = [ ClassOpSig b [n] t | n <- names ]
+    expandSig (PatSynSig names t)    = [ PatSynSig [n] t    | n <- names ]
     expandSig x                      = [x]
 
     mkExportItem :: LHsDecl Name -> ErrMsgGhc (Maybe (ExportItem Name))
diff --git a/html-test/ref/PatternSyns.html b/html-test/ref/PatternSyns.html
index 9f0caaa27109bcc26c1b42ac799897c61fa2fff7..2cf936b3721219fd5af6eba67ba85123b547df06 100644
--- a/html-test/ref/PatternSyns.html
+++ b/html-test/ref/PatternSyns.html
@@ -118,6 +118,16 @@ window.onload = function () {pageLoad();};
 	    > k a (b :: k). <a href="#"
 	    >(&gt;&lt;)</a
 	    > k a b</li
+	  ><li class="src short"
+	  ><span class="keyword"
+	    >pattern</span
+	    > <a href="#"
+	    >PatWithExplicitSig</a
+	    > :: <a href="#"
+	    >Eq</a
+	    > somex =&gt; somex -&gt; <a href="#"
+	    >FooType</a
+	    > somex</li
 	  ></ul
 	></div
       ><div id="interface"
@@ -279,6 +289,25 @@ window.onload = function () {pageLoad();};
 	      ></p
 	    ></div
 	  ></div
+	><div class="top"
+	><p class="src"
+	  ><span class="keyword"
+	    >pattern</span
+	    > <a id="v:PatWithExplicitSig" class="def"
+	    >PatWithExplicitSig</a
+	    > :: <a href="#"
+	    >Eq</a
+	    > somex =&gt; somex -&gt; <a href="#"
+	    >FooType</a
+	    > somex <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    >Earlier ghc versions didn't allow explicit signatures
+ on pattern synonyms.</p
+	    ></div
+	  ></div
 	></div
       ></div
     ><div id="footer"
diff --git a/html-test/src/PatternSyns.hs b/html-test/src/PatternSyns.hs
index 8af5eb2323e8de7ba418841ab78452ffd664d4da..a8de113c09846f21cdd44bed760140578e4abb11 100644
--- a/html-test/src/PatternSyns.hs
+++ b/html-test/src/PatternSyns.hs
@@ -20,3 +20,8 @@ data (a :: *) >< b = Empty
 
 -- | Pattern for 'Empty'
 pattern E = Empty
+
+-- | Earlier ghc versions didn't allow explicit signatures
+-- on pattern synonyms.
+pattern PatWithExplicitSig :: Eq somex => somex -> FooType somex
+pattern PatWithExplicitSig x = FooCtor x