diff --git a/attoparsec-uri.cabal b/attoparsec-uri.cabal
--- a/attoparsec-uri.cabal
+++ b/attoparsec-uri.cabal
@@ -1,5 +1,5 @@
 name:                attoparsec-uri
-version:             0.0.0
+version:             0.0.1
 synopsis:            URI parser / printer using attoparsec
 -- description:
 homepage:            https://github.com/athanclark/attoparsec-uri#readme
diff --git a/src/Data/URI/Auth/Host.hs b/src/Data/URI/Auth/Host.hs
--- a/src/Data/URI/Auth/Host.hs
+++ b/src/Data/URI/Auth/Host.hs
@@ -119,6 +119,7 @@
 data URIAuthHost
   = IPv4 !IPv4
   | IPv6 !IPv6
+  | Localhost
   | -- | @Host ["foo","bar"] "com"@ represents @foo.bar.com@
     Host
       { uriAuthHostName   :: !(Vector Text)
@@ -128,6 +129,7 @@
 instance Show URIAuthHost where
   show (IPv4 l4) = showIPv4 l4
   show (IPv6 r6) = showIPv6 r6
+  show Localhost = "localhost"
   show (Host ns c) = intercalate "." $ V.toList $ T.unpack <$> ns `V.snoc` c
 
 
@@ -135,13 +137,15 @@
 parseURIAuthHost =
       (IPv4 <$> parseIPv4)
   <|> (IPv6 <$> parseIPv6)
-  <|> (uncurry Host <$> parseHost)
+  <|> parseHost
   where
-    parseHost :: Parser (Vector Text, Text)
+    parseHost :: Parser URIAuthHost
     parseHost = do
       xss@(x:xs) <- many1 (satisfy $ \c -> all (c /=) ['.',':','/','?']) `sepBy1` char '.'
       if null xs
-        then fail "Only one term parsed"
+        then if x == "localhost"
+             then pure Localhost
+             else fail "Only one term parsed"
         else let xss' :: Vector Text
                  xss' = T.pack <$> V.fromList xss
                  unsnoc :: Vector a -> (Vector a, a)
@@ -149,4 +153,4 @@
                    let (fs,l) = V.splitAt (V.length x - 1) x
                    in  (fs, l V.! 0)
                  (ns,c) = unsnoc xss'
-             in  pure (unsnoc xss')
+             in  pure (uncurry Host $ unsnoc xss')
