diff --git a/impl/ZOWIE.hs/src/Language/ZOWIE/Parser.hs b/impl/ZOWIE.hs/src/Language/ZOWIE/Parser.hs
index 2a3646b..9ecca44 100644
--- a/impl/ZOWIE.hs/src/Language/ZOWIE/Parser.hs
+++ b/impl/ZOWIE.hs/src/Language/ZOWIE/Parser.hs
@@ -40,7 +40,7 @@
 
 operand = do
     spaces
-    r <- indirect <|> direct <|> immediate
+    r <- (try indirect) <|> (try direct) <|> immediate
     return r
 
 indirect = do
@@ -56,7 +56,7 @@
 
 immediate = do
     n <- number
-    return $ Direct n
+    return $ Immediate n
 
 number = do
     c <- digit
diff --git a/impl/ZOWIE.hs/src/Main.hs b/impl/ZOWIE.hs/src/Main.hs
index fec528f..74aa9c0 100644
--- a/impl/ZOWIE.hs/src/Main.hs
+++ b/impl/ZOWIE.hs/src/Main.hs
@@ -11,6 +11,11 @@
 main = do
     args <- getArgs
     case args of
+        ["parse", fileName] -> do
+            text <- readFile fileName
+            let prog = Parser.parseZOWIE text
+            putStrLn $ show $ prog
+            return ()
         ["run", fileName] -> do
             text <- readFile fileName
             let prog = Parser.parseZOWIE text
@@ -18,7 +23,7 @@
             putStrLn $ show $ result
             return ()
         _ -> do
-            abortWith "Usage: zowie run <carriage-program-text-filename>"
+            abortWith "Usage: zowie (parse|run) <zowie-program-filename>"
 
 abortWith msg = do
     hPutStrLn stderr msg