diff --git a/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs b/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
index 0463e26ef0a3e18abf627b97d64908123ecf51bd..cff6bcc99ddcca33da4c5db14d7d029558c07edd 100644
--- a/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
+++ b/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
@@ -28,7 +28,7 @@ import Control.Applicative
 import Control.Arrow (first)
 import Control.Monad
 import Data.Char (chr, isAlpha, isSpace, isUpper)
-import Data.List (elemIndex, intercalate, unfoldr)
+import Data.List (elemIndex, intercalate, unfoldr, intersperse)
 import Data.Maybe (fromMaybe, mapMaybe)
 import Data.Monoid
 import qualified Data.Set as Set
@@ -576,11 +576,12 @@ since = do
   return DocEmpty
   where
     version = do
-      pkg <- Parsec.optionMaybe $ Parsec.try $ package <* Parsec.char '-'
+      pkg <- Parsec.optionMaybe $ Parsec.try $ package
       ver <- decimal `Parsec.sepBy1` "."
       return (MetaSince pkg ver)
 
-    package = Parsec.many1 $ Parsec.alphaNum <|> Parsec.oneOf "_-"
+    package = combine <$> (Parsec.many1 (Parsec.letter <|> Parsec.char '_')) `Parsec.endBy1` (Parsec.char '-')
+    combine = concat . intersperse "-"
 
 -- | Headers inside the comment denoted with @=@ signs, up to 6 levels
 -- deep.
diff --git a/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs b/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
index 47ed58802c1af4a9ca6b3033869314ea7dabceba..40806b47e9e519b6747c03544e257ee895af15d0 100644
--- a/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
+++ b/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
@@ -567,7 +567,7 @@ spec = do
                           , sinceVersion = [0, 5, 0]
                           }
                   }
-            , _doc = DocParagraph "@since foo-bar-0.5.0"
+            , _doc = DocEmpty
             }
 
       context "when given multiple times" $ do