diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for Weeder
 
+1.0.4, released 2018-05-02
+    #38, make sure you parse bracketed version ranges properly
 1.0.3, released 2018-03-04
     #35, support ^>= operator in Cabal
 1.0.2, released 2018-03-01
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -26,6 +26,7 @@
 
 * GHC with `-fwarn-unused-binds -fwarn-unused-imports`, which finds unused definitions and unused imports in a module.
 * [HLint](https://github.com/ndmitchell/hlint#readme), looking for "Redundant extension" hints, which finds unused extensions.
+* [Unused](https://github.com/joshuaclayton/unused), which works at the level of `ctags` information, so can be used if you don't want to use `stack`, can't compile your code, or want to detect unused code between projects.
 
 ## Ignoring weeds
 
diff --git a/src/Cabal.hs b/src/Cabal.hs
--- a/src/Cabal.hs
+++ b/src/Cabal.hs
@@ -135,7 +135,8 @@
         trimEqual xs = map (drop n) xs
             where n = minimum $ 0 : map (length . takeWhile isSpace) xs
         listSplit = concatMap (wordsBy (`elem` " ,"))
-        parsePackage = dropSuffix "-any" . filter (not . isSpace) . takeWhile (`notElem` "^=><")
+        isPackageNameChar x = isAlphaNum x || x == '-'
+        parsePackage = dropSuffix "-any" . takeWhile isPackageNameChar . trim
 
         f (keyValues -> (k,vs)) = case k of
             "if" -> parse vs
diff --git a/weeder.cabal b/weeder.cabal
--- a/weeder.cabal
+++ b/weeder.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               weeder
-version:            1.0.3
+version:            1.0.4
 license:            BSD3
 license-file:       LICENSE
 category:           Development
@@ -16,7 +16,7 @@
 extra-doc-files:
     README.md
     CHANGES.txt
-tested-with:        GHC==8.2.2, GHC==8.0.2, GHC==7.10.3
+tested-with:        GHC==8.4.1, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3
 
 source-repository head
     type:     git
