diff --git a/Text/Trifecta/Parser/Char.hs b/Text/Trifecta/Parser/Char.hs
--- a/Text/Trifecta/Parser/Char.hs
+++ b/Text/Trifecta/Parser/Char.hs
@@ -187,9 +187,7 @@
    guard $ lr > 0
    case compare lbs lr of
      LT | bs `Strict.isPrefixOf` r -> bs <$ skipping (delta bs)
-        | otherwise -> empty
      EQ | bs == r -> bs <$ skipping (delta bs)
-        | otherwise -> empty
      GT | r `Strict.isPrefixOf` bs -> bs <$ skipping (delta r) *> byteString (Strict.drop lr bs)
-        | otherwise -> empty
+     _ -> empty 
  <?> show (UTF8.toString bs)
diff --git a/Text/Trifecta/Parser/Token/Identifier.hs b/Text/Trifecta/Parser/Token/Identifier.hs
--- a/Text/Trifecta/Parser/Token/Identifier.hs
+++ b/Text/Trifecta/Parser/Token/Identifier.hs
@@ -53,7 +53,10 @@
 -- | parse an non-reserved identifier or symbol
 ident :: MonadTokenParser m => IdentifierStyle m -> m ByteString
 ident s = lexeme $ try $ do
-  name <- highlight (styleHighlight s) (sliced (styleStart s *> skipMany (styleLetter s))) <?> styleName s
-  when (member name (styleReserved s)) $ unexpected $ "reserved " ++ styleName s ++ " " ++ show name
+  m <- mark
+  name <- try (highlight (styleHighlight s) (sliced (styleStart s *> skipMany (styleLetter s)))) <?> styleName s
+  when (member name (styleReserved s)) $ do
+    release m
+    unexpected $ "reserved " ++ styleName s ++ " " ++ show name
   return name
 
diff --git a/trifecta.cabal b/trifecta.cabal
--- a/trifecta.cabal
+++ b/trifecta.cabal
@@ -1,6 +1,6 @@
 name:          trifecta
 category:      Text, Parsing, Diagnostics, Pretty Printer, Logging
-version:       0.37
+version:       0.38
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
