diff --git a/cw/src/Challenges.hs b/cw/src/Challenges.hs
index 1264c1923f1c6631ed30c697c87c745b258ca2ea..cca5fb07e9b8b39e36f77af764d37932e71cd0c9 100644
--- a/cw/src/Challenges.hs
+++ b/cw/src/Challenges.hs
@@ -323,39 +323,45 @@ parseLamMacro _ = Nothing
 
 macroExpr :: Parse LamMacroExpr
 macroExpr = do string "def"
-               space
-               name <- macroName
-               space
-
+               name  <- token macroName
+               symbol "="
+               e     <- token expr
+               string "in"
+               macro <- many macroExpr
+               return $ LamDef [(name,e)]
 
 
 expr :: Parser LamExpr
 expr = do {x    <- var;      return $ LamVar x}      <|>
+
        do {name <- macroName;return $ LamMacro name} <|>
+
        do e1    <- expr
           space
           e2    <- expr
           return $ LamApp e1 e2                      <|>
+
        do char '\'
           x     <- var
           symbol "->"
           e     <- expr
           return $ LamAbs x e                        <|>
+
        do char '('
-          e     <- identifier
+          e     <- token expr
           char ')'
           return e
 
 
 macroName :: Parser String
 macroName = do name <- some upper
-               return $ name
+               return name
 
 
 var :: Parser Int
 var = do char 'x'
-         x <- some digit
-         return $ read x
+         x <- nat
+         return x