parseLet = do reserved "let"
              ctx <- getState
              (TmBind var binding) <- (parseAbbBind False)
              reserved "in"
              body <- parseTerm
              setState ctx
              case binding of
                TmAbbBind t ty -> return $ TmLet var t body
                otherwise      -> fail "malformed let statement"

{- ------------------------------
   Fix and Letrec
   ------------------------------ -}
parseLet = do reserved "let"
              ctx <- getState
              (TmBind var binding) <- (parseAbbBind False)
              reserved "in"
              body <- parseTerm
              setState ctx
              case binding of
                TmAbbBind t ty -> return $ TmLet var t body
                otherwise      -> fail "malformed let statement"

{- ------------------------------
   Fix and Letrec
   ------------------------------ -}
parseLet = do reserved "let"
              ctx <- getState
              (TmBind var binding) <- (parseAbbBind False)
              reserved "in"
              body <- parseTerm
              setState ctx
              case binding of
                TmAbbBind t ty -> return $ TmLet var t body
                otherwise      -> fail "malformed let statement"

{- ------------------------------
   Fix and Letrec
   ------------------------------ -}