expression :: Parser Expression
expression = foldl1 (<|>) (fmap try expressionList)
  where
    expressionList =
      [ constExpr
      , binOpExpr
      , unaryOpExpr
      , ifExpr
      , condExpr
      , varExpr
      , letExpr
      , letRecExpr
      , procExpr
      , callExpr
      , beginExpr
      , assignExpr
      , setDynamicExpr
      , refExpr
      , deRefExpr
      , setRefExpr
      ]
expression :: Parser Expression
expression = foldl1 (<|>) (fmap try expressionList)
  where
    expressionList =
      [ constExpr
      , binOpExpr
      , unaryOpExpr
      , ifExpr
      , condExpr
      , varExpr
      , letExpr
      , letRecExpr
      , procExpr
      , callExpr
      , beginExpr
      , assignExpr
      , setDynamicExpr
      , refExpr
      , deRefExpr
      , setRefExpr
      ]
expression = foldl1 (<|>) (fmap try expressionList)
  where
    expressionList =
      [ constExpr
      , binOpExpr
      , unaryOpExpr
      , ifExpr
      , condExpr
      , varExpr
      , letExpr
      , letRecExpr
      , procExpr
      , callExpr
      , beginExpr
      , assignExpr
      , setDynamicExpr
      , refExpr
      , deRefExpr
      , setRefExpr
      ]