diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for inline-asm
 
+## v0.4.0.1
+
+* Fix expression parser not parsing some expressions it definitely should parse.
+
 ## v0.4.0.0
 
 * Add helpers (`unroll`/`unrolls`) for compile-time loop unrolling.
diff --git a/inline-asm.cabal b/inline-asm.cabal
--- a/inline-asm.cabal
+++ b/inline-asm.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: f683958e05ac6942c4577cd9ff973a4bb40eed75491ff79902ed77b42389b28a
+-- hash: 1c3cded6588b9b5609e74d24e1b430bda30bb591a276e05d7908a41a23636c86
 
 name:           inline-asm
-version:        0.4.0.0
+version:        0.4.0.1
 synopsis:       Inline some Assembly in ur Haskell!
 description:    Please see the README on GitHub at <https://github.com/0xd34df00d/inline-asm#readme>
 category:       FFI
diff --git a/src/Language/Asm/Inline/QQ.hs b/src/Language/Asm/Inline/QQ.hs
--- a/src/Language/Asm/Inline/QQ.hs
+++ b/src/Language/Asm/Inline/QQ.hs
@@ -58,17 +58,19 @@
   mempty = AsmQQCode ""
 
 
-parseExpr :: MonadError String m => String -> Int -> String -> m Int
-parseExpr var num inputStr = liftEither $ first showParseError $ runParser (expr <* eof) "" inputStr
+parseExpr :: MonadError String m => String -> String -> m (Int -> Int)
+parseExpr var inputStr = liftEither $ first showParseError $ runParser (expr <* eof) "" inputStr
   where
     expr = makeExprParser term table <?> "expr"
-    term = parens expr <|> ML.signed lexSpace (string "0x" *> ML.hexadecimal <|> ML.decimal) <|> (lexeme (string var) $> num) <?> "term"
+    term = parens expr
+       <|> lexeme (ML.signed lexSpace (string "0x" *> ML.hexadecimal <|> ML.decimal) <&> const)
+       <|> lexeme (string var $> id)
     table = [ [ binary "*" (*) ]
             , [ binary "+" (+)
               , binary "-" (-)
               ]
             ]
-    binary name fun = CE.InfixL $ symbol name $> fun
+    binary name fun = CE.InfixL $ symbol name $> (\l r n -> l n `fun` r n)
     symbol = ML.symbol lexSpace
     parens = between (symbol "(") (symbol ")")
     lexeme = ML.lexeme lexSpace
@@ -79,8 +81,8 @@
                             Left err -> error err
                             Right codes -> mconcat $ getZipList codes
   where
-    sub str = case traverse (\n -> parseExpr var n str) ints of
-                   Right results -> show <$> ZipList results
+    sub str = case parseExpr var str of
+                   Right fun -> ZipList $ show . fun <$> ints
                    Left _ -> pure $ "{" <> str <> "}"
 
 unrolls :: String -> [Int] -> [AsmQQCode] -> AsmQQCode
